Skip to content

CRLF injection in httplib2

Low severity GitHub Reviewed Published May 20, 2020 in httplib2/httplib2 • Updated Jan 9, 2023

Package

pip httplib2 (pip)

Affected versions

< 0.18.0

Patched versions

0.18.0

Description

Impact

Attacker controlling unescaped part of uri for httplib2.Http.request() could change request headers and body, send additional hidden requests to same server.

Impacts software that uses httplib2 with uri constructed by string concatenation, as opposed to proper urllib building with escaping.

Patches

Problem has been fixed in 0.18.0
Space, CR, LF characters are now quoted before any use.
This solution should not impact any valid usage of httplib2 library, that is uri constructed by urllib.

Workarounds

Create URI with urllib.parse family functions: urlencode, urlunsplit.

user_input = " HTTP/1.1\r\ninjected: attack\r\nignore-http:"
-uri = "https://api.server/?q={}".format(user_input)
+uri = urllib.parse.urlunsplit(("https", "api.server", "/v1", urllib.parse.urlencode({"q": user_input}), ""))
http.request(uri)

References

https://cwe.mitre.org/data/definitions/93.html
https://docs.python.org/3/library/urllib.parse.html

Thanks to Recar https://github.com/Ciyfly for finding vulnerability and discrete notification.

For more information

If you have any questions or comments about this advisory:

References

@temoto temoto published to httplib2/httplib2 May 20, 2020
Reviewed May 20, 2020
Published to the GitHub Advisory Database May 20, 2020
Last updated Jan 9, 2023

Severity

Low

Weaknesses

CVE ID

CVE-2020-11078

GHSA ID

GHSA-gg84-qgv9-w4pq

Source code

No known source code

Credits

Loading Checking history
See something to contribute? Suggest improvements for this vulnerability.