
CVE-2025-22870에 대한 개념 증명(PoC)으로, golang.org/x/net/http/httpproxy의 취약한 버전(<0.36.0)에서 HTTP 프록시 우회를 시연합니다. 잘못된 IPv6 zone ID 구문 분석을 악용하여 NO_PROXY 제한을 우회함으로써, 잘못 구성된 환경에서 프록시 우회 및 잠재적 SSRF를 가능하게 합니다.
이 PoC(Proof of Concept)는 golang.org/x/net/http/httpproxy 패키지(v0.36.0 이전 버전)에 존재하는 CVE-2025-22870 취약점의 악용을 시연합니다. 이 취약점은 IPv6 Zone ID가 NO_PROXY 패턴과 매칭되는 방식을 악용하여 HTTP 프록시 제한을 우회하는 데 사용될 수 있습니다.
golang.org/x/net/http/httpproxyNO_PROXY 환경 변수가 특정 도메인이 프록시를 통해 라우팅되지 않도록 제한하도록 설정된 경우(예: NO_PROXY=*.example.com), IPv6 Zone ID를 가진 호스트(예: [::1%25.example.com])에 대한 특수하게 조작된 요청이 잘못 매칭되어 프록시를 거치지 않을 수 있습니다. 이로 인해 프록시 우회가 발생하며, 특정 조건에서는 **서버 측 요청 위조(SSRF, Server-Side Request Forgery)**가 가능해질 수 있습니다.
이 취약점은 NO_PROXY로 보호된다고 여겨졌던 도메인이라도 구성된 프록시를 우회하면서 내부 또는 로컬 서비스에 직접 요청을 보내는 데 악용될 수 있습니다.
이 PoC는 golang.org/x/net/http/httpproxy 패키지의 취약점, 특히 NO_PROXY 규칙과 매칭할 때 IPv6 Zone ID를 파싱하는 방식의 결함을 악용합니다.
사용되는 페이로드는 다음과 같습니다:
[::1%25.example.com]:https://raw.githubusercontent.com/joshuaprovoste/cve-2025-22870/HEAD/7777
취약한 패키지의 파싱 버그로 인해 이 주소는 NO_PROXY와 매칭됨에도 불구하고 프록시를 우회합니다.