
CVE-2026-11103에 대한 개념 증명 익스플로잇으로, 배칭(batching)과 필드 별칭(field aliases)을 통한 GraphQL 속도 제한(rate-limit) 우회를 시연합니다. 취약한 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 요청 수를 기준으로 rate limiting을 적용합니다. 필드 별칭을 사용하면 공격자는 단일 HTTP 요청 내에서 여러 개의 고비용 쿼리를 실행하여 rate limit을 사실상 우회할 수 있습니다.
npm install express express-graphql graphql
node graphql_rate_limit_server.js
python exploit_graphql_alias_bypass.py