# CVE-2026-23941: Request smuggling via first-wins Content-Length parsing in inets httpd

Status: published. Published: 2026-03-13. Updated: 2026-11-11.

Inconsistent Interpretation of HTTP Requests ('HTTP Request Smuggling') vulnerability in Erlang OTP (inets httpd module) allows HTTP Request Smuggling.

This vulnerability is associated with program files lib/inets/src/http_server/httpd_request.erl and program routines httpd_request:parse_headers/7.

The server does not reject or normalize duplicate Content-Length headers. The earliest Content-Length in the request is used for body parsing while common reverse proxies (nginx, Apache httpd, Envoy) honor the last Content-Length value. This violates RFC 9112 Section 6.3 and allows front-end/back-end desynchronization, leaving attacker-controlled bytes queued as the start of the next request.

This issue affects OTP from OTP 17.0 before OTP 26.2.5.18, OTP 27.3.4.9, and OTP 28.4.1, corresponding to inets from 5.10 before 9.1.0.5, 9.3.2.3, and 9.6.1. Whether OTP before OTP 17.0, corresponding to inets before 5.10, is affected is unknown.

## Remediation

- workaround: * Configure frontend proxy to reject requests with duplicate Content-Length headers.
* Disable HTTP keep-alive on httpd by adding {keep_alive, false} to httpd configuration. Note: This impacts performance for clients making multiple requests.
* Deploy a Web Application Firewall (WAF) configured to reject requests with multiple Content-Length headers. (source: CNA: EEF)
- fix: The reporting source identifies this reference as a patch. Check the advisory for affected versions and supported release branches. (source: CNA: EEF) — https://github.com/erlang/otp/commit/e775a332f623851385ab6ddb866d9b150612ddf6
- fix: The reporting source identifies this reference as a patch. Check the advisory for affected versions and supported release branches. (source: CNA: EEF) — https://github.com/erlang/otp/commit/a761d391d8d08316cbd7d4a86733ba932b73c45b
- fix: The reporting source identifies this reference as a patch. Check the advisory for affected versions and supported release branches. (source: CNA: EEF) — https://github.com/erlang/otp/commit/a4b46336fd25aa100ac602eb9a627aaead7eda18

## Affected products and versions

- Erlang / OTP (otp): ≥ 17.0; < * (affected, otp); unaffected at 26.2.5.18; unaffected at 27.3.4.9; unaffected at 28.4.1. Source: CNA: EEF
- Erlang / OTP (inets): ≥ 5.10; < * (affected, otp); unaffected at 9.1.0.5; unaffected at 9.3.2.3; unaffected at 9.6.1. Source: CNA: EEF
- Erlang / OTP (erlang/otp): ≥ 84adefa331c4159d432d22840663c38f155cd4c1; < * (affected, git); unaffected at e775a332f623851385ab6ddb866d9b150612ddf6; unaffected at a761d391d8d08316cbd7d4a86733ba932b73c45b; unaffected at a4b46336fd25aa100ac602eb9a627aaead7eda18; ≥ e775a332f623851385ab6ddb866d9b150612ddf6; < * (unaffected, git); ≥ a761d391d8d08316cbd7d4a86733ba932b73c45b; < * (unaffected, git); ≥ a4b46336fd25aa100ac602eb9a627aaead7eda18; < * (unaffected, git). Source: CNA: EEF

## Severity and prioritization

- CVSS 4.0: 7 (high); CVSS:4.0/AV:N/AC:H/AT:P/PR:N/UI:N/VC:N/VI:N/VA:N/SC:H/SI:H/SA:L; source: CNA: EEF

- CISA KEV: No listing in collected sources

- EPSS: 0.51% as of 2026-11-10; percentile 44.14%

- SSVC: exploitation none; automatable no; technical impact partial; source ADP: CISA-ADP

- Weaknesses: CWE-444

## Exploit evidence

No exploit evidence in collected sources. This is not proof of no exploitation.

## References

- https://github.com/erlang/otp/security/advisories/GHSA-w4jc-9wpv-pqh7 (CNA: EEF; vendor-advisory, related)

- https://cna.erlef.org/cves/CVE-2026-23941.html (CNA: EEF; related)

- https://osv.dev/vulnerability/EEF-CVE-2026-23941 (CNA: EEF; related)

- https://www.erlang.org/doc/system/versions.html#order-of-versions (CNA: EEF; x_version-scheme)

- https://github.com/erlang/otp/commit/e775a332f623851385ab6ddb866d9b150612ddf6 (CNA: EEF; patch)

- https://github.com/erlang/otp/commit/a761d391d8d08316cbd7d4a86733ba932b73c45b (CNA: EEF; patch)

- https://github.com/erlang/otp/commit/a4b46336fd25aa100ac602eb9a627aaead7eda18 (CNA: EEF; patch)

## Provenance

- CNA: EEF: https://www.cve.org/CVERecord?id=CVE-2026-23941; retrieved 2026-11-11; source updated 2026-11-11

- FIRST EPSS: https://api.first.org/data/v1/epss?cve=CVE-2026-23941; retrieved 2026-11-11; source updated Not reported

Revision: 21f95cd0510bad9c27651fe6ade8da64ca8b7baa99896e542d0f9584de55eeab

Canonical: https://y2.dev/cve/CVE-2026-23941

## Agent and API access

Public CVE pages, Markdown, and JSON are free to read without an account or API key.

- Public catalog: https://y2.dev/cve/index.json. Follow nextCursor with the same search, filters, sort, and limit (1–100). A null cursor marks the end.

- WebMCP: search_cve_disclosures, get_cve_disclosure, get_cve_page_markdown, get_y2_cve_access. Available in compatible browsers.

- Cyber API: https://api.y2.dev/api/v2/cyber/cves and https://api.y2.dev/api/v2/cyber/cves/{cveId}.

- Y2 Pro or Elite: create a workspace API key with the intel:cyber scope and send Authorization: Bearer <Y2_API_KEY>. Setup: https://y2.dev/docs/api/create-key.

- x402: Pay per request without an account or API key. Omit Authorization, read the HTTP 402 PAYMENT-REQUIRED challenge, validate its current requirements, and retry with PAYMENT-SIGNATURE through an authorized payment client. These browser tools never make payments. Guide: https://y2.dev/docs/api/x402.

- OpenAPI: https://y2.dev/api/openapi.yaml. Agent access metadata: https://y2.dev/cve/agent.json.

Collected public records only. Check source status for coverage and freshness.