🔐 CVE-2026-57821 — Apache Fineract SQL Injection Toolkit 📚 Два Python-скрипта для авторизованного тестирования безопасности: verifier.py (безопасное обнаружение, без извлечения данных) и exploit.py (глубокий анализ). Поддерживает 11 типов БД. Идеально подходит для понимания уязвимостей SQL-инъекций. Только легальные тесты ⚠️ исключительно в образовательных и исследовательских целях.

⚠️ ПРАВОВОЕ И ЭТИЧЕСКОЕ УВЕДОМЛЕНИЕ
Этот инструментарий предоставляется строго для образовательных, учебных и авторизованных целей тестирования безопасности.
Несанкционированное использование против любой системы без явного письменного разрешения противозаконно и нарушает законы о компьютерных преступлениях.
Автор не несёт никакой ответственности за неправомерное использование или ущерб.
Вы несёте полную ответственность за свои действия.
CVE-2026-57821 — это уязвимость SQL-инъекции, обнаруженная в конечной точке API списка офисов Apache Fineract.
| Атрибут | Описание |
|---|
| Конечная точка | /api/v1/offices |
| Параметр | orderBy |
| Метод | GET |
| Требуется аутентификация | Да (только аутентифицированные пользователи) |
| Затронутые версии | Apache Fineract ≤ 1.14.0 |
| Исправленная версия | Apache Fineract 1.15.0 |
Уязвимость существует, потому что параметр orderBy напрямую встраивается в SQL-запросы без надлежащей очистки. Злоумышленник с действительными учётными данными может внедрить подзапросы, заключённые в круглые скобки (), в параметр orderBy.
Почему это обходит предыдущие исправления:
ColumnValidator для очистки выражений ORDER BYORDER BYПример вектора атаки:
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 Team) |
| Дата публичного раскрытия | 14 июля 2026 года |
| Исправленная версия | Apache Fineract 1.15.0 |
| Официальное объявление | Apache Mailing List |
| Исправление на GitHub | PR #6048 |
Этот инструментарий автоматически определяет и адаптирует методы эксплуатации для 11 различных серверных систем баз данных:
| База данных | Метод обнаружения | Метод эксплуатации |
|---|---|---|
| PostgreSQL | Time‑based (pg_sleep) | Слепая (основанная на времени) |
| MySQL | Time‑based (SLEEP) | Слепая (основанная на времени) |
| MariaDB | Time‑based + @@version_comment | Слепая (основанная на времени) |
| MSSQL | Error‑based (сбой CONVERT) | Основанная на ошибках |
| Oracle | Time‑based (DBMS_LOCK.SLEEP) | Слепая (основанная на времени) |
| SQLite | Тяжёлый запрос (декартово соединение) | Основанная на времени (тяжёлая) |
| Firebird | Тяжёлый запрос (декартово соединение) | Основанная на времени (тяжёлая) |
| DB2 | Тяжёлый запрос (декартово соединение) | Основанная на времени (тяжёлая) |
| Informix | Тяжёлый запрос (декартово соединение) | Основанная на времени (тяжёлая) |
| H2 | Тяжёлый запрос (декартово соединение) | Основанная на времени (тяжёлая) |
| Неизвестная (общая) | Откат к PostgreSQL | Основанная на времени |
Этот проект предоставляет два скрипта на Python для различных сценариев оценки безопасности:
verifier.py – безопасный и минимальный инструмент проверкиНазначение: Быстро доказать наличие уязвимости без извлечения данных.
Что он делает:
VULNERABLE или NOT VULNERABLE для каждого типа базы данных✅ Преимущества:
📋 Сценарий использования: Первичная оценка для определения, уязвима ли цель.
exploit.py – комплексный анализатор безопасностиНазначение: Полностью задействовать уязвимость для извлечения информации из базы данных.
Что он делает:
✅ Преимущества:
📋 Сценарий использования: Углублённый анализ безопасности после подтверждения уязвимости.
🔍 Ключевое различие:
verifierPoC.pyсообщает вам, уязвима ли система;exploit.pyпоказывает, что можно извлечь. Оба выполняют различные, но взаимодополняющие роли в процессе оценки безопасности.
requestspip install requests
Отредактируйте следующие переменные в начале обоих скриптов:
| Переменная | Описание | По умолчанию |
|---|---|---|
TARGET | URL API Fineract | 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 8.1 (высокий) Вектор 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 Injection')
Почему полезная нагрузка работает
Уязвимый код в 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: блокировать orderBy, содержащий (SELECT, SLEEP(, pg_sleep(, WAITFOR | 🟠 Высокий |
Мониторинг журналов на наличие orderBy с круглыми скобками или ключевыми словами подзапросов | 🟠 Высокий |
| Мониторинг пула соединений с БД для обнаружения исчерпания ресурсов | 🟡 Средний |