
🔐 CVE-2026-57821 - Apache Fineract SQLインジェクションツールキット 📚 認可されたセキュリティテスト用の2つのPythonスクリプト: verifier.py (安全な検出、抽出なし) と exploit.py (深層分析)。11種類のDBタイプに対応。SQLインジェクションの脆弱性を理解するのに最適。合法的なテストのみ ⚠️ 教育・研究目的専用。

法的・倫理的注意事項
このツールキットは教育、トレーニング、および許可されたセキュリティテストの目的に限定して提供されています。
明示的な書面による許可なく、いかなるシステムに対して不正使用することは違法であり、コンピュータ犯罪法に違反します。
作者は不正使用や損害に対して一切の責任を負いません。
あなたの行動に対する責任はすべてあなた自身にあります。
CVE-2026-57821 は、Apache Fineractのオフィス一覧取得APIエンドポイントで発見されたSQLインジェクションの脆弱性です。
| 属性 | 詳細 |
|---|---|
| エンドポイント | /api/v1/offices |
| パラメータ | orderBy |
| メソッド | GET |
| 認証の要否 | 必要(認証済みユーザーのみ) |
| 影響を受けるバージョン | Apache Fineract ≤ 1.14.0 |
| 修正済みバージョン | Apache Fineract 1.15.0 |
この脆弱性は、orderBy パラメータが適切なサニタイズなしにSQLクエリへ直接埋め込まれるために存在します。有効な認証情報を持つ攻撃者は、括弧 () で囲んだサブクエリを orderBy パラメータにインジェクションできます。
これが以前の修正を回避できる理由:
ORDER BY 句をサニタイズするための ColumnValidator が導入されたORDER BY コンテキスト内で任意のSQLを実行できる攻撃ベクトルの例:
GET /api/v1/offices?orderBy=(SELECT CASE WHEN (1=1) THEN pg_sleep(5) ELSE pg_sleep(0) END)&limit=1
| 影響 | 説明 |
|---|---|
| データ窃取 | 時間ベースのブラインドSQLインジェクションにより、機密性の高いデータベース内容を抽出できる |
| サービス拒否 | 負荷の高いクエリにより接続プールのリソースを枯渇させることができる |
| 情報漏洩 | エラーベースの手法によりデータベース構造やデータを明らかにできる |
| 属性 | 詳細 |
|---|---|
| 発見者 / 報告者 | Terence Monteiro(Apache Fineractチーム) |
| 公開開示日 | 2026年7月14日 |
| 修正済みバージョン | Apache Fineract 1.15.0 |
| 公式アナウンス | Apache Mailing List |
| GitHub修正 | PR #6048 |
このツールキットは、11種類の異なるデータベースバックエンドに対してエクスプロイト手法を自動的に検出・適応します:
| データベース | 検出方法 | エクスプロイト手法 |
|---|---|---|
| PostgreSQL | 時間ベース(pg_sleep) | 時間ベースブラインド |
| MySQL | 時間ベース(SLEEP) | 時間ベースブラインド |
| MariaDB | 時間ベース + @@version_comment | 時間ベースブラインド |
| MSSQL | エラーベース(CONVERT 失敗) | エラーベース |
| Oracle | 時間ベース(DBMS_LOCK.SLEEP) | 時間ベースブラインド |
| SQLite | 重いクエリ(直積結合) | 時間ベース(重いクエリ) |
| Firebird | 重いクエリ(直積結合) | 時間ベース(重いクエリ) |
| DB2 | 重いクエリ(直積結合) | 時間ベース(重いクエリ) |
| Informix | 重いクエリ(直積結合) | 時間ベース(重いクエリ) |
| H2 | 重いクエリ(直積結合) | 時間ベース(重いクエリ) |
| 不明(汎用) | PostgreSQLへのフォールバック | 時間ベース |
このプロジェクトは、異なるセキュリティ評価シナリオ向けに2つのPythonスクリプトを提供します:
verifier.py – 安全で最小限の検証ツール目的: データを抽出せずに、脆弱性の存在を迅速に証明します。
動作内容:
VULNERABLE または NOT VULNERABLE を報告する利点:
ユースケース: 対象が脆弱かどうかを判断するための初回評価。
exploit.py – 包括的なセキュリティアナライザー目的: 脆弱性を完全に悪用してデータベース情報を抽出します。
動作内容:
利点:
ユースケース: 脆弱性確認後の詳細なセキュリティ分析。
主な違い:
verifierPoC.pyは脆弱性があるかどうかを教えてくれますが、exploit.pyは何を抽出できるかを示します。どちらもセキュリティ評価ワークフローにおいて、異なるが補完的な役割を果たします。
requestsライブラリpip install requests
両方のスクリプトの先頭で、以下の変数を編集してください:
| 変数 | 説明 | デフォルト |
|---|---|---|
TARGET | Fineract API URL | http://localhost:8080/fineract-provider/api/v1/offices |
USERNAME | API 認証ユーザー名 | mifos |
PASSWORD | API 認証パスワード | password |
TENANT_ID | テナント識別子 | default |
BASE_SLEEP | 時間ベースのテストにおけるスリープ時間 (exploit.py) | 6 |
SLEEP_SECONDS | 時間ベースのテストにおけるスリープ時間 (verifier.py) | 5 |
TIMEOUT | HTTP リクエストのタイムアウト | 25 (exploit) / 15 (verifier) |
MAX_RETRIES | 失敗したリクエストの再試行回数 | 2 |
exploit.py - ディープスキャン
python3 exploit.py
Expected Output:
CVE-2026-57821 - Apache Fineract Vulnerability Verifier
══════════════════════════════════════════════════════════════════════════════════════
@tc4dy is here :) Good Luck!
CONNECTION SUCCESS
BASELINE: 0.234s
STARTING VULNERABILITY VERIFICATION
VERIFICATION RESULTS
PostgreSQL: VULNERABLE
MySQL: NOT VULNERABLE
MariaDB: NOT VULNERABLE
Oracle: NOT VULNERABLE
MSSQL: NOT VULNERABLE
CONCLUSION: TARGET IS VULNERABLE (CVE-2026-57821 CONFIRMED)
Interpretation: If VULNERABLE appears for any database type, the target is affected.
CVSS スコア 指標 値 CVSS v3.1 基本スコア 8.1 (High) ベクター CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:H 攻撃ベクター ネットワーク 必要な権限 低 ユーザー操作 なし EPSS スコア
0.29% (30日以内に悪用される確率)
CWE マッピング
CWE‑89: SQL コマンドで使用される特殊要素の不適切な中和 ('SQL インジェクション')
ペイロードが機能する理由
Apache Fineract 1.14.0 の脆弱なコード:
// Simplified vulnerable logic
String orderBy = request.getParameter("orderBy");
if (ColumnValidator.isValid(orderBy)) {
// VALIDATOR FAILS FOR: "(SELECT ...)"
// Only checks against simple column names
String sql = "SELECT * FROM offices ORDER BY " + orderBy;
// Executes query with user input directly
}
攻撃者ペイロードの例:
GET /api/v1/offices?orderBy=(SELECT CASE WHEN (1=1) THEN pg_sleep(5) ELSE pg_sleep(0) END)&limit=1
結果のSQL:
SELECT * FROM offices ORDER BY (SELECT CASE WHEN (1=1) THEN pg_sleep(5) ELSE pg_sleep(0) END)
ColumnValidator はカラム名をチェックしますが、ネストされたサブクエリを見逃すため、任意の SQL 実行が可能になります。
| 対応 | 優先度 |
|---|---|
| Apache Fineract 1.15.0+ へアップグレード | 緊急 |
| PR #6048 のパッチを適用 | 緊急 |
WAF ルール: (SELECT、SLEEP(、pg_sleep(、WAITFOR を含む orderBy をブロック | 高 |
ログを監視し、括弧やサブクエリのキーワードを含む orderBy を検出 | 高 |
| データベース接続プールの監視によりリソース枯渇を検出 | 中 |