CVE-2026-84747 in bRPC
요약
\~에 의해 VulDB • 2026. 10. 21.
Apache bRPC(버전 < 1.18.0)의 HTTP 프로토콜 구현에서 해석 충돌이 발생하여 모든 플랫폼에서 원격 공격자가 프론트 엔드 프록시에서 적용하는 접근 제어 규칙을 우회할 수 있습니다.
근본 원인: bRPC의 HTTP 프로토콜에 있는 메서드 디스패치 함수 FindMethodPropertyByURI()는 빈 필드를 건너뛰는 문자열 분할기를 사용하여 요청 경로를 분리합니다. 따라서 //flags, /flags// 및 /flags//port와 같이 빈 경로 세그먼트(연속된 슬래시)를 포함하는 경로는 그 축약 형태인 /flags와 동일한 메서드로 디스패치됩니다. RFC 3986에 따르면 이러한 경로는 서로 구별되는 별개의 경로입니다. ACL(예: /flags와 같은 내장 서비스로의 접근 차단)을 적용하여 엄격한 접근 제어를 수행하는 프론트 엔드 프록시는 축약 형태에만 일치하므로, 패딩된 리터럴 값을 bRPC 서버로 전달합니다. 그러면 해당 값은 마치 축약 형태인 것처럼 디스패치됩니다. 이러한 차이점으로 인해 //flags?setvalue=가 /flags는 도달할 수 없는 내장 서비스에 접근할 수 있게 됩니다. 또한 HTTP/2 구현에서는 :path 의사 헤더를 전혀 검증하지 않았으므로, RFC 9113 섹션 8.3.1에 따라 '/'로 시작하거나 별표 형태인 '*'가 아닌 경우나 :path가 없는 요청이 거부되지 않았습니다.
영향 받는 시나리오: 리터럴 요청 경로에서 접근 제어(ACL) 결정을 수행하는 프론트 엔드 프록시 또는 게이트웨이 뒤에 Apache bRPC를 배포한 환경이며, 해당 프록시로부터 HTTP 또는 HTTP/2 트래픽을 수신하는 bRPC 서버가 있는 경우. 이러한 배포 환경에서는 공격자가 빈 경로 세그먼트를 포함하는 경로를 전송하여 프론트 엔드 프록시가 차단하려고 의도했던 리소스에 도달할 수 있습니다.
해결 방법: (다음 옵션 중 하나 선택) 1. 이 문제를 수정한 버전 1.18.0으로 bRPC를 업그레이드합니다. 2. 다음 패치를 적용합니다: https://github.com/apache/brpc/pull/3512
참고: 수정 사항을 적용하면 빈 경로 세그먼트(연속된 슬래시)가 포함된 HTTP 및 HTTP/2 요청 경로가 기본적으로 거부되며, 비어 있거나 '/'로 시작하지 않고 '*'와 같지 않은 HTTP/2 :path 값도 거부됩니다. 이전의 관대한 동작에 의존하는 배포 환경에서는 -http_allow_empty_path_segments gflag를 활성화하여 해당 동작을 복원할 수 있지만, 신뢰할 수 없는 트래픽에 노출된 서버에는 권장되지 않습니다.
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.