CVE-2019-16785: HTTP Request Smuggling: LF vs CRLF handling in Waitress
(updated )
Waitress implemented a "MAY" part of the RFC7230 (https://tools.ietf.org/html/rfc7230#section-3.5) which states:
Although the line terminator for the start-line and header fields is the sequence CRLF, a recipient MAY recognize a single LF as a line terminator and ignore any preceding CR.
Unfortunately if a front-end server does not parse header fields with an LF the same way as it does those with a CRLF it can lead to the front-end and the back-end server parsing the same HTTP message in two different ways. This can lead to a potential for HTTP request smuggling/splitting whereby Waitress may see two requests while the front-end server only sees a single HTTP message.
Example:
Content-Length: 100[CRLF]
X-Header: x[LF]Content-Length: 0[CRLF]
Would get treated by Waitress as if it were:
Content-Length: 100
X-Header: x
Content-Length: 0
This could potentially get used by attackers to split the HTTP request and smuggle a second request in the body of the first.
References
- access.redhat.com/errata/RHSA-2020:0720
- docs.pylonsproject.org/projects/waitress/en/latest/
- github.com/Pylons/waitress
- github.com/Pylons/waitress/commit/8eba394ad75deaf9e5cd15b78a3d16b12e6b0eba
- github.com/Pylons/waitress/security/advisories/GHSA-pg36-wpm5-g57p
- github.com/advisories/GHSA-pg36-wpm5-g57p
- github.com/pypa/advisory-database/tree/main/vulns/waitress/PYSEC-2019-136.yaml
- lists.debian.org/debian-lts-announce/2022/05/msg00011.html
- lists.fedoraproject.org/archives/list/package-announce@lists.fedoraproject.org/message/GVDHR2DNKCNQ7YQXISJ45NT4IQDX3LJ7
- lists.fedoraproject.org/archives/list/package-announce@lists.fedoraproject.org/message/LYEOTGWJZVKPRXX2HBNVIYWCX73QYPM5
- nvd.nist.gov/vuln/detail/CVE-2019-16785
- www.oracle.com/security-alerts/cpuapr2022.html
Code Behaviors & Features
Detect and mitigate CVE-2019-16785 with GitLab Dependency Scanning
Secure your software supply chain by verifying that all open source dependencies used in your projects contain no disclosed vulnerabilities. Dependency Scanning using SBOM also detects vulnerabilities from proprietary advisories that this site does not include. Learn more about Dependency Scanning using SBOM →