
🔐 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 インジェクションにより、機密性の高いデータベースコンテンツを抽出できます |
| サービス拒否 (DoS) | 高負荷なクエリにより、コネクションプールのリソースを枯渇させる可能性があります |
| 情報漏えい | エラーベースの手法により、データベース構造やデータが明らかになる可能性があります |
| 属性 | 詳細 |
|---|---|
| 発見者 / 報告者 | Terence Monteiro (Apache Fineract Team) |
| 公開開示日 | 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 |
1️⃣ exploit.py - 詳細スキャン
python3 exploit.py
期待される出力:
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 Base Score 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 のログ監視 | 🟠 高 |
| リソース枯渇を検出するためのデータベースコネクションプール監視 | 🟡 中 |