
Proof-of-Concept für CVE-2026-21717, eine Schwachstelle in der Node.js-V8-String-Hashing-Kollision, die einen Denial-of-Service über manipulierte JSON-Payloads verursacht.
Node.js V8 String-Hashing-Schwachstelle mit vorhersehbaren Kollisionen, die zu Denial of Service führt
Eine kritische Schwachstelle im String-Hashing-Mechanismus von V8 ermöglicht es Angreifern, eine schwerwiegende Leistungsbeeinträchtigung in Node.js-Anwendungen zu verursachen. Integer-ähnliche Strings werden auf ihren numerischen Wert gehasht, wodurch Hash-Kollisionen trivial vorhersehbar werden. Durch das Erstellen bösartiger Eingaben, die viele Kollisionen in der internen String-Tabelle von V8 verursachen, kann ein Angreifer die Leistung erheblich beeinträchtigen oder einen Denial of Service verursachen.
Die Schwachstelle beruht auf dem String-Internierungsprozess von V8. Wenn JSON-Parsing erfolgt, werden kurze Strings automatisch in eine Hash-Tabelle interniert. Integer-ähnliche Strings kollidieren vorhersehbar, da sie auf ihre numerischen Werte gehasht werden, sodass Angreifer quadratische Sondierungsketten erzwingen können, die die Leistung erheblich beeinträchtigen.
Der häufigste Auslöser ist jeder Endpunkt, der JSON.parse() auf angreiferkontrollierte Eingaben aufruft, da das JSON-Parsing kurze Strings automatisch in die betroffene Hash-Tabelle interniert.
Dieses Repository enthält einen Proof-of-Concept, der die Schwachstelle demonstriert:
# Verwenden Sie eine Node.js-Version, die von CVE-2026-21717 betroffen ist
nvm use
npm install
node poc.js
Der PoC erstellt eine Nutzlast mit:
JSON.parse()-OperationJSON.parse() für die nicht vertrauenswürdige Eingabe auf// Nutzlastgröße begrenzen
app.use(express.json({ limit: '100kb' }));
// Timeout für das Parsing hinzufügen
const parseWithTimeout = (str, timeout = 1000) => {
return Promise.race([
Promise.resolve(JSON.parse(str)),
new Promise((_, reject) =>
setTimeout(() => reject(new Error('Parse timeout')), timeout)
)
]);
};
Dieses Repository dient ausschließlich Bildungs- und Forschungszwecken. Verwenden Sie diesen Code nicht für böswillige Zwecke oder gegen Systeme, die Sie nicht besitzen oder für die Sie keine ausdrückliche Berechtigung zum Testen haben.