
Loading

Loading
We use strictly necessary cookies to run this site, and analytics cookies to understand how it's used. See our Privacy Policy for details.
A GitHub-reviewed security advisory, not necessarily under active exploitation the way our CISA KEV advisories are, but a real, disclosed vulnerability in an open-source dependency.
Affected packages
Vulnerable: < 0.8.1
Patched in 0.8.1
Details
fastapi-code-generator (koxudaxi) emits an operation's extra responses into the route decorator's responses={...} dict, using each response's status-code key as a single-quoted string literal without escaping the '. A ' in a status-code key closes the dict-key string and, via concatenation, injects a live expression that the decorator argument evaluates when main.py is imported (the ASGI server imports it at startup) -- code execution, no request. The status-code key is a pure data field. Verified on fastapi-code-generator 0.8.0 / Python 3 / FastAPI.
@app.get(
'/u', response_model=None,
responses={
'404' + (__import__("os").system('…') or "") + 'x': {'model': Thing}
},
)
def get_thing() -> None:
pass
The responses={...} dict is emitted only when the operation has a second (non-primary) response, so the malicious key is any additional response status. The generator post-processes with black/isort, so a syntax-breaking payload aborts generation (DoS); a valid-Python concat ('+expr+', kept valid with (... or "")) is written and runs at import. The response content-type key is NOT a sink (normalized to 'model'). info.* are repr-escaped; operationId -> function_name fails closed (DoS-resistant).
Not a duplicate: same product as the path -> @app.get('…') and summary -> handler-docstring findings, but a different field (response status-code key) and position (the responses={...} decorator dict key). Distinct from OpenAPI Generator's python-fastapi. Models come from datamodel-code-generator (repr-escaped).
reproduce.sh (+ make_spec.py) attached: generates the app and merely imports main.py; the injected expression runs at decorator evaluation and writes a marker. Verified on 0.8.0.
Code execution at import/startup in any application/CI that generates a FastAPI app with
fastapi-code-generator from an attacker-controlled or attacker-influenced spec (multi-response operation)
and imports/serves it. Estimated Critical, e.g. CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N.
Escape each response status-code key for the Python string literal (escape ', , newlines via repr) before emitting the responses={...} dict, and validate that status-code keys are numeric / a known pattern. maintainer-report.txt make_spec.py reproduce.sh
EPSS, exploit probability
Low0.31%
estimated chance of real-world exploitation in the next 30 days, higher than 24.3% of every CVE FIRST.org scores
Refreshed 11/9/2026, via FIRST.org's EPSS model, not CVSS, this measures likelihood of exploitation, not how severe it would be.
Talk to us about this
Find out whether this dependency (or others like it) is actually reachable in your codebase.
Get help patching, or building dependency-scanning into your pipeline going forward.
A secure code review or supply chain review finds this before an advisory does.