XSSI (Cross-Site Script Inclusion)
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Cross-Site Script Inclusion (XSSI) é uma vulnerabilidade que surge da natureza da tag script
em HTML. Ao contrário da maioria dos recursos, que estão sujeitos à Same-Origin Policy (SOP), scripts podem ser incluídos de diferentes domínios. Esse comportamento é destinado a facilitar o uso de bibliotecas e outros recursos hospedados em servidores diferentes, mas também introduz um risco potencial de segurança.
Bypass of SOP: Scripts estão isentos da Same-Origin Policy, permitindo que sejam incluídos entre domínios.
Data Exposure: Um atacante pode explorar esse comportamento para ler dados carregados via a tag script
.
Impact on Dynamic JavaScript/JSONP: XSSI é particularmente relevante para JavaScript dinâmico ou JSON with Padding (JSONP). Essas tecnologias frequentemente usam informações de "ambient-authority" (como cookies) para autenticação. Quando uma solicitação de script é feita para um host diferente, essas credenciais (por exemplo, cookies) são automaticamente incluídas na solicitação.
Authentication Token Leakage: Se um atacante conseguir enganar o navegador de um usuário para solicitar um script de um servidor que ele controla, pode ser capaz de acessar informações sensíveis contidas nessas solicitações.
Static JavaScript - Esta representa a forma convencional de XSSI.
Static JavaScript with Authentication - Este tipo é distinto porque requer autenticação para acesso.
Dynamic JavaScript - Envolve JavaScript que gera conteúdo dinamicamente.
Non-JavaScript - Refere-se a vulnerabilidades que não envolvem JavaScript diretamente.
The following information is a sumary of https://www.scip.ch/en/?labs.20160414. Check it for further details.
Nesta abordagem, informações privadas são incorporadas dentro de um arquivo JavaScript acessível globalmente. Os atacantes podem identificar esses arquivos usando métodos como leitura de arquivos, buscas por palavras-chave ou expressões regulares. Uma vez localizados, o script contendo informações privadas pode ser incluído em conteúdo malicioso, permitindo acesso não autorizado a dados sensíveis. Uma técnica de exploração de exemplo é mostrada abaixo:
Esses tipos de ataques XSSI envolvem informações confidenciais sendo adicionadas dinamicamente ao script em resposta a uma solicitação do usuário. A detecção pode ser realizada enviando solicitações com e sem cookies e comparando as respostas. Se as informações diferirem, isso pode indicar a presença de informações confidenciais. Esse processo pode ser automatizado usando ferramentas como a extensão Burp DetectDynamicJS.
Se dados confidenciais forem armazenados em uma variável global, eles podem ser explorados usando métodos semelhantes aos utilizados no XSSI Regular. No entanto, se os dados confidenciais estiverem incluídos em uma resposta JSONP, os atacantes podem sequestrar a função de callback para recuperar as informações. Isso pode ser feito manipulando objetos globais ou configurando uma função para ser executada pela resposta JSONP, conforme demonstrado abaixo:
Para variáveis que não residem no namespace global, prototype tampering pode às vezes ser explorado. Esta técnica aproveita o design do JavaScript, onde a interpretação do código envolve percorrer a cadeia de protótipos para localizar a propriedade chamada. Ao sobrescrever certas funções, como o slice
de Array
, os atacantes podem acessar e vazar variáveis não globais:
Mais detalhes sobre vetores de ataque podem ser encontrados no trabalho do Pesquisador de Segurança Sebastian Lekies, que mantém uma lista de vetores.
A pesquisa de Takeshi Terada introduz outra forma de XSSI, onde arquivos Non-Script, como CSV, são vazados cross-origin ao serem incluídos como fontes em uma tag script
. Instâncias históricas de XSSI, como o ataque de Jeremiah Grossman em 2006 para ler uma lista de contatos completa do Google e o vazamento de dados JSON de Joe Walker em 2007, destacam a gravidade dessas ameaças. Além disso, Gareth Heyes descreve uma variante de ataque envolvendo JSON codificado em UTF-7 para escapar do formato JSON e executar scripts, eficaz em certos navegadores:
Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)