Client Side Prototype Pollution
Descobrindo usando Ferramentas Automáticas
As ferramentas https://github.com/dwisiswant0/ppfuzz, https://github.com/kleiton0x00/ppmap e https://github.com/kosmosec/proto-find podem ser usadas para encontrar vulnerabilidades de poluição de protótipo.
Além disso, você também pode usar a extensão do navegador PPScan para escanear automaticamente as páginas que você acessa em busca de vulnerabilidades de poluição de protótipo.
Depurando onde uma propriedade é usada
Encontrando a causa raiz da Poluição de Protótipos
Uma vez que uma vulnerabilidade de poluição de protótipos tenha sido identificada por qualquer uma das ferramentas, e se o código não for muito complexo, você pode encontrar a vulnerabilidade pesquisando por palavras-chave como location.hash
, decodeURIComponent
ou location.search
nas Ferramentas de Desenvolvedor do Chrome. Esse método permite que você identifique a seção vulnerável do código JavaScript.
Para bases de código maiores e mais complexas, um método direto para descobrir o código vulnerável envolve os seguintes passos:
Use uma ferramenta para identificar uma vulnerabilidade e obter um payload projetado para definir uma propriedade no construtor. Um exemplo fornecido pelo ppmap pode se parecer com:
constructor[prototype][ppmap]=reserved
.Defina um ponto de interrupção na primeira linha de código JavaScript que será executada na página. Atualize a página com o payload, pausando a execução nesse ponto de interrupção.
Enquanto a execução do JavaScript estiver pausada, execute o seguinte script no console JS. Esse script sinalizará quando a propriedade 'ppmap' for criada, auxiliando na localização de sua origem:
Navegue de volta para a aba Sources e selecione "Resume script execution". O JavaScript continuará executando, e a propriedade 'ppmap' será poluída conforme o esperado. Utilizando o trecho fornecido facilita a identificação do local exato onde a propriedade 'ppmap' está sendo poluída. Ao examinar a Call Stack, diferentes pilhas onde a poluição ocorreu podem ser observadas.
Ao decidir qual pilha investigar, geralmente é útil direcionar as pilhas associadas aos arquivos de biblioteca JavaScript, pois a poluição de protótipos frequentemente ocorre dentro dessas bibliotecas. Identifique a pilha relevante examinando sua conexão com os arquivos de biblioteca (visíveis no lado direito, semelhante a uma imagem fornecida para orientação). Em cenários com várias pilhas, como aquelas nas linhas 4 e 6, a escolha lógica é a pilha na linha 4, pois representa a ocorrência inicial da poluição e, portanto, a causa raiz da vulnerabilidade. Clicar na pilha irá direcioná-lo para o código vulnerável.
Encontrando Gadgets de Script
O gadget é o código que será abusado uma vez que uma vulnerabilidade de PP seja descoberta.
Se a aplicação for simples, podemos procurar por palavras-chave como srcdoc/innerHTML/iframe/createElement
e revisar o código-fonte para verificar se leva à execução de JavaScript. Às vezes, as técnicas mencionadas podem não encontrar gadgets. Nesse caso, a revisão pura do código-fonte revela alguns bons gadgets como no exemplo abaixo.
Exemplo de Encontrar um gadget de PP no código da biblioteca Mithil
Confira este artigo: https://blog.huli.tw/2022/05/02/en/intigriti-revenge-challenge-author-writeup/
Recompilação de payloads para bibliotecas vulneráveis
Bypass de Sanitizadores HTML via PP
Esta pesquisa mostra gadgets de PP a serem usados para burlar as sanitizações fornecidas por algumas bibliotecas de sanitizadores HTML:
sanitize-html
dompurify
Closure
Referências
Last updated