# Cookie Bomb + Onerror XS Leak {{#include ../../banners/hacktricks-training.md}} This technique combines: - Cookie bombing: preencher o navegador da vítima com muitos/grandes cookies para a origem alvo de modo que requisições subsequentes atinjam limites do servidor/requisição (tamanho do header da requisição, tamanho da URL em redirects, etc.). - Error-event oracle: sondar um endpoint cross-origin com um ``` Por que o popup (window.open)? - Navegadores modernos bloqueiam cada vez mais third-party cookies. Abrir um top-level window para o target faz com que os cookies sejam first-party, então respostas Set-Cookie do target vão persistir, permitindo a etapa cookie-bomb mesmo com restrições a third-party cookies. Generic probing helper Se você já tem uma maneira de definir muitos cookies no target origin (first-party), pode reutilizar este minimal oracle contra qualquer endpoint cujo success/failure leve a diferentes network outcomes (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); }); } ``` Dicas para construir o oracle - Force o estado “positivo” a ser mais pesado: encadeie um redirect extra somente quando o predicado for verdadeiro, ou faça com que a URL de redirect reflita entrada de usuário sem limites para que ela cresça com o prefixo adivinhado. - Inflar cabeçalhos: repita cookie bombing até que um erro consistente seja observado no caminho “pesado”. Servidores comumente limitam o tamanho dos headers e vão falhar mais cedo quando muitos cookies estão presentes. - Estabilizar: dispare múltiplas operações paralelas de set de cookies e sonde repetidamente para fazer a média do ruído de timing e cache. Related XS-Search tricks - URL length based oracles (no cookies needed) can be combined or used instead when you can force a very long request target: {{#ref}} url-max-length-client-side.md {{#endref}} Defesas e endurecimento - Faça respostas de sucesso/falha indistinguíveis: - Evite redirects condicionais ou grandes diferenças no tamanho da resposta entre estados. Retorne o mesmo status, mesmo content type e comprimento de corpo similar independentemente do estado. - Bloqueie probes de subresource cross-site: - SameSite cookies: set sensitive cookies to SameSite=Lax or Strict so subresource requests like