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 내부 시스템은 구조적으로 해당 공격 경로가 차단되어 있어 별도의 조치가 필요하지 않으나, 독립적인 배포 환경에서는 보안 사고의 원인이 될 수 있으므로 주의가 필요합니다.