( 1 ) 취약점 설명
CVE-2022-1388 취약점은 CVSS 9.8 로 높은 점수를 받은 심각한 취약점으로 F5 사 보안팀에서 처음 발견하여 05월 04일에 보안 권고에 공지됨.
F5 Nwtworks 제품의 BIG-IP 솔루션 관리 인터페이스에서 지원하는 iControl REST 구성 요소에 인증 우회하여 원격코드 실행이 가능한 취약점임.
F5 BIG-IP 란?
소프트웨어와 하드웨어의 결합을 통해 F5 BIG-IP 는 네트워크를 통과하는 트래픽의 검사 및 암호화를 허용하며 로드밸런서, 어플리케이션 방화벽 및 전체 프록시 역할을 수행함.
현재 F5 사에 따르면 Fortune 50대 기업 중 48개사에서 사용하고 있는 것으로 조사되며 Shodan 검색 시 F5 BIG-IP 제품이 16,000개 이상 존재하는 것으로 확인됨.
CVE-2022-1388 취약점을 악용하는 데 필요한 관리 인터페이스 접근은 관리상 외부망에 노출되는 경우가 거의 없으나 공격자가 내부 침투 후 이를 악용할 경우 막대한 피해가 우려되며 특히 인지도 있는 보안장비 취약점은 반드시 패치할 필요가 있음.
취약한 제품 버전 정보은 아래 "( 3 ) 취약점 방어" 섹션에 포함됨.
( 2 ) 취약점 분석
CVE-2022-1388 취약점의 근본 원인을 이해하려면 먼저 iControl REST 구성 요소의 인증 모델을 설명해야 함.
F5 사에서 제공하는 iControl API 문서에 따르면 아래와 같음.
"사용자는 자동으로 REST 리소스에 액세스할 수 있지만 모든 사용자는 인증을 위한 토큰을 획득하고 모든 REST 요청에 해당 토큰을 포함해야 함.
BIG-IP 시스템 관리자는 여전히 기본 인증을 사용하여 REST 요청을 할 수 있음.
BIG-IP 시스템 관리자는 기본 인증을 사용하여 iControl REST 요청을 할 수 있음.
관리자 권한이 없는 사용자의 경우 사용자가 REST API 요청을 하는 사용자를 인증하는 데 사용할 수 있는 토큰을 요청해야 함."
위 내용에 따르면 두 가지 인증 모드(토큰 기반 및 HTTP 기본)를 정의함.
여기서 HTTP 기본 인증 모드는 관리자용으로 예약되어 있는 반면 사용자는 토큰 기반 인증 모드로 분류되어 있음.
외부 관점에서 HTTP 통신을 통한 iControl REST 에 대한 연결은 프론트엔드에 위치한 Apache 웹서버 443 포트에서 처리함.
이 서버는 요청을 적절할 내부 서비스로 라우팅하는 역할을 함.
iControl REST 서비스에 도달하려면 요청된 경로가 /mgmt 로 시작해야 Apache 가 8100 포트에서 로컬로 수신 대기하는 내부 Jetty 웹서버로 메시지를 전달하도록 알림.
여기서 Jetty 웹서버는 자바 HTTP 웹 서버이자 자바 서블릿 컨테이너임.
그리고 Jetty 웹서버는 외부에서 발생한 것으로 보이는 요청을 인증하고 성공 시 X-F5-Auth-Token 헤더 형식의 토큰을 제공함.
이 토큰은 모든 후속 통신에 사용해야 함.
(단, 외부 Apache 서버에서 요청을 수신하면 Apache 는 Jetty 가 토큰값을 확인하고 헤더에 따라 전달할 것이라고 가정함)
Jetty 웹서버의 관점에서 요청이 X-F5-Auth-Token 없이 수신되면 관리자로 간주되며 HTTP Basic 헤더의 사용자 이름만 admin 또는 root 인지만 일치하는지 확인함.
이는 신뢰할 수 있는 요청을 보내는 데 사용하기 위해 어플리케이션에 하드코딩된 자격 증명임.
CVE-2022-1388 취약점은 위의 신뢰 관계와 HTTP 프로토콜 정의의 작은 세부 사항과 결합하여 발생함.
HTTP 프로토콜 정의의 작은 세부 사항은 RFC 2616 문서에 정의되어 있으며 14.10 섹션을 참조해야 함.
링크 :
https://datatracker.ietf.org/doc/html/rfc2616#section-14.10
"HTTP/1.1 프록시는 메시지가 전달되기 전에 연결 헤더 필드를 구문 분석해야 하며 이 필드의 각 연결 토큰에 대해 연결 토큰과 동일한 이름을 가진 메시지에서 헤더 필드를 제거해야 함."
Apache 서버가 내부 Jetty 어플리케이션에 대한 역프록시 역할을 하기 때문에 위 문구 정의는 F5 BIG-IP 제품에 적용됨.
이를 통해 공격자는 Apache 와 Jetty 간에 전달되는 요청에서 특정 헤더를 Connection 헤더에 이름을 지정하여 제거할 수 있음.
예를 들어 다음을 지정하면 프록시된 요청에서 X-F5-Auth-Token 이 제거됨.
Connection: X-F5-Auth-Token
외부 Apache 서버에 요청하는 동안 위의 헤더값을 지정하는 원격 공격자는 Jetty 관점에서 관리자로 취급됨.
이를 통해 인증되지 않은 공격자가 관리자 권한을 획득하여 원하는 시스템 명령을 실행할 수 있음.
또한, Jetty 어플리케이션은 X-Forwarded-For 및 X-Forwarded-Host 헤더를 기반으로 요청 소스를 추적함.
Connection 헤더에 X-Forwarded-Host 를 포함하면 X-Forwarded-Host 헤더도 제거됨.
Connection: X-F5-Auth-Token, X-Forwarded-Host
이렇게 하면 요청이 Apache 에 의해 전달되었다는 사실을 Jetty 가 알 수 없으며 요청이 로컬 관점에서 이루어진 것처럼 처리됨.
아래 스크린샷은 현재 인터넷상에서 공유되고 있는 PoC 화면임.
( 3 ) 취약점 방어
1. 최신 버전으로 업그레이드함.
CVE ID |
제품명 |
영향받는 버전 |
해결 버전 |
CVE-2022-1388 |
BIG-IP (All modules) |
13.1.0 - 13.1.4 |
13.1.5 |
14.1.0 - 14.1.4 |
14.1.4.6 |
||
15.1.0 - 15.1.5 |
15.1.5.1 |
||
16.1.0 - 16.1.2 |
16.1.2.2 |
※ 11.x 버전과 12.x 버전은 기술 지원이 종료되었으므로, 13.1.5 이상으로의 업데이트를 권장함.
추가로 아래 링크의 Mitigation 항목 확인하여 조치도 필요함.
링크 : https://support.f5.com/csp/article/K23605346
2. 아래와 같이 보안장비에 Snort 패턴을 등록하여 모니터링 및 대응함.
아래 패턴은 POST 방식으로 BIG-IP 솔루션 관리 인터페이스 접근 시 Authorization 헤더 문자열과 X-F5-Auth-Token 헤더 문자열을 탐지함.
(참고로 Authorization 헤더와 X-F5-Auth-Token 헤더를 동시에 쓸 경우 이는 비정상적인 통신임)
alert tcp any any -> any any (msg:"KOROMOON_CVE-2022-1388_Vulnerability_Detected"; content:"POST /mgmt/"; depth:11; content:"|20|HTTP/"; content:"|0d 0a|Connection|3a| "; content:"|0d 0a|Authorization|3a| Basic "; content:"|0d 0a|X-F5-Auth-Token|3a| ";)
참고 사이트 :
https://support.f5.com/csp/article/K23605346
https://www.randori.com/blog/vulnerability-analysis-cve-2022-1388/
https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-1388
https://nvd.nist.gov/vuln/detail/CVE-2022-1388
https://packetstormsecurity.com/files/167007/F5-BIG-IP-Remote-Code-Execution.html
https://github.com/ZephrFish/F5-CVE-2022-1388-Exploit
https://twitter.com/jas502n/status/1523611433938059265/photo/1
https://www.krcert.or.kr/data/secNoticeView.do?bulletin_writing_sequence=66689
댓글 없음:
댓글 쓰기