The two parsers resolved duplicates inconsistently and silently:
- Content.disposition() retained the last occurrence of each parameter.
- Content.type() retained the first occurrence of charset and boundary.
Either behavior creates a parameter-smuggling primitive when another component in the request-processing chain (a WAF, reverse proxy, security filter, or alternate parser) resolves duplicates the opposite way. The primary attack vector is upload filename allowlist bypass:
Content-Disposition: form-data; name="file"; filename="safe.txt"; filename="shell.php"
The issue has been patched in 6.0.2.
Pre or post validate headers looking for duplicates.
{
"github_reviewed": true,
"github_reviewed_at": "2026-05-27T00:37:20Z",
"nvd_published_at": null,
"severity": "HIGH",
"cwe_ids": [
"CWE-436"
]
}