
CVE-2023-32681에 대한 POC
이것은 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 경로를 정의합니다./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를 실행하여 POC 스크립트를 실행하고 출력을 관찰합니다. 서버가 응답에 "Proxy-Authorization" 헤더를 반환하는 것을 볼 수 있습니다. 서버는 또한 수신된 헤더를 로그에 출력합니다.pip3 install -r script/requirements_request_2_31_0.txt를 실행합니다.python3 script/poc.py를 실행하여 POC 스크립트를 실행하고 출력을 관찰합니다. 이제 서버 응답에 "Proxy-Authorization" 헤더가 없는 것을 볼 수 있습니다. 서버 로그에서도 동일하게 확인할 수 있습니다.



