CVE-2026-49756 json
Multipart form-data header injection in Req via unescaped name/filename/content_type
published 2026-06-08 5 mo ago modified 2026-09-08 2 mo ago also EEF-CVE-2026-49756 , EUVD-2026-35096 , GHSA-px9f-whj3-246m
- cvss
- 3.7
- version 3.1, NVD
- cisa kev
- Not listed
- not in CISA's catalog
- epss
- 0.2%
- EPSS 0.2% chance of exploitation in 30 days, percentile 10%
- public exploits
- 0
- none known
Summary
Improper Neutralization of CRLF Sequences ('CRLF Injection') vulnerability in wojtekmach Req allows multipart parameter smuggling via attacker-influenced part metadata.
Req.Utils.encode_form_part/2 in lib/req/utils.ex builds the per-part headers by interpolating the caller-supplied name, filename, and content_type values directly into the content-disposition and content-type lines with no escaping or CRLF stripping. A value containing ", \r, or \n closes the surrounding quoted value and starts a new header line; an additional \r\n--<boundary> terminates the current part and prepends a smuggled part of the attacker's choosing.
This is reachable through every supported way of supplying a part. It is particularly easy when value is a %File.Stream{}, because filename then defaults to Path.basename(stream.path) and POSIX filenames may legitimately contain \r and \n. Any application that forwards user-controlled filenames (or field names / MIME types) through Req.post/2 with form_multipart: lets an attacker inject arbitrary headers into the outgoing multipart body or smuggle additional fields and parts into the request the victim service sends downstream.
This issue affects req: from 0.5.3 before 0.6.0.
Patch / fix
- hex req 0.6.0
- wojtekmach req 0.6.0
CISA SSVC
- Exploitation
- Proof of concept is public
- Automatable
- no
- Technical impact
- partial
- Assessed
- 5 mo ago
Exploit prediction
0.21% chance of exploitation in the next 30 days, higher than 10% of all scored CVEs (FIRST EPSS, 2026-11-08).
Exploits and checks
- github.com https://github.com/wojtekmach/req/security/advisories/GHSA-px9f-whj3-246m referenced PoC, tagged "exploit" by a source, unverified
CVSS scores
| assigned by | version | score | vector |
|---|---|---|---|
| CNA | 4.0 | 2.1 | CVSS:4.0/AV:L/AC:L/AT:P/PR:N/UI:N/VC:N/VI:L/VA:N/SC:L/SI:L/SA:N |
| CNA | 4.0 | 2.1 | CVSS:4.0/AV:L/AC:L/AT:P/PR:N/UI:N/VC:N/VI:L/VA:N/SC:L/SI:L/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X |
| NVD | 3.1 | 3.7 | CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:L/A:N |
Affected packages
| ecosystem | package | affected | fixed in |
|---|---|---|---|
| hex | req | >=0.5.3, <0.6.0 |
0.6.0 |
Affected products
- wojtekmach req
Classification
- Weakness
-
- CWE-93 Improper Neutralization of CRLF Sequences
References
-
github.com
/wojtekmach/req/commit/74506ff2c5addf74df85d79dc726e9b2e264a8ba
patch, web
-
github.com
/wojtekmach/req/security/advisories/GHSA-px9f-whj3-246m
vendor-advisory, related, exploit, web, advisory
-
cna.erlef.org
/cves/CVE-2026-49756.html
related, web, third-party-advisory, mitigation
-
osv.dev
/vulnerability/EEF-CVE-2026-49756
related, web, third-party-advisory
-
nvd.nist.gov
/vuln/detail/CVE-2026-49756
advisory
-
github.com
/wojtekmach/req
package
-
github.com
/wojtekmach/req/releases/tag/v0.6.0
web
-
hex.pm
/packages/req
package
Sources
- CVE List CVE-2026-49756
- GitHub Advisory GHSA-px9f-whj3-246m
- NVD CVE-2026-49756
- OSV EEF-CVE-2026-49756
Fencer Vulns keeps one entry per vulnerability: the CVE id wins, then GHSA, and records that alias each other are merged, except that two CVEs always keep separate entries. The same data is available as JSON.
CPEs and fixed versions use Anchore's correction of NVD's data: Added CPE configurations because not yet analyzed by NVD.