30년 된 FastCGI가 역방향 프록시에서 여전히 더 나은 프로토콜인 이유

원제: FastCGI: 30 years old and still the better protocol for reverse proxies

왜 중요한가

30년 된 FastCGI가 현재의 HTTP 역방향 프록시 보안 취약점을 근본적으로 해결할 수 있는 대안으로 재조명받고 있다

개발자 Andrew Ayer가 HTTP 역방향 프록시의 보안 취약점 문제를 지적하며, 30년 전 출시된 FastCGI 프로토콜을 대안으로 제시했다. Discord 미디어 프록시 취약점 등 HTTP desync 공격이 지속되는 가운데, FastCGI는 명확한 메시지 경계로 이런 문제를 근본적으로 해결한다고 주장했다.

HTTP 역방향 프록시는 보안상 위험한 영역이다. 최근 Discord 미디어 프록시에서 발견된 desync 취약점은 개인 첨부파일 감시를 가능하게 했으며, 이런 취약점들이 계속 발견되고 있다. 문제의 핵심은 프록시와 백엔드 간 통신에 HTTP를 사용하는 것인데, HTTP는 이 용도에 부적합하다.

HTTP/1.1은 표면적으로는 단순해 보이지만(텍스트 기반) 실제로는 견고한 파싱이 매우 어렵다. 동일한 HTTP 메시지를 포맷하는 방법이 너무 많고, 엣지 케이스와 모호함이 많아 구현체들이 일관되게 처리하기 어렵다. HTTP 메시지의 명시적 프레이밍이 없어 메시지 종료 지점을 둘러싼 파서 차이가 desync 공격(요청 스머글링)의 기반이 된다.

반면 FastCGI는 1996년부터 명확한 메시지 경계를 제공해왔다. Go에서는 net/http/fcgi 패키지를 import하고 http.Serve를 fcgi.Serve로 바꾸기만 하면 된다. Apache, Caddy, nginx, HAProxy 등 주요 프록시들이 FastCGI 백엔드를 지원하며 설정도 간단하다. HTTP/2가 메시지 경계 문제를 해결했지만 FastCGI가 더 단순한 프로토콜로 동일한 효과를 제공한다.

출처

agwa.name — 원문 읽기 →