앞단이 지운 헤더를 뒷단이 다시 읽어버린 대가 — F5 BIG-IP 관리자 탈취
앞단이 지운 헤더를 뒷단이 다시 읽어버린 대가 — F5 BIG-IP 관리자 탈취
분류: CVE · 웹·서버 · 인증우회 [정보성] · CVE-2023-46747
덱. 보안 업체 Praetorian의 연구팀이 F5 BIG-IP의 관리 인터페이스(TMUI)를 대상으로 능동적인 취약점 리서치를 진행하던 중, 프런트엔드 Apache와 백엔드 Tomcat이 같은 요청을 서로 다르게 해석하는 틈을 찾아냈습니다. 이 틈을 이용하면 로그인 절차 없이도 임의의 관리자 계정을 만들 수 있었고, 이 결함은 CVE-2023-46747로 등록됐습니다. 두 프로세스 사이의 인증 책임 분담이 얼마나 쉽게 무너지는지 보여주는 사례입니다.
리드
리버스 프록시 뒤에 별도의 애플리케이션 서버를 두는 구조는 흔합니다. 문제는 프록시와 백엔드가 하나의 HTTP 요청을 “같은 것”으로 읽는다는 전제가 항상 성립하지는 않는다는 점입니다. 두 파서가 헤더 하나(예: Transfer-Encoding, Content-Length)를 다르게 해석하면, 공격자는 그 틈에 자신만의 요청을 하나 더 밀어 넣어 백엔드에만 전달할 수 있습니다 — 이것이 요청 스머글링(request smuggling)입니다. 프록시가 인증을 담당하고 백엔드는 “프록시를 거쳤으니 이미 인증됐다”고 가정하는 구조라면, 스머글링된 요청은 인증 자체를 그대로 건너뜁니다. 이번 F5 BIG-IP 사례는 이 패턴이 관리자 권한 탈취까지 얼마나 곧장 이어질 수 있는지 보여주는 교과서적인 예입니다.
핵심 사실 요약
- Praetorian이 F5 BIG-IP Virtual Edition을 대상으로 진행한 능동 취약점 리서치에서 발견됐습니다. TMUI(Traffic Management User Interface, 트래픽 관리용 웹 관리 인터페이스)가 인터넷에 노출된 경우, 인증 없이 시스템 전체를 장악당할 수 있는 결함입니다.
- CVE-2023-46747로 등록됐고, 원문에 따르면 이전에 알려졌던 CVE-2022-26377(Apache
mod_proxy_ajp의 요청 스머글링)과 밀접하게 관련돼 있습니다. - 구조: BIG-IP는 Apache httpd가 프런트엔드에서 요청을 받아 AJP(Apache JServ Protocol, 웹서버와 자바 애플리케이션 서버 간 통신용 바이너리 프로토콜)로 백엔드 Tomcat(포트 8009)에 전달합니다.
/tmui경로로 오는 요청은 이 AJP 경로를 거쳐 Tomcat의 TMUI 서블릿으로 라우팅됩니다. - 취약점 메커니즘: 요청에
Content-Length와 함께 비정상 값을 가진Transfer-Encoding헤더(예: 콤마로 두 값을 이어붙인 형태)를 같이 보내면, Apache는Content-Length헤더를 제거한 채 요청을 백엔드로 넘기면서도 원래의 POST 본문은 그대로 별도의 AJP 데이터 패킷으로 흘려보냅니다. 그런데 Tomcat 쪽 AJP 처리기는Content-Length가 없는 요청이므로 본문을 기다리지 않고 다음 처리로 넘어가버리고, 소켓에 남아 있던 이 “본문” 데이터를 처리 루프가 완전히 새로운 AJP 요청으로 다시 읽어버립니다. 결과적으로 공격자가 완전히 통제하는 데이터가 인증 절차를 한 번도 거치지 않은 채 Tomcat에 직접 도달합니다. - 스머글링된 AJP 요청에는
remote_user같은 속성이 포함되는데, 정상적인 흐름에서는 Apache가 사용자 인증을 마친 뒤에만 채워 넣는 값입니다. 공격자가 이 속성을 직접 지정할 수 있게 되면서, 인증 없이도 특정 사용자(관리자 포함)로 요청을 처리시킬 수 있었습니다. - 다만 제약이 있었습니다: 스머글링 가능한 요청은 정확히 518바이트 크기여야 하고, 요청 본문(body)은 담을 수 없으며(쿼리 파라미터로 대체해야 함), 라우팅 가능한 대상도
/tmui경로로 한정됐습니다(임의 명령 실행 엔드포인트인/mgmt에는 이 방식으로 직접 도달할 수 없었다고 밝혔습니다). 연구팀은 이 제약 안에서 “관리자 계정 생성” 요청을 518바이트 이하로 압축해, 인증 없이 새 관리자 계정을 만들어냈다고 설명합니다. - 원문에 따르면 이렇게 만든 관리자 계정으로 정상 로그인 절차를 거친 뒤, 관리용 API(
/mgmt/tm/util/bash)를 통해 임의 명령을 실행할 수 있었다고 합니다. 이 인증우회→명령실행 전체 흐름은 별도 CVE 번호 없이 CVE-2023-46747 하나로 등록돼 있습니다 — 다른 여러 보안 매체도 이 CVE를 “인증 우회를 통한 원격코드실행”으로 함께 기술하고 있어 확인됐습니다. - F5는 해당 취약점에 대한 공식 권고문(K000137353)을 2023년 10월 26일 발행하고 각 버전별 핫픽스를 배포했습니다. CVSSv3.1 기준 9.8(Critical)이며, 영향 버전은 BIG-IP 13.1.0-13.1.5, 14.1.0-14.1.5, 15.1.0-15.1.10, 16.1.0-16.1.4, 17.1.0입니다(복수의 보안 매체가 F5 공식 advisory를 인용해 일치된 수치를 확인).
- 연구팀은 TMUI 포털을 아예 인터넷에 노출하지 말 것을 권고했습니다. 같은 포털에서 과거 몇 년 사이 이미 두 건의 인증 없는 원격코드실행 취약점(CVE-2020-5902, CVE-2022-1388)이 발견된 바 있다고 밝혔습니다.
짧은 논평
이 사례가 흥미로운 건 근본 결함 자체가 완전히 새롭지 않다는 점입니다. 프런트엔드와 백엔드가 헤더 하나를 다르게 읽는 문제는 F5 제품군 안에서만도 2020년(URL 경로 해석 불일치)과 2022년(홉바이홉 헤더 처리 방식)에 이미 반복됐고, 이번 것도 결국 같은 뿌리입니다 — “누가 인증을 책임지는가”에 대한 암묵적 가정이 프런트엔드와 백엔드 사이에서 어긋난 경우입니다. 프록시가 인증을 끝냈다고 믿고 백엔드가 검증을 생략하는 구조라면, 그 프록시를 속이는 방법 하나만 찾으면 인증 계층 전체가 함께 무너집니다. 저희가 다른 요청 스머글링·파서 불일치 사례에서 반복해서 보는 패턴과 같습니다 — 신뢰를 계층 간에 그대로 넘겨주는 설계는, 그 넘겨주는 지점 자체가 공격 표면이 됩니다.
이 한 틈은 핫픽스로 막혔지만, 프런트엔드와 백엔드가 같은 요청을 다르게 읽는 문제는 다른 스택에서도 계속 나타날 구조적인 취약점 클래스입니다 — 그래서 저희는 도구가 아니라 이 사고방식을 남깁니다.
References / 참고자료
- Michael Weber, Thomas Hendrickson (Praetorian), “Refresh: Compromising F5 BIG-IP With Request Smuggling | CVE-2023-46747” — 이 글이 재구성한 원 분석. AJP 요청 스머글링의 발견 과정과 관리자 계정 생성까지의 전체 절차를 다룸. https://www.praetorian.com/blog/refresh-compromising-f5-big-ip-with-request-smuggling-cve-2023-46747/
이 글은 위 원 분석을 우리 관점에서 다시 쓰고 짧은 논평을 더한 정보성 초안입니다. 특정 문장·요청 패킷 구조·스크린샷을 그대로 옮기지 않았으며, 작동하는 재현 절차는 싣지 않았습니다. ⚠️미확인 표시 항목은 발행 전 독립 팩트체크에서 확증·정정되어야 합니다.