
Эксплойт proof-of-concept для CVE-2026-11103, демонстрирующий обход ограничения частоты запросов GraphQL с помощью батчинга и псевдонимов полей; включает уязвимый сервер на Node.js и эксплойт-скрипт на Python.
// graphql_rate_limit_server.js - GraphQL with naive rate limiter
const express = require('express');
const { graphqlHTTP } = require('express-graphql');
const { buildSchema } = require('graphql');
const schema = buildSchema(`
type Query {
secret: String
}
`);
let requestCount = 0;
const rateLimit = (req, res, next) => {
requestCount++;
if (requestCount > 5) {
return res.status(429).send('Rate limit exceeded');
}
next();
};
const root = { secret: () => 'SuperSecretData' };
const app = express();
app.use(rateLimit);
app.use('/graphql', graphqlHTTP({ schema, rootValue: root, graphiql: true }));
app.listen(4000, () => console.log('GraphQL on :4000'));
GraphQL API применяет ограничение частоты запросов на основе количества HTTP-запросов, а не сложности или количества разрешаемых полей. Используя алиасы полей, злоумышленник может отправить несколько ресурсоёмких запросов в рамках одного HTTP-запроса, фактически обходя ограничение частоты запросов.
npm install express express-graphql graphql
node graphql_rate_limit_server.js
python exploit_graphql_alias_bypass.py