request-smuggling

1 개의 포스트

Pingora OSS 배포 (새 탭에서 열림)

Cloudflare는 최근 오픈소스 프레임워크인 Pingora에서 발견된 여러 건의 HTTP/1.x 요청 스머글링(Request Smuggling) 취약점을 해결하기 위해 0.8.0 버전을 출시했습니다. 이번 취약점(CVE-2026-2833, 2835, 2836)은 Pingora를 단독 수신 프록시(Ingress Proxy)로 사용할 경우 보안 제어 우회, 세션 하이재킹, 캐시 오염 등을 유발할 수 있는 위험을 내포하고 있습니다. Cloudflare의 자체 CDN 서비스는 내부 아키텍처 구조상 영향을 받지 않았으나, Pingora 프레임워크를 활용하는 외부 사용자들에게는 즉각적인 업데이트가 권고됩니다. ### 101 응답 전 조기 업그레이드 처리 문제 * Pingora는 `Upgrade` 헤더를 포함한 요청을 받을 때, 백엔드로부터 `101 Switching Protocols` 응답을 확인하기 전에도 후속 바이트를 스트림으로 직접 전달하는 결함이 있었습니다. * 공격자는 업그레이드 요청 바로 뒤에 두 번째 HTTP 요청을 붙여서 보냄으로써, Pingora의 보안 필터나 WAF를 통과하지 않은 채 백엔드 서버에 직접 명령을 전달할 수 있었습니다. * 백엔드가 업그레이드를 거부하고 `200 OK`를 반환하더라도 Pingora는 이미 연결을 패스스루 모드로 전환했기 때문에, 프록시와 백엔드 간의 상태 불일치(Desync)가 발생하여 후속 사용자의 요청 데이터가 오염될 위험이 확인되었습니다. * 패치 이후 Pingora는 백엔드로부터 공식적인 101 응답을 받은 경우에만 데이터 해석 방식을 전환하도록 수정되었습니다. ### HTTP/1.0 및 Transfer-Encoding 해석의 불일치 * Pingora의 기존 로직은 `Transfer-Encoding` 헤더 인식 방식이 단순하여, 여러 인코딩이 나열되거나 표준을 벗어난 요청에서 본문 길이를 잘못 판단하는 경우가 있었습니다. * 특정 공격 시나리오에서 Pingora는 `Content-Length`를 기준으로 요청 본문의 끝을 인식했지만, 백엔드 서버(Node.js 등)는 `Transfer-Encoding: chunked`를 우선시하여 요청을 다르게 해석하는 CL.TE 방식의 스머글링이 가능했습니다. * 특히 HTTP/1.0 요청에서 `Transfer-Encoding`을 사용하는 비표준적인 상황에 대해 Pingora가 지나치게 관대하게 처리했던 점이 보안 약점으로 작용했습니다. * 0.8.0 버전에서는 RFC 표준에 따라 마지막 인코딩이 chunked인 경우를 정확히 식별하도록 강화되었으며, 유효하지 않은 인코딩 조합에 대한 검증 로직이 추가되었습니다. **권고 사항** Pingora를 사용하여 수신 프록시나 로드 밸런서를 구축한 운영자는 이러한 취약점으로부터 시스템을 보호하기 위해 즉시 **Pingora 0.8.0** 버전으로 업그레이드해야 합니다. Cloudflare 내부 시스템은 구조적으로 해당 공격 경로가 차단되어 있어 별도의 조치가 필요하지 않으나, 독립적인 배포 환경에서는 보안 사고의 원인이 될 수 있으므로 주의가 필요합니다.