这是 CVE-2023-32681 的 Python 3 实现,影响使用 requests 版本 <= 2.30.0 的客户端。
根据 https://www.rfc-editor.org/rfc/rfc9110.html#section-15.4,每当服务器发出 3xx 重定向时,用户代理应修改请求,删除请求中的某些头部和字段。
这些字段的详细信息可参见 https://www.rfc-editor.org/rfc/rfc9110.html#section-15.4-5。针对该 CVE,我在此高亮显示了相关部分。

requests 版本 <= 2.30.0 在处理到 "https" 的重定向时没有移除 "Proxy-Authorization" 头部,从而导致代理凭证泄露给了重定向目标服务器。
更多详细信息可参见:
/redirect,将流量重定向到运行在 4431 的第二个服务器。/echoHeaders。该路由将收到的请求头部返回给客户端。Proxy-Authorization 头部,则说明 requests 版本存在 "CVE-2023-32681" 漏洞。server/main.go 中的 certFile 和 keyFile 变量。go run server/main.go 启动 HTTP(S) 服务器。这将启动两个服务器,分别监听端口 443 和 4431。go run proxy/main.go 启动代理服务器。这将启动监听端口 8080 的代理服务器。pip3 install -r script/requirements_request_2_30_0.txtpython3 script/poc.py,并观察输出。您会看到服务器在响应中返回了 "Proxy-Authorization" 头部。
服务器也会在日志中打印收到的头部。pip3 install -r script/requirements_request_2_31_0.txtpython3 script/poc.py,并观察输出。您会看到 "Proxy-Authorization" 头部现已不再出现在服务器响应中。
同样可以在服务器日志中验证。
