hacktricks/network-services-pentesting/pentesting-web/special-http-headers.md

191 lines
13 KiB
Markdown
Raw Normal View History

2023-06-05 18:33:24 +00:00
# Cabeceras HTTP especiales
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
* ¿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)**.**
* **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>
## Listas de palabras y herramientas
* [https://github.com/danielmiessler/SecLists/tree/master/Miscellaneous/web/http-request-headers](https://github.com/danielmiessler/SecLists/tree/master/Miscellaneous/web/http-request-headers)
* [https://github.com/rfc-st/humble](https://github.com/rfc-st/humble)
## Cabeceras para cambiar la ubicación
Reescribir **IP origen**:
* `X-Originating-IP: 127.0.0.1`
* `X-Forwarded-For: 127.0.0.1`
* `X-Forwarded: 127.0.0.1`
* `Forwarded-For: 127.0.0.1`
* `X-Forwarded-Host: 127.0.0.1`
* `X-Remote-IP: 127.0.0.1`
* `X-Remote-Addr: 127.0.0.1`
* `X-ProxyUser-Ip: 127.0.0.1`
* `X-Original-URL: 127.0.0.1`
* `Client-IP: 127.0.0.1`
* `X-Client-IP: 127.0.0.1`
* `X-Host: 127.0.0.1`
* `True-Client-IP: 127.0.0.1`
* `Cluster-Client-IP: 127.0.0.1`
* `X-ProxyUser-Ip: 127.0.0.1`
* `Via: 1.0 fred, 1.1 127.0.0.1`
* `Connection: close, X-Forwarded-For` (Comprobar cabeceras hop-by-hop)
Reescribir **ubicación**:
* `X-Original-URL: /admin/console`
* `X-Rewrite-URL: /admin/console`
## Cabeceras hop-by-hop
Una cabecera hop-by-hop es una cabecera diseñada para ser procesada y consumida por el proxy que maneja actualmente la solicitud, en lugar de una cabecera de extremo a extremo.
* `Connection: close, X-Forwarded-For`
{% content-ref url="../../pentesting-web/abusing-hop-by-hop-headers.md" %}
[abusing-hop-by-hop-headers.md](../../pentesting-web/abusing-hop-by-hop-headers.md)
{% endcontent-ref %}
## HTTP Request Smuggling
* `Content-Length: 30`
* `Transfer-Encoding: chunked`
{% content-ref url="../../pentesting-web/http-request-smuggling/" %}
[http-request-smuggling](../../pentesting-web/http-request-smuggling/)
{% endcontent-ref %}
## Cabeceras de caché
**Cabeceras de caché del servidor**:
* **`X-Cache`** en la respuesta puede tener el valor **`miss`** cuando la solicitud no se ha almacenado en caché y el valor **`hit`** cuando está en caché.
* **`Cache-Control`** indica si un recurso se está almacenando en caché y cuándo será la próxima vez que se almacene en caché: `Cache-Control: public, max-age=1800`
* **`Vary`** se utiliza a menudo en la respuesta para **indicar cabeceras adicionales** que se tratan como **parte de la clave de caché** aunque normalmente no lo sean.
* **`Age`** define los tiempos en segundos que el objeto ha estado en la caché del proxy.
* **`Server-Timing: cdn-cache; desc=HIT`** también indica que un recurso se almacenó en caché.
{% content-ref url="../../pentesting-web/cache-deception.md" %}
[cache-deception.md](../../pentesting-web/cache-deception.md)
{% endcontent-ref %}
**Cabeceras de caché local**:
* `Clear-Site-Data`: Cabecera para indicar la caché que debe eliminarse: `Clear-Site-Data: "cache", "cookies"`
* `Expires`: Contiene la fecha/hora en que la respuesta debe caducar: `Expires: Wed, 21 Oct 2015 07:28:00
```http
Content-Security-Policy: require-trusted-types-for 'script'
```
```javascript
// Feature detection
if (window.trustedTypes && trustedTypes.createPolicy) {
// Name and create a policy
const policy = trustedTypes.createPolicy('escapePolicy', {
createHTML: str => {
return str.replace(/\</g, '&lt;').replace(/>/g, '&gt;');
}
});
}
```
```javascript
// Assignment of raw strings is blocked by Trusted Types.
el.innerHTML = 'some string'; // This throws an exception.
// Assignment of Trusted Types is accepted safely.
const escaped = policy.createHTML('<img src=x onerror=alert(1)>');
el.innerHTML = escaped; // '&lt;img src=x onerror=alert(1)&gt;'
```
### X-Content-Type-Options <a href="#xcto" id="xcto"></a>
Cuando se sirve un documento HTML malicioso desde su dominio (por ejemplo, si una imagen cargada en un servicio de fotos contiene marcas HTML válidas), algunos navegadores lo tratarán como un documento activo y permitirán que se ejecuten scripts en el contexto de la aplicación, lo que lleva a un [bug de cross-site scripting](https://www.google.com/about/appsecurity/learning/xss/).
`X-Content-Type-Options: nosniff` lo evita instruyendo al navegador que el [tipo MIME](https://mimesniff.spec.whatwg.org/#introduction) establecido en el encabezado `Content-Type` para una respuesta determinada es correcto. Se recomienda este encabezado para **todos sus recursos**.
```http
X-Content-Type-Options: nosniff
```
### X-Frame-Options <a href="#xfo" id="xfo"></a>
Si un sitio web malintencionado puede incrustar su sitio como un iframe, esto puede permitir que los atacantes invoquen acciones no deseadas por el usuario con [clickjacking](https://portswigger.net/web-security/clickjacking). Además, en algunos casos, los ataques de tipo [Spectre](https://en.wikipedia.org/wiki/Spectre\_\(security\_vulnerability\)) dan a los sitios web malintencionados la oportunidad de conocer el contenido de un documento incrustado.
`X-Frame-Options` indica si un navegador debe permitir o no renderizar una página en un `<frame>`, `<iframe>`, `<embed>` o `<object>`. **Se recomienda** que todos los documentos envíen esta cabecera para indicar si permiten ser incrustados por otros documentos.
Si necesita un control más granular, como permitir solo un origen específico para incrustar el documento, use la directiva [frame-ancestors](https://developer.mozilla.org/docs/Web/HTTP/Headers/Content-Security-Policy/frame-ancestors) de [CSP](https://web.dev/security-headers/#csp).
```http
X-Frame-Options: DENY
```
### Política de Recursos de Origen Cruzado (CORP) <a href="#corp" id="corp"></a>
Un atacante puede incrustar recursos de otro origen, por ejemplo, de su sitio, para obtener información sobre ellos explotando [filtraciones entre sitios](https://xsleaks.dev) basadas en la web.
`Cross-Origin-Resource-Policy` mitiga este riesgo indicando el conjunto de sitios web desde los que se puede cargar. El encabezado toma uno de tres valores: `same-origin`, `same-site` y `cross-origin`. **Se recomienda que todos los recursos** envíen este encabezado para indicar si permiten ser cargados por otros sitios web.
```
Cross-Origin-Resource-Policy: same-origin
```
### Política de Recursos de Origen Cruzado (CORB) <a href="#corp" id="corp"></a>
Ayuda a mitigar la amenaza de ataques de canal lateral (incluyendo Spectre). Está diseñado para evitar que el navegador entregue ciertas respuestas de red de origen cruzado a una página web, cuando podrían contener información sensible y no son necesarias para las características web existentes.\
De la misma manera, también ayuda a mitigar las vulnerabilidades de Inclusión de Script de Sitio Cruzado (XSSI).\
Por ejemplo, bloqueará una respuesta de texto/html de origen cruzado solicitada desde una etiqueta \<script> o \<img>, reemplazándola por una respuesta vacía en su lugar. Esta es una parte importante de las protecciones incluidas con [Site Isolation](https://www.chromium.org/Home/chromium-security/site-isolation).
### Política de Apertura de Origen Cruzado (COOP) <a href="#coop" id="coop"></a>
El sitio web de un atacante puede abrir otro sitio en una ventana emergente para obtener información sobre él explotando [filtraciones de sitio cruzado basadas en la web](https://xsleaks.dev). En algunos casos, esto también puede permitir la explotación de ataques de canal lateral basados en [Spectre](https://en.wikipedia.org/wiki/Spectre\_\(security\_vulnerability\)).
La cabecera `Cross-Origin-Opener-Policy` proporciona una forma para que un documento se aísle de las ventanas de origen cruzado abiertas a través de `window.open()` o un enlace con `target="_blank"` sin `rel="noopener"`. Como resultado, cualquier abridor de origen cruzado del documento no tendrá referencia a él y no podrá interactuar con él.
```http
Cross-Origin-Opener-Policy: same-origin-allow-popups
```
### Compartición de recursos de origen cruzado (CORS) <a href="#cors" id="cors"></a>
A diferencia de otros elementos en este artículo, la Compartición de recursos de origen cruzado (CORS) no es una cabecera, sino un mecanismo del navegador que solicita y permite el acceso a recursos de origen cruzado.
Por defecto, los navegadores aplican [la política de mismo origen](https://web.dev/same-origin-policy/) para evitar que una página web acceda a recursos de origen cruzado. Por ejemplo, cuando se carga una imagen de origen cruzado, aunque se muestre visualmente en la página web, el JavaScript de la página no tiene acceso a los datos de la imagen. El proveedor de recursos puede relajar las restricciones y permitir que otros sitios web lean el recurso optando por CORS.
```http
Access-Control-Allow-Origin: https://example.com
Access-Control-Allow-Credentials: true
```
### Política de inserción de origen cruzado (COEP) <a href="#coep" id="coep"></a>
Para reducir la capacidad de los ataques basados en [Spectre](https://en.wikipedia.org/wiki/Spectre\_\(security\_vulnerability\)) para robar recursos de origen cruzado, se desactivan por defecto características como `SharedArrayBuffer` o `performance.measureUserAgentSpecificMemory()`.
`Cross-Origin-Embedder-Policy: require-corp` impide que los documentos y trabajadores carguen recursos de origen cruzado, como imágenes, scripts, hojas de estilo, iframes y otros, a menos que estos recursos opten explícitamente por ser cargados a través de encabezados [CORS](https://web.dev/security-headers/#cors) o [CORP](https://web.dev/security-headers/#corp). COEP se puede combinar con `Cross-Origin-Opener-Policy` para optar por un documento en el aislamiento de origen cruzado.
Use `Cross-Origin-Embedder-Policy: require-corp` cuando desee habilitar el aislamiento de origen cruzado para su documento.
```http
Cross-Origin-Embedder-Policy: require-corp
```
### HTTP Strict Transport Security (HSTS) <a href="#hsts" id="hsts"></a>
La comunicación a través de una conexión HTTP no cifrada hace que los datos transferidos sean accesibles a los fisgones de nivel de red.
La cabecera `Strict-Transport-Security` informa al navegador que nunca debe cargar el sitio utilizando HTTP y que en su lugar debe utilizar HTTPS. Una vez establecida, el navegador utilizará HTTPS en lugar de HTTP para acceder al dominio sin una redirección durante un período de tiempo definido en la cabecera.
```http
Strict-Transport-Security: max-age=3153600
```
## Recursos
* [https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers)
* [https://web.dev/security-headers/](https://web.dev/security-headers/)
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
* ¿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)**.**
* **Comparte tus trucos de hacking enviando PR al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>