
Build und Start:
docker compose build
docker compose run --rm --entrypoint 'npm install' node
docker compose run --rm --entrypoint 'npm run build' node
docker compose up
POC (von https://github.com/msanft/CVE-2025-55182):
node poc.js
Experimentieren mit unbundled:
yarn --immutable
node --conditions react-server app.js
Klone facebook/react und erstelle unbundled:
yarn --immutable
yarn cross-env RELEASE_CHANNEL=experimental node ./scripts/rollup/build.js react-server-dom-webpack/ --type=NODE_DEV
cp ./build/node_modules/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.unbundled.development.js \
codeql/${version}/
CodeQL vorbereiten:
codeql database create db -l javascript -s codeql
cd queries && codeql pack install
codeql query run ./queries/PrototypeTraversal.ql -d db
Promise.resolve(userData) zu finden
await non-native-promise zu finden
await-Aufrufe von Funktionen finden, die kein natives Promise zurückgebenawait auf eine Methode anwenden, die (manchmal) Rohdaten zurückgibtEs hat die gepatchte Verwendung in getOutlinedModel (hinzugefügt hasOwnProperty.call) und die entfernte in createModelResolver (jetzt fulfillReference) erkannt.
Ich weiß nicht, warum die erste und die zweite auf dieselbe Stelle zeigen, die extrahierte in vuln.js jedoch nicht.
In codeql/tests.js gibt es diese drei Varianten:
var value = {};
for (let i = 0; i < path.length; i++) {
value = value[path[i]] // VarAccess
}
var value = {};
for (let i = 0; i < path.length; i++) {
let c = value[path[i]] // VarDecl
value = c
}
var value = {};
for (let i = 0; i < path.length; i++) {
let c
c = value[path[i]] // use VarRef
value = c
}
| filename | source | sink |
|---|
| ./19.2.0/react-server-dom-webpack-server.node.unbundled.development.js | parentObject[reference[key]] | parentObject[reference[key]] | Unsichere Prototyp-Traversierung: Variable 'parentObject' wird innerhalb einer Schleife mit ihrer eigenen Eigenschaft aktualisiert. |
| ./19.2.0/react-server-dom-webpack-server.node.unbundled.development.js | parentObject[reference[key]] | parentObject[reference[key]] | Unsichere Prototyp-Traversierung: Variable 'parentObject' wird innerhalb einer Schleife mit ihrer eigenen Eigenschaft aktualisiert. |
| ./19.2.0/react-server-dom-webpack-server.node.unbundled.development.js | value[path[i]] | value[path[i]] | Unsichere Prototyp-Traversierung: Variable 'value' wird innerhalb einer Schleife mit ihrer eigenen Eigenschaft aktualisiert. |
| ./tests.js | value[path[i]] | c | Unsichere Prototyp-Traversierung: Variable 'value' wird innerhalb einer Schleife mit ihrer eigenen Eigenschaft aktualisiert. |
| ./tests.js | value[path[i]] | c | Unsichere Prototyp-Traversierung: Variable 'value' wird innerhalb einer Schleife mit ihrer eigenen Eigenschaft aktualisiert. |
| ./tests.js | value[path[i]] | value[path[i]] | Unsichere Prototyp-Traversierung: Variable 'value' wird innerhalb einer Schleife mit ihrer eigenen Eigenschaft aktualisiert. |
| ./vuln.js | parentObject[reference[key]] | parentObject[reference[key]] | Unsichere Prototyp-Traversierung: Variable 'parentObject' wird innerhalb einer Schleife mit ihrer eigenen Eigenschaft aktualisiert. |
| ./vuln.js | value[path[i]] | value[path[i]] | Unsichere Prototyp-Traversierung: Variable 'value' wird innerhalb einer Schleife mit ihrer eigenen Eigenschaft aktualisiert. |