gun HTTP/1.1 client accepts unsolicited 101 Switching Protocols response allowing server-driven protocol hijack and OOM
Key facts
- Attack vector
- Network
- Privileges required
- None
- User interaction
- None
- Attack complexity
- Low
- Attack requirements
- None
- Impact type
- —
- Confidentiality · integrity · availability
- None · None · High
- Fix status
- Fixed
Attack profile from CVSS 4.0 · CNA. Fix status from CNA and GitHub.
Summary
Unexpected Status Code or Return Value vulnerability in ninenines gun (gun_http module) allows a malicious HTTP server to force the client into raw protocol mode via an unsolicited 101 Switching Protocols response. In gun_http:handle_inform/8, when a 101 Switching Protocols response is received over HTTP/1.1, the function verifies only that the Upgrade header is syntactically valid and that the stream reference is a plain reference(). It does not check whether the client ever sent an Upgrade or Connection: upgrade header on the corresponding request. Because this check is absent, any 101 response (solicited or not) causes gun to dispatch a gun_upgrade message to the caller and transition the entire connection to raw protocol mode. A malicious or compromised HTTP server can send an unsolicited 101 response to any HTTP/1.1 request, causing the gun client to abandon HTTP framing for that connection. Once in raw mode, gun_raw applies no flow control (flow=infinity) and re-arms socket active mode after every received packet, so the server can flood the client with arbitrary bytes. These are forwarded as unbounded gun_data messages to the owner process, exhausting its mailbox and BEAM memory, ultimately crashing the VM. This issue affects gun: from 2.0.0 before 2.4.0.
Why it matters now
SSVC decision points
CISA ADP · SSVC 2.0.3
- Exploitation
- None
- Automatable
- Yes
- Technical impact
- Partial
The decision (Track, Attend, Act) also depends on your mission and well-being impact; see CISA's SSVC guide.
Affected products
| Vendor | Product | Affected versions | Fixed in | Status | Source |
|---|---|---|---|---|---|
| ninenines | gun | 2.0.0 to before 2.4.0 | 2.4.0 | Patch available | CNA |
| — | gun (Hex) | 2.0.0 to before 2.4.0 | 2.4.0 | Patch available | GHSA-2j82-37xg-f9wp |
- gun Vendorninenines Affected 2.0.0 to before 2.4.0 Fixed in 2.4.0 Patch available CNA
- gun (Hex) Vendor— Affected 2.0.0 to before 2.4.0 Fixed in 2.4.0 Patch available GHSA-2j82-37xg-f9wp
Remediation
- Fix · CNA gun (ninenines) Fixed in 2.4.0
- Fix · GHSA-2j82-37xg-f9wp gun (Hex) Fixed in 2.4.0 Advisory →
Fixed in the same release
Records fixed by the same vendor advisory or release, as the CNA lists them.
- Release ·
ninenines gun 2.4.0
3 records Highest priority Priority MEDIUM 2 MEDIUM, 1 LOW
Other records, highest priority first
- TI-2026-32018 gun HTTP/1.1 response buffer has no size limit allowing server-controlled memory exhaustionPriority MEDIUM 44
- TI-2026-32017 gun HTTP/2 PUSH_PROMISE authority not validated against connection origin allows cross-origin cookie injectionPriority LOW 27
Vendor assessments
Timeline
- 2026-10-02 Threatist record created from CVE-2026-43974
- 2026-10-03 Alias added: GHSA-2j82-37xg-f9wp
- 2026-10-21 EPSS moved to the 50th–90th percentile
- 2026-10-25 EPSS moved to the below the 50th percentile
References
More ninenines Gun vulnerabilities
- TI-2026-32018 gun HTTP/1.1 response buffer has no size limit allowing server-controlled memory exhaustion CVSS 4.0HIGH 8.7
- TI-2026-32017 gun HTTP/2 PUSH_PROMISE authority not validated against connection origin allows cross-origin cookie injection CVSS 4.0MEDIUM 6.3
Sources
- CVE-2026-43974 · CVE Program
- CVE-2026-43974 · NVD
- FIRST EPSS
- GHSA-2j82-37xg-f9wp · GitHub Advisory Database · CC BY 4.0
- CVE-2026-43974 · Red Hat security data · CC BY 4.0
This product uses the NVD API but is not endorsed or certified by the NVD. Sources and licences