This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

classification
Title: wsgiref HTTP Response Header Injection: CRLF Injection
Type: security Stage: patch review
Components: Library (Lib) Versions: Python 3.9, Python 3.4, Python 3.5, Python 2.7
process
Status: open Resolution:
Dependencies: 11671 Superseder:
Assigned To: Nosy List: RAUSHAN RAJ, epicfaace, martin.panter
Priority: normal Keywords: patch

Created on 2016-11-23 08:51 by RAUSHAN RAJ, last changed 2022-04-11 14:58 by admin.

Pull Requests
URL Status Linked Edit
PR 15299 epicfaace, 2019-08-15 04:21
Messages (2)
msg281546 - (view) Author: RAUSHAN RAJ (RAUSHAN RAJ) Date: 2016-11-23 08:52
https://www.owasp.org/index.php/CRLF_Injection

Issue is in wsgiref.headers – WSGI response header tools 
This module provides a single class, Headers, for convenient manipulation of WSGI response headers using a mapping-like interface.
class wsgiref.headers.Headers(headers)

Example:
import wsgiref.headers as hd
h=hd.Headers([])
h.add_header(' Content-type'+chr(10)+'set-cook:5', 'text/plain')
h
Headers([(' Content-type\nset-cook:5', 'text/plain')])
str(h)
' Content-type\nset-cook:5: text/plain\r\n\r\n'

Response in Browser looks like this:

Inline image 1
An attacker could use this flaw to inject additional headers in a Python application that allowed user provided header names or values.

Also,
No whitespace is allowed between the header field-name and colon. In
the past, differences in the handling of such whitespace have led to
security vulnerabilities in request routing and response handling. A
server MUST reject any received request message that contains
whitespace between a header field-name and colon with a response code
of 400 (Bad Request). A proxy MUST remove any such whitespace from a
response message before forwarding the message downstream.

But add_header function allow whitespaces also.

Tested for python 2.7.9 and python 3.5.1

For reference , it is related to (In this case request header injection is possible)
https://bugs.python.org/issue22928
http://bugs.python.org/issue17322
msg306975 - (view) Author: Martin Panter (martin.panter) * (Python committer) Date: 2017-11-25 21:34
Issue 11671 is closely related and has a patch proposing to ban control characters including CRLF (but not spaces).

Also see Issue 22928 which added header field validation to the HTTP client module.
History
Date User Action Args
2022-04-11 14:58:39adminsetgithub: 72964
2019-08-15 04:21:51epicfaacesetkeywords: + patch
stage: patch review
pull_requests: + pull_request15024
2019-08-15 04:21:43epicfaacesetversions: + Python 2.7
2019-08-15 04:03:23epicfaacesetnosy: + epicfaace

versions: + Python 3.9, - Python 2.7
2018-07-09 00:31:18terry.reedysetversions: - Python 3.3
2017-11-25 21:34:11martin.pantersetnosy: + martin.panter
dependencies: + Security hole in wsgiref.headers.Headers
messages: + msg306975
2016-11-23 08:52:52RAUSHAN RAJsetmessages: + msg281546
2016-11-23 08:51:14RAUSHAN RAJcreate