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

191 lines
14 KiB
Markdown
Raw Normal View History

2023-06-03 13:10:46 +00:00
# En-têtes HTTP spéciaux
2022-04-28 16:01:33 +00:00
<details>
2023-04-25 18:35:28 +00:00
<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>
2022-04-28 16:01:33 +00:00
2023-06-03 13:10:46 +00:00
* Travaillez-vous dans une **entreprise de cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
* Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Partagez vos astuces de piratage en soumettant des PR au** [**repo hacktricks**](https://github.com/carlospolop/hacktricks) **et au** [**repo hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
2022-04-28 16:01:33 +00:00
</details>
2023-06-03 13:10:46 +00:00
## Listes de mots et outils
2021-09-19 15:52:48 +00:00
* [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)
2021-09-19 15:52:48 +00:00
2023-06-03 13:10:46 +00:00
## En-têtes pour changer l'emplacement
2021-09-19 15:19:00 +00:00
2023-06-03 13:10:46 +00:00
Réécrire **l'adresse IP source** :
2021-09-19 15:19:00 +00:00
2022-04-05 22:24:52 +00:00
* `X-Originating-IP: 127.0.0.1`
2021-09-19 15:52:48 +00:00
* `X-Forwarded-For: 127.0.0.1`
2022-04-19 22:38:50 +00:00
* `X-Forwarded: 127.0.0.1`
2021-09-19 15:52:48 +00:00
* `Forwarded-For: 127.0.0.1`
2021-09-27 10:58:30 +00:00
* `X-Forwarded-Host: 127.0.0.1`
2022-04-05 22:24:52 +00:00
* `X-Remote-IP: 127.0.0.1`
2021-09-19 15:19:00 +00:00
* `X-Remote-Addr: 127.0.0.1`
* `X-ProxyUser-Ip: 127.0.0.1`
* `X-Original-URL: 127.0.0.1`
2021-09-19 15:52:48 +00:00
* `Client-IP: 127.0.0.1`
2021-09-27 10:58:30 +00:00
* `X-Client-IP: 127.0.0.1`
* `X-Host: 127.0.0.1`
2021-09-19 15:52:48 +00:00
* `True-Client-IP: 127.0.0.1`
* `Cluster-Client-IP: 127.0.0.1`
* `X-ProxyUser-Ip: 127.0.0.1`
2021-09-20 13:06:32 +00:00
* `Via: 1.0 fred, 1.1 127.0.0.1`
2023-06-03 13:10:46 +00:00
* `Connection: close, X-Forwarded-For` (Vérifiez les en-têtes hop-by-hop)
2021-09-19 15:19:00 +00:00
2023-06-03 13:10:46 +00:00
Réécrire **l'emplacement** :
2021-09-19 15:19:00 +00:00
* `X-Original-URL: /admin/console`
* `X-Rewrite-URL: /admin/console`
2023-06-03 13:10:46 +00:00
## En-têtes hop-by-hop
2021-09-19 15:19:00 +00:00
2023-06-03 13:10:46 +00:00
Un en-tête hop-by-hop est un en-tête conçu pour être traité et consommé par le proxy qui traite actuellement la requête, par opposition à un en-tête de bout en bout.
2021-09-19 15:19:00 +00:00
* `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 %}
2021-09-19 15:19:00 +00:00
2022-06-27 16:53:32 +00:00
## HTTP Request Smuggling
2021-09-19 15:19:00 +00:00
* `Content-Length: 30`
* `Transfer-Encoding: chunked`
2021-11-05 20:59:42 +00:00
{% content-ref url="../../pentesting-web/http-request-smuggling/" %}
[http-request-smuggling](../../pentesting-web/http-request-smuggling/)
{% endcontent-ref %}
2021-09-19 15:19:00 +00:00
2023-06-03 13:10:46 +00:00
## En-têtes de cache
2021-09-19 15:52:48 +00:00
2023-06-03 13:10:46 +00:00
**En-têtes de cache du serveur** :
2021-09-20 13:06:32 +00:00
2023-06-03 13:10:46 +00:00
* **`X-Cache`** dans la réponse peut avoir la valeur **`miss`** lorsque la requête n'a pas été mise en cache et la valeur **`hit`** lorsqu'elle est mise en cache
* **`Cache-Control`** indique si une ressource est mise en cache et quand la prochaine fois que la ressource sera mise en cache : `Cache-Control: public, max-age=1800`
* **`Vary`** est souvent utilisé dans la réponse pour **indiquer des en-têtes supplémentaires** qui sont traités comme **partie de la clé de cache** même s'ils ne sont normalement pas clés.
* **`Age`** définit les temps en secondes pendant lesquels l'objet a été dans le cache proxy.
* **`Server-Timing: cdn-cache; desc=HIT`** indique également qu'une ressource a été mise en cache
2021-09-19 15:52:48 +00:00
{% content-ref url="../../pentesting-web/cache-deception.md" %}
[cache-deception.md](../../pentesting-web/cache-deception.md)
{% endcontent-ref %}
2021-09-19 15:52:48 +00:00
2023-06-03 13:10:46 +00:00
**En-têtes de cache local** :
2023-06-03 13:10:46 +00:00
* `Clear-Site-Data`: En-tête pour indiquer le cache qui doit être supprimé : `Clear-Site-Data: "cache", "cookies"`
* `Expires`: Contient la date/heure à laquelle la réponse doit expirer
```http
Content-Security-Policy: require-trusted-types-for 'script'
```
```javascript
2021-10-19 22:49:43 +00:00
// 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
2021-10-19 22:49:43 +00:00
// 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;'
```
2022-06-27 16:53:32 +00:00
### X-Content-Type-Options <a href="#xcto" id="xcto"></a>
2021-10-19 22:49:43 +00:00
2023-06-03 13:10:46 +00:00
Lorsqu'un document HTML malveillant est servi depuis votre domaine (par exemple, si une image téléchargée sur un service de photos contient une balise HTML valide), certains navigateurs le traiteront comme un document actif et lui permettront d'exécuter des scripts dans le contexte de l'application, ce qui entraîne une faille de [cross-site scripting](https://www.google.com/about/appsecurity/learning/xss/).
2021-10-19 22:49:43 +00:00
2023-06-03 13:10:46 +00:00
`X-Content-Type-Options: nosniff` l'empêche en indiquant au navigateur que le [type MIME](https://mimesniff.spec.whatwg.org/#introduction) défini dans l'en-tête `Content-Type` pour une réponse donnée est correct. Cette en-tête est recommandée pour **toutes vos ressources**.
2021-10-19 22:49:43 +00:00
```http
X-Content-Type-Options: nosniff
```
2022-06-27 16:53:32 +00:00
### X-Frame-Options <a href="#xfo" id="xfo"></a>
2021-10-19 22:49:43 +00:00
2023-06-03 13:10:46 +00:00
Si un site Web malveillant peut intégrer votre site en tant qu'iframe, cela peut permettre aux attaquants d'invoquer des actions non intentionnelles de l'utilisateur avec [clickjacking](https://portswigger.net/web-security/clickjacking). De plus, dans certains cas, les attaques de type [Spectre](https://en.wikipedia.org/wiki/Spectre\_\(security\_vulnerability\)) donnent aux sites Web malveillants une chance d'apprendre le contenu d'un document intégré.
2021-10-19 22:49:43 +00:00
2023-06-03 13:10:46 +00:00
`X-Frame-Options` indique si un navigateur doit être autorisé ou non à rendre une page dans un `<frame>`, `<iframe>`, `<embed>` ou `<object>`. **Tous les documents** sont recommandés d'envoyer cet en-tête pour indiquer s'ils autorisent leur intégration par d'autres documents.
2021-10-19 22:49:43 +00:00
2023-06-03 13:10:46 +00:00
Si vous avez besoin d'un contrôle plus granulaire, tel que permettre uniquement à une origine spécifique d'intégrer le document, utilisez la directive [CSP](https://web.dev/security-headers/#csp) [`frame-ancestors`](https://developer.mozilla.org/docs/Web/HTTP/Headers/Content-Security-Policy/frame-ancestors).
2021-10-19 22:49:43 +00:00
```http
X-Frame-Options: DENY
```
2023-06-03 13:10:46 +00:00
### Politique de ressources entre origines (CORP) <a href="#corp" id="corp"></a>
2021-10-19 22:49:43 +00:00
2023-06-03 13:10:46 +00:00
Un attaquant peut intégrer des ressources provenant d'une autre origine, par exemple de votre site, pour en apprendre davantage sur elles en exploitant des fuites inter-sites basées sur le web (cross-site leaks).
2021-10-19 22:49:43 +00:00
2023-06-03 13:10:46 +00:00
`Cross-Origin-Resource-Policy` atténue ce risque en indiquant l'ensemble de sites web à partir duquel il peut être chargé. L'en-tête prend l'une des trois valeurs suivantes : `same-origin`, `same-site` et `cross-origin`. **Toutes les ressources** sont recommandées d'envoyer cet en-tête pour indiquer si elles autorisent leur chargement par d'autres sites web.
2021-10-19 22:49:43 +00:00
```
Cross-Origin-Resource-Policy: same-origin
```
2023-06-03 13:10:46 +00:00
### Politique de ressources inter-origines (CORB) <a href="#corp" id="corp"></a>
2021-10-19 22:49:43 +00:00
2023-06-03 13:10:46 +00:00
Elle aide à atténuer la menace des attaques de canal secondaire (y compris Spectre). Elle est conçue pour empêcher le navigateur de **délivrer certaines réponses de réseau inter-origines à une page web**, lorsqu'elles pourraient contenir des informations sensibles et ne sont **pas nécessaires pour les fonctionnalités web existantes**.\
De la même manière, elle aide également à atténuer les vulnérabilités d'inclusion de script entre sites (XSSI).\
Par exemple, elle bloquera une réponse text/html inter-origines demandée à partir d'une balise \<script> ou \<img>, la remplaçant par une réponse vide à la place. C'est une partie importante des protections incluses avec [Site Isolation](https://www.chromium.org/Home/chromium-security/site-isolation).
2021-10-19 22:49:43 +00:00
2023-06-03 13:10:46 +00:00
### Politique d'ouverture inter-origines (COOP) <a href="#coop" id="coop"></a>
2021-10-19 22:49:43 +00:00
2023-06-03 13:10:46 +00:00
Le site d'un attaquant peut ouvrir un autre site dans une fenêtre contextuelle pour en apprendre des informations en exploitant des [fuites inter-sites basées sur le web](https://xsleaks.dev). Dans certains cas, cela peut également permettre l'exploitation d'attaques de canal secondaire basées sur [Spectre](https://en.wikipedia.org/wiki/Spectre\_\(security\_vulnerability\)).
2021-10-19 22:49:43 +00:00
2023-06-03 13:10:46 +00:00
L'en-tête `Cross-Origin-Opener-Policy` fournit un moyen à un document de s'isoler des fenêtres inter-origines ouvertes via `window.open()` ou un lien avec `target="_blank"` sans `rel="noopener"`. En conséquence, tout ouvreur inter-origines du document n'aura aucune référence à celui-ci et ne pourra pas interagir avec lui.
2021-10-19 22:49:43 +00:00
```http
Cross-Origin-Opener-Policy: same-origin-allow-popups
```
2023-06-03 13:10:46 +00:00
### Partage des ressources entre origines multiples (CORS) <a href="#cors" id="cors"></a>
2021-10-19 22:49:43 +00:00
2023-06-03 13:10:46 +00:00
Contrairement aux autres éléments de cet article, le partage des ressources entre origines multiples (CORS) n'est pas un en-tête, mais un mécanisme de navigateur qui demande et permet l'accès à des ressources entre origines multiples.
2021-10-19 22:49:43 +00:00
2023-06-03 13:10:46 +00:00
Par défaut, les navigateurs appliquent [la politique de même origine](https://web.dev/same-origin-policy/) pour empêcher une page web d'accéder à des ressources entre origines multiples. Par exemple, lorsqu'une image entre origines multiples est chargée, même si elle est affichée sur la page web visuellement, le JavaScript sur la page n'a pas accès aux données de l'image. Le fournisseur de ressources peut assouplir les restrictions et permettre à d'autres sites web de lire la ressource en optant pour CORS.
2021-10-19 22:49:43 +00:00
```http
Access-Control-Allow-Origin: https://example.com
Access-Control-Allow-Credentials: true
```
2023-06-03 13:10:46 +00:00
### Politique d'intégration de l'origine croisée (COEP) <a href="#coep" id="coep"></a>
2023-06-03 13:10:46 +00:00
Pour réduire la capacité des attaques basées sur [Spectre](https://en.wikipedia.org/wiki/Spectre\_\(security\_vulnerability\)) à voler des ressources d'origine croisée, des fonctionnalités telles que `SharedArrayBuffer` ou `performance.measureUserAgentSpecificMemory()` sont désactivées par défaut.
2021-10-19 22:49:43 +00:00
2023-06-03 13:10:46 +00:00
`Cross-Origin-Embedder-Policy: require-corp` empêche les documents et les travailleurs de charger des ressources d'origine croisée telles que des images, des scripts, des feuilles de style, des iframes et d'autres, à moins que ces ressources n'optent explicitement pour le chargement via des en-têtes [CORS](https://web.dev/security-headers/#cors) ou [CORP](https://web.dev/security-headers/#corp). COEP peut être combiné avec `Cross-Origin-Opener-Policy` pour opter un document pour l'isolation d'origine croisée.
2021-10-19 22:49:43 +00:00
2023-06-03 13:10:46 +00:00
Utilisez `Cross-Origin-Embedder-Policy: require-corp` lorsque vous souhaitez activer l'isolation d'origine croisée pour votre document.
2021-10-19 22:49:43 +00:00
```http
Cross-Origin-Embedder-Policy: require-corp
```
2022-06-27 16:53:32 +00:00
### HTTP Strict Transport Security (HSTS) <a href="#hsts" id="hsts"></a>
2021-10-19 22:49:43 +00:00
2023-06-03 13:10:46 +00:00
La communication sur une connexion HTTP non chiffrée n'est pas cryptée, ce qui rend les données transférées accessibles aux espions du réseau.
2021-10-19 22:49:43 +00:00
2023-06-03 13:10:46 +00:00
L'en-tête `Strict-Transport-Security` informe le navigateur qu'il ne doit jamais charger le site en utilisant HTTP et qu'il doit plutôt utiliser HTTPS. Une fois qu'il est défini, le navigateur utilisera HTTPS au lieu de HTTP pour accéder au domaine sans redirection pendant une durée définie dans l'en-tête.
2021-10-19 22:49:43 +00:00
```http
Strict-Transport-Security: max-age=3153600
```
2023-06-03 13:10:46 +00:00
## Ressources
2021-09-19 19:55:40 +00:00
* [https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers)
2021-10-19 22:49:43 +00:00
* [https://web.dev/security-headers/](https://web.dev/security-headers/)
2022-04-28 16:01:33 +00:00
<details>
2023-04-25 18:35:28 +00:00
<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>
2022-04-28 16:01:33 +00:00
2023-06-03 13:10:46 +00:00
* Travaillez-vous dans une **entreprise de cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
* Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Partagez vos astuces de piratage en soumettant des PR au** [**repo hacktricks**](https://github.com/carlospolop/hacktricks) **et au** [**repo hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
2022-04-28 16:01:33 +00:00
</details>