# Cookie Bomb + Onerror XS Leak
{{#include ../../banners/hacktricks-training.md}}
Cette technique combine :
- Cookie bombing: remplir le navigateur de la victime avec de nombreux/volumineux cookies pour l'origine cible afin que les requêtes suivantes atteignent les limites du serveur/de la requête (taille des en-têtes de requête, taille de l'URL dans les redirections, etc.).
- Error-event oracle: sondant un endpoint cross-origin avec un
```
Pourquoi le popup (window.open) ?
- Les navigateurs modernes bloquent de plus en plus les third-party cookies. Ouvrir une top-level window vers la cible rend les cookies first-party, donc les réponses Set-Cookie de la cible seront persistées, permettant l'étape cookie-bomb même avec les restrictions sur les third-party cookies.
Generic probing helper
Si vous disposez déjà d'un moyen de définir de nombreux cookies sur l'origine cible (first-party), vous pouvez réutiliser cet oracle minimal contre n'importe quel endpoint dont le succès/échec entraîne des résultats réseau différents (status/MIME/redirect) :
```js
function probeError(url) {
return new Promise((resolve) => {
const s = document.createElement('script');
s.src = url;
s.onload = () => resolve(false); // loaded successfully
s.onerror = () => resolve(true); // failed (e.g., 4xx/5xx, wrong MIME, blocked)
document.head.appendChild(s);
});
}
```
Conseils pour construire l'oracle
- Forcez l'état “positif” à être plus lourd : enchaînez un redirect supplémentaire uniquement lorsque le prédicat est vrai, ou faites en sorte que le redirect URL reflète une entrée utilisateur non bornée afin qu'elle croisse avec le préfixe deviné.
- Gonflez les en-têtes : répétez le cookie bombing jusqu'à observer une erreur cohérente sur le chemin “lourd”. Les serveurs plafonnent couramment la taille des en-têtes et échoueront plus tôt lorsque de nombreux cookies sont présents.
- Stabilisez : lancez plusieurs opérations de Set-Cookie en parallèle et sondez de manière répétée pour lisser le bruit lié au timing et au cache.
Astuces XS-Search associées
- Des oracles basés sur la longueur de l'URL (pas de cookies nécessaires) peuvent être combinés ou utilisés à la place lorsque vous pouvez forcer une cible de requête très longue :
{{#ref}}
url-max-length-client-side.md
{{#endref}}
Défenses et durcissement
- Rendre les réponses succès/échec indistinguables :
- Évitez les conditional redirects ou de grandes différences de taille de réponse entre les états. Retournez le même statut, le même type de contenu et une longueur de corps similaire quel que soit l'état.
- Bloquer les sondages de sous-ressources cross-site :
- SameSite cookies : définir les cookies sensibles sur SameSite=Lax ou Strict pour que les requêtes de sous-ressource comme