🔐 CVE-2026-57821 - Apache Fineract SQL-Injection-Toolkit 📚 Zwei Python-Skripte für autorisierte Sicherheitstests: verifier.py (sichere Erkennung, keine Extraktion) und exploit.py (tiefgehende Analyse). Unterstützt 11 DB-Typen. Perfekt zum Verständnis von SQL-Injection-Schwachstellen. Nur legale Tests ⚠️ nur für Bildungs- und Forschungszwecke.

RECHTLICHER UND ETHISCHER HINWEIS
Dieses Toolkit wird ausschließlich für Bildungs-, Schulungs- und autorisierte Sicherheitstestzwecke bereitgestellt.
Die unbefugte Nutzung gegen jegliche Systeme ohne ausdrückliche schriftliche Genehmigung ist illegal und verstößt gegen Computerkriminalitätsgesetze.
Der Autor übernimmt keinerlei Haftung für Missbrauch oder Schäden.
Sie sind allein für Ihre Handlungen verantwortlich.
CVE-2026-57821 ist eine SQL-Injection-Schwachstelle, die im Office-Listing-API-Endpunkt von Apache Fineract entdeckt wurde.
| Attribut | Detail |
|---|---|
| Endpunkt | /api/v1/offices |
| Parameter | orderBy |
| Methode | GET |
| Authentifizierung erforderlich | Ja (nur authentifizierte Benutzer) |
| Betroffene Versionen | Apache Fineract ≤ 1.14.0 |
| Gepatchte Version | Apache Fineract 1.15.0 |
Die Schwachstelle besteht, weil der Parameter orderBy ohne ordnungsgemäße Bereinigung direkt in SQL-Abfragen eingebettet wird. Ein Angreifer mit gültigen Anmeldedaten kann Unterabfragen in Klammern () in den Parameter orderBy einschleusen.
Warum dies frühere Korrekturen umgeht:
ColumnValidator ein, um ORDER BY-Klauseln zu bereinigenORDER BYBeispiel-Angriffsvektor:
GET /api/v1/offices?orderBy=(SELECT CASE WHEN (1=1) THEN pg_sleep(5) ELSE pg_sleep(0) END)&limit=1
| Auswirkung | Beschreibung |
|---|---|
| Datenexfiltration | Zeitbasierte Blind-SQL-Injection kann vertrauliche Datenbankinhalte extrahieren |
| Denial of Service | Schwere Abfragen können die Ressourcen des Verbindungspools erschöpfen |
| Offenlegung von Informationen | Fehlerbasierte Techniken können die Datenbankstruktur und Daten offenlegen |
| Attribut | Detail |
|---|---|
| Entdecker / Melder | Terence Monteiro (Apache Fineract Team) |
| Datum der öffentlichen Offenlegung | 14. Juli 2026 |
| Gepatchte Version | Apache Fineract 1.15.0 |
| Offizielle Ankündigung | Apache Mailing List |
| GitHub-Fix | PR #6048 |
Dieses Toolkit erkennt automatisch 11 verschiedene Datenbank-Backends und passt die Exploitationstechniken entsprechend an:
| Datenbank | Erkennungsmethode | Exploitationstechnik |
|---|---|---|
| PostgreSQL | Zeitbasiert (pg_sleep) | Zeitbasiertes Blind |
| MySQL | Zeitbasiert (SLEEP) | Zeitbasiertes Blind |
| MariaDB | Zeitbasiert + @@version_comment | Zeitbasiertes Blind |
| MSSQL | Fehlerbasiert (CONVERT-Fehler) | Fehlerbasiert |
| Oracle | Zeitbasiert (DBMS_LOCK.SLEEP) | Zeitbasiertes Blind |
| SQLite | Schwere Abfrage (kartesischer Join) | Zeitbasiert (schwer) |
| Firebird | Schwere Abfrage (kartesischer Join) | Zeitbasiert (schwer) |
| DB2 | Schwere Abfrage (kartesischer Join) | Zeitbasiert (schwer) |
| Informix | Schwere Abfrage (kartesischer Join) | Zeitbasiert (schwer) |
| H2 | Schwere Abfrage (kartesischer Join) | Zeitbasiert (schwer) |
| Unbekannt (generisch) | Rückfall auf PostgreSQL | Zeitbasiert |
Dieses Projekt stellt zwei Python-Skripte für verschiedene Sicherheitsbewertungsszenarien bereit:
verifier.py – Sicheres & minimales VerifikationstoolZweck: Schneller Nachweis der Existenz einer Schwachstelle ohne Extraktion von Daten.
Was es tut:
VULNERABLE oder NOT VULNERABLE für jeden Datenbanktyp** Vorteile:**
** Anwendungsfall:** Erstbewertung, um festzustellen, ob das Ziel anfällig ist.
exploit.py – Umfassender SicherheitsanalysatorZweck: Die Schwachstelle vollständig ausnutzen, um Datenbankinformationen zu extrahieren.
Was es tut:
Vorteile:
** Anwendungsfall:** Eingehende Sicherheitsanalyse nach Bestätigung der Schwachstelle.
** Wesentlicher Unterschied:**
verifierPoC.pysagt Ihnen, ob eine Schwachstelle vorliegt;exploit.pyzeigt Ihnen, was extrahiert werden kann. Beide erfüllen unterschiedliche, aber komplementäre Rollen in einem Workflow zur Sicherheitsbewertung.
requests-Bibliothekpip install requests
Bearbeiten Sie die folgenden Variablen am Anfang beider Skripte:
| Variable | Beschreibung | Standardwert |
|---|---|---|
TARGET | Fineract-API-URL | http://localhost:8080/fineract-provider/api/v1/offices |
USERNAME | Benutzername für die API-Authentifizierung | mifos |
PASSWORD | Passwort für die API-Authentifizierung | password |
TENANT_ID | Mandantenkennung | default |
BASE_SLEEP | Wartezeit für zeitbasierte Tests (exploit.py) | 6 |
SLEEP_SECONDS | Wartezeit für zeitbasierte Tests (verifier.py) | 5 |
TIMEOUT | HTTP-Anfrage-Timeout | 25 (exploit) / 15 (verifier) |
MAX_RETRIES | Anzahl der Wiederholungsversuche für fehlgeschlagene Anfragen | 2 |
exploit.py - Tiefenscan
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-Score Metrik Wert CVSS v3.1 Base Score 8.1 (Hoch) Vektor CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:H Angriffsvektor Netzwerk Erforderliche Privilegien Niedrig Benutzerinteraktion Keine EPSS-Score
0,29 % (Wahrscheinlichkeit der Ausnutzung innerhalb von 30 Tagen)
CWE-Zuordnung
CWE‑89: Unsachgemäße Neutralisierung spezieller Elemente, die in einem SQL-Befehl verwendet werden („SQL-Injection")
Warum die Payload funktioniert
Der verwundbare Code in 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
}
Beispiel für eine Angreifer-Payload: