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 automaticamente escanear 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 excessivamente complexo, você pode encontrar a vulnerabilidade procurando por palavras-chave como location.hash
, decodeURIComponent
ou location.search
nas Ferramentas de Desenvolvedor do Chrome. Essa abordagem permite que você localize a seção vulnerável do código JavaScript.
Para bases de código maiores e mais complexas, um método simples 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 ser:
constructor[prototype][ppmap]=reserved
.Defina um ponto de interrupção na primeira linha do código JavaScript que será executado na página. Atualize a página com o payload, pausando a execução neste ponto de interrupção.
Enquanto a execução do JavaScript estiver pausada, execute o seguinte script no console JS. Este script sinalizará quando a propriedade 'ppmap' for criada, ajudando a localizar 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 como esperado. Utilizar o trecho fornecido facilita a identificação do local exato onde a propriedade 'ppmap' é poluída. Ao examinar a Call Stack, diferentes pilhas onde a poluição ocorreu podem ser observadas.
Ao decidir qual pilha investigar, muitas vezes é útil direcionar-se a pilhas associadas a arquivos de bibliotecas JavaScript, pois a poluição de protótipos frequentemente ocorre dentro dessas bibliotecas. Identifique a pilha relevante examinando sua ligação a arquivos de biblioteca (visível no lado direito, semelhante à imagem fornecida como 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 o direcionará 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 e verificar se ele leva à execução de javascript. Às vezes, as técnicas mencionadas podem não encontrar gadgets de forma alguma. Nesse caso, a revisão pura do código-fonte revela alguns bons gadgets, como o exemplo abaixo.
Exemplo de Encontrando gadget de PP no código da biblioteca Mithil
Verifique este writeup: https://blog.huli.tw/2022/05/02/en/intigriti-revenge-challenge-author-writeup/
Recompilação de payloads para bibliotecas vulneráveis
Bypass de HTML Sanitizers via PP
Esta pesquisa mostra gadgets de PP para usar para burlar as sanitizações fornecidas por algumas bibliotecas de HTML sanitizers:
sanitize-html
dompurify
Closure
Referências
Last updated