Vulnerabilities in pkg:pypi/granian
PACKAGECVE-2026-42545 is a MODERATE (CVSS 5.9) denial of service vulnerability (CWE-755: Improper Handling of Exceptional Conditions) affecting Granian libraries in the PyPI ecosystem. The issue involves granian vulnerable to dos via wsgi response header panic. Remediation is available by upgrading affected packages to version 2.7.4.
pkg:pypi/granian
Vulnerability advisories affecting package pkg:pypi/granian. Select an advisory below to view technical details or fixes.
| Advisory ID | CVE / NVD | Severity | Summary |
|---|---|---|---|
| GHSA-f5p7-9fr5-8jmj | CVE-2026-42545 | MODERATE | Granian vulnerable to DoS via WSGI response header panic |
| GHSA-vrg7-482j-p6f6 | CVE-2026-42544 | HIGH | Granian vulnerable to unauthenticated DoS via WebSocket subprotocol header panic |
CVE-2026-42545 at a Glance
Security Impact
CVSS: 5.9
The security impact metrics below are parsed directly from the CVSS v3.1 vector string (CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:H).
How to Fix CVE-2026-42545
To remediate this vulnerability, upgrade all affected Granian dependencies to a patched release. Both direct and transitive dependencies should be checked, as frameworks or security libraries may pull in vulnerable versions transitively.
pip install granian>=2.7.4
Run the following command in your project directory to verify that all resolved dependencies use the patched release:
pip show granian
How to Check if You Are Affected
To determine whether your Python environment is affected by CVE-2026-42545, inspect your installed packages using pip:
pip show granian
Analyze the terminal output to locate any version of Granian in your dependency tree. If any resolved version matches the vulnerable ranges listed in the table below (for example, versions earlier than 2.7.4), your application is affected.
Note: The pip show granian command checks currently installed packages in your active Python environment.
Technical Details
Vulnerability Mechanism & Technical Analysis
This vulnerability is classified under CWE-755: Improper Handling of Exceptional Conditions, where the product does not handle or incorrectly handles an exceptional condition. In Granian, software state validation or input boundaries are circumvented during processing. Review the official source advisory statement below for specific affected components, classes, and reproduction details.
Source Advisory Statement
CVE-2026-42545 Affected Granian Versions
1 component(s)| Product / Package | Ecosystem | Affected Versions | Fixed Version |
|---|---|---|---|
|
granian
|
PyPI |
≥ 0.2.0
< 2.7.4
|
2.7.4
|
References
Frequently Asked Questions
What is CVE-2026-42545?
Which Granian versions are affected?
What version fixes CVE-2026-42545?
Is granian affected?
What is the CVSS score of CVE-2026-42545?
What CWE is associated with CVE-2026-42545?
How can I check PyPI dependencies for CVE-2026-42545?
Machine-readable OSV JSON
OSV v1.5 Schema
{
"schema_version" : "1.4.0",
"id" : "GHSA-f5p7-9fr5-8jmj",
"modified" : "2026-05-13T16:41:31Z",
"published" : "2026-05-06T21:24:56Z",
"aliases" : [ "CVE-2026-42545" ],
"summary" : "Granian vulnerable to DoS via WSGI response header panic",
"details" : "### Summary\n\nGranian aborts a worker process if a WSGI application returns an invalid HTTP response header name or value. The WSGI response conversion path uses `.unwrap()` on both the header name and header value constructors, so malformed output from the application becomes a process abort instead of a handled error.\n\nThis issue requires a buggy or attacker-influenced WSGI application to emit invalid headers. It is not a parser bug in Granian's request path. The security impact is that application mistakes which should result in a `500` instead kill the worker process.\n\n### Details\n\nhttps://github.com/emmett-framework/granian/blob/bdd5b0fbbb2aca6f2f4c0d2700c244d190958035/src/wsgi/io.rs#L39-L42\n\nIf either conversion fails, `.unwrap()` panics. In release builds Granian uses `panic = \"abort\"`, so the panic terminates the worker.\n\n\n#### Preconditions\n\nThe attacker must be able to influence a header name or value produced by the WSGI application, or the application must otherwise generate invalid headers.\n\nExamples include:\n\n- a header name containing a space\n- a header value containing `\\r\\n`\n- a header value containing a null byte\n\nThese are realistic failure modes for applications that reflect user-controlled data into headers such as `Location`, `Content Disposition`, or custom response headers.\n\n### PoC\n\n#### Step 1\n\nstart Granian with the PoC WSGI app\n\n```python\n# app.py\ndef app(environ, start_response):\n path = environ.get(\"PATH_INFO\", \"/\")\n if path == \"/crash-name\":\n headers = [(\"X Bad Name\", \"value\")]\n elif path == \"/crash-value\":\n headers = [(\"Content-Type\", \"text/html\\r\\nX-Injected: evil\")]\n elif path == \"/crash-null\":\n headers = [(\"X-Custom\", \"value\\x00end\")]\n else:\n start_response(\"200 OK\", [(\"Content-Type\", \"text/plain\")])\n return [b\"OK - server alive\\n\"]\n\n start_response(\"200 OK\", headers)\n return [b\"This response kills the worker\\n\"]\n\n```\n\n```bash\ngranian --interface wsgi app:app --host 127.0.0.1 --port 8000\n```\n\n#### Step 2\n\ntrigger the crash (any one of these is sufficient)\n\n```bash\ncurl http://127.0.0.1:8000/crash-name\ncurl http://127.0.0.1:8000/crash-value\ncurl http://127.0.0.1:8000/crash-null\n```\n\n\nExpected result:\n\n- the worker aborts after any of the crash paths\n- subsequent requests fail until the worker is restarted\n\n\n### Impact\n\n- Worker process denial of service\n- A single bad response kills one worker\n- Application bugs become process crashes instead of request-scoped failures",
"severity" : [ {
"type" : "CVSS_V3",
"score" : "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:H"
} ],
"affected" : [ {
"package" : {
"ecosystem" : "PyPI",
"name" : "granian"
},
"ranges" : [ {
"type" : "ECOSYSTEM",
"events" : [ {
"introduced" : "0.2.0"
}, {
"fixed" : "2.7.4"
} ]
} ]
} ],
"references" : [ {
"type" : "WEB",
"url" : "https://github.com/emmett-framework/granian/security/advisories/GHSA-f5p7-9fr5-8jmj"
}, {
"type" : "ADVISORY",
"url" : "https://nvd.nist.gov/vuln/detail/CVE-2026-42545"
}, {
"type" : "PACKAGE",
"url" : "https://github.com/emmett-framework/granian"
} ],
"database_specific" : {
"cwe_ids" : [ "CWE-248", "CWE-755" ],
"severity" : "MODERATE",
"github_reviewed" : true,
"github_reviewed_at" : "2026-05-06T21:24:56Z",
"nvd_published_at" : "2026-05-12T22:16:34Z"
}
}