الملخص
### Summary When a validation was aborted because the document contained more errors than allowed by `max_errors` (100 by default), `validate()` raised a single module-level `ValidationAbortedError` instance. Python appends the frames of every `raise` to the existing `__traceback__` of an exception that is raised again, so every aborted validation extended the traceback of this shared error. That traceback kept the frames, and with them the document, the validation context and all errors of every aborted validation, alive for the lifetime of the process. ### Details Any client can trigger an aborted validation by sending a small document with more than 100 validation errors, e.g. 101 unknown fields. No authentication is required, and since validation runs before execution, depth limiters and complexity analyzers do not prevent it. Each such request permanently retained about 124 KiB on CPython 3.12, without an upper limit, so memory grew with every request until the process was restarted or killed. GraphQL.js uses a shared error object at the same place, but JavaScript errors capture their stack trace only once when they are created, so it is not affected. GraphQL-core 3.2 creates a new error for each aborted validation and is not affected either. ### Proof of concept ```python import gc import tracemalloc from graphql import build_schema, parse, validate schema = build_schema("type Query { a: Int }") document = parse("{ " + " ".join(f"f{i}" for i in range(101)) + " }") tracemalloc.start() validate(schema, document) gc.collect() base = tracemalloc.get_traced_memory()[0] for _ in range(200): validate(schema, document) gc.collect() print((tracemalloc.get_traced_memory()[0] - base) // 1024, "KiB") ``` With GraphQL-core 3.3.0 on CPython 3.12, the retained memory grows from 147 KiB after one call to about 25 MB after 200 calls. With the fix, it stays constant at about 180 KiB. ### Impact Denial of service through memory exhaustion. A few thousand small requests are enou…
المعالجة
المراجع
- تحذيرhttps://github.com/advisories/GHSA-mpqx-q82w-9x46
- مرجعhttps://github.com/graphql-python/graphql-core/security/advisories/GHSA-mpqx-q82w-9x46
- مرجعhttps://nvd.nist.gov/vuln/detail/CVE-2026-119286
- مرجعhttps://github.com/graphql-python/graphql-core/issues/287
- مرجعhttps://github.com/graphql-python/graphql-core/pull/288
- مرجعhttps://github.com/graphql-python/graphql-core/commit/3c319fd9f4b8f6c9db4189520561bf8dd0e70be9
- مرجعhttps://github.com/graphql-python/graphql-core/releases/tag/v3.3.1