
Proof-of-Concept-Exploit für CVE-2026-22014, der die Manipulation von Persisted-Query-IDs in GraphQL-APIs demonstriert, um Allowlists zu umgehen und beliebige Abfragen auszuführen.
// graphql_persisted.js - Accepts persisted query IDs
const express = require('express');
const { graphqlHTTP } = require('express-graphql');
const queries = {
"abc": "query { user { name } }"
};
app.post('/graphql', graphqlHTTP({
schema: schema,
customExecuteFn: (args) => {
const doc = parse(queries[args.queryId] || args.query);
return execute(args);
}
}));
Ein GraphQL-Server unterstützt persistierte Abfragen, fällt jedoch auf den bereitgestellten Parameter query zurück, wenn die queryId unbekannt ist. Ein Angreifer kann eine nicht existierende queryId zusammen mit einer beliebigen GraphQL-Abfrage übermitteln und dadurch die vorgesehene Zulassungsliste persistierter Abfragen umgehen.
query, wenn die queryId nicht gefunden wird, anstatt die Anfrage abzulehnen.Starten Sie den Server und senden Sie eine gemischte Payload:
python exploit_persisted_query.py
Der Server führt die schädliche Abfrage aus.