
استغلال لإثبات المفهوم لثغرة CVE-2026-22014 يوضح التلاعب بمعرّف الاستعلام المحفوظ (persisted-query ID) في واجهات برمجة تطبيقات GraphQL لتجاوز القوائم البيضاء وتنفيذ استعلامات عشوائية.
// 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);
}
}));
يدعم خادم GraphQL الاستعلامات المحفوظة لكنه يتراجع إلى معامل query المُقدَّم إذا كان queryId غير معروف. يمكن للمهاجم إرسال queryId غير موجود إلى جانب استعلام GraphQL عشوائي، متجاوزًا القائمة البيضاء المقصودة للاستعلامات المحفوظة.
query المقدَّم من العميل عندما لا يتم العثور على queryId، بدلاً من رفض الطلب.شغّل الخادم وأرسل حمولة مختلطة:
python exploit_persisted_query.py
يقوم الخادم بتنفيذ الاستعلام الخبيث.