🔐 CVE-2026-57821 - Kit de Injeção SQL do Apache Fineract 📚 Dois scripts Python para testes de segurança autorizados: verifier.py (detecção segura, sem extração) e exploit.py (análise aprofundada). Suporta 11 tipos de banco de dados. Perfeito para entender vulnerabilidades de injeção SQL. Apenas testes legais ⚠️ somente para fins educacionais e de pesquisa.

⚠️ AVISO LEGAL E ÉTICO
Este kit é fornecido estritamente para fins educacionais, de treinamento e teste de segurança autorizado.
O uso não autorizado contra qualquer sistema sem permissão explícita por escrito é ilegal e viola leis de crimes cibernéticos.
O autor não assume nenhuma responsabilidade por uso indevido ou danos.
Você é o único responsável por suas ações.
CVE-2026-57821 é uma vulnerabilidade de Injeção SQL descoberta no endpoint de listagem de escritórios do Apache Fineract.
| Atributo | Detalhe |
|---|
| Endpoint | /api/v1/offices |
| Parâmetro | orderBy |
| Método | GET |
| Autenticação Necessária | Sim (apenas usuários autenticados) |
| Versões Afetadas | Apache Fineract ≤ 1.14.0 |
| Versão Corrigida | Apache Fineract 1.15.0 |
A vulnerabilidade existe porque o parâmetro orderBy é incorporado diretamente em consultas SQL sem sanitização adequada. Um atacante com credenciais válidas pode injetar subconsultas entre parênteses () no parâmetro orderBy.
Por que isso contorna correções anteriores:
ColumnValidator para sanitizar cláusulas ORDER BYORDER BYExemplo de Vetor de Ataque:
GET /api/v1/offices?orderBy=(SELECT CASE WHEN (1=1) THEN pg_sleep(5) ELSE pg_sleep(0) END)&limit=1
| Impacto | Descrição |
|---|---|
| Exfiltração de Dados | Injeção SQL cega baseada em tempo pode extrair conteúdo sensível do banco de dados |
| Negação de Serviço | Consultas pesadas podem esgotar recursos do pool de conexões |
| Divulgação de Informações | Técnicas baseadas em erros podem revelar estrutura e dados do banco de dados |
| Atributo | Detalhe |
|---|---|
| Descobridor / Relator | Terence Monteiro (Equipe Apache Fineract) |
| Data de Divulgação Pública | 14 de julho de 2026 |
| Versão Corrigida | Apache Fineract 1.15.0 |
| Anúncio Oficial | Lista de Discussão Apache |
| Correção no GitHub | PR #6048 |
Este kit detecta automaticamente e adapta técnicas de exploração para 11 backends de banco de dados diferentes:
| Banco de Dados | Método de Detecção | Técnica de Exploração |
|---|---|---|
| PostgreSQL | Baseado em tempo (pg_sleep) | Blindagem Baseada em Tempo |
| MySQL | Baseado em tempo (SLEEP) | Blindagem Baseada em Tempo |
| MariaDB | Baseado em tempo + @@version_comment | Blindagem Baseada em Tempo |
| MSSQL | Baseado em erro (falha CONVERT) | Baseado em Erro |
| Oracle | Baseado em tempo (DBMS_LOCK.SLEEP) | Blindagem Baseada em Tempo |
| SQLite | Consulta Pesada (Junção Cartesiana) | Blindagem Baseada em Tempo (Pesada) |
| Firebird | Consulta Pesada (Junção Cartesiana) | Blindagem Baseada em Tempo (Pesada) |
| DB2 | Consulta Pesada (Junção Cartesiana) | Blindagem Baseada em Tempo (Pesada) |
| Informix | Consulta Pesada (Junção Cartesiana) | Blindagem Baseada em Tempo (Pesada) |
| H2 | Consulta Pesada (Junção Cartesiana) | Blindagem Baseada em Tempo (Pesada) |
| Desconhecido (Genérico) | Fallback para PostgreSQL | Baseado em Tempo |
Este projeto fornece dois scripts Python para diferentes cenários de avaliação de segurança:
verifier.py – Ferramenta de Verificação Segura e MínimaPropósito: Provar rapidamente a existência da vulnerabilidade sem extrair dados.
O que faz:
VULNERÁVEL ou NÃO VULNERÁVEL para cada tipo de banco de dados✅ Vantagens:
📋 Caso de Uso: Avaliação de primeira passagem para determinar se o alvo é vulnerável.
exploit.py – Analisador de Segurança AbrangentePropósito: Explorar completamente a vulnerabilidade para extrair informações do banco de dados.
O que faz:
✅ Vantagens:
📋 Caso de Uso: Análise de segurança aprofundada após confirmação da vulnerabilidade.
🔍 Diferença Chave:
verifier.pyinforma se está vulnerável;exploit.pymostra o que pode ser extraído. Ambos desempenham papéis distintos, mas complementares, em um fluxo de trabalho de avaliação de segurança.
requestspip install requests
Edite as seguintes variáveis no início de ambos os scripts:
| Variável | Descrição | Padrão |
|---|---|---|
TARGET | URL da API do Fineract | http://localhost:8080/fineract-provider/api/v1/offices |
USERNAME | Nome de usuário para autenticação na API | mifos |
PASSWORD | Senha para autenticação na API | password |
TENANT_ID | Identificador do tenant | default |
BASE_SLEEP | Duração do sono para testes baseados em tempo (exploit.py) | 6 |
SLEEP_SECONDS | Duração do sono para testes baseados em tempo (verifier.py) | 5 |
TIMEOUT | Tempo limite da requisição HTTP | 25 (exploit) / 15 (verifier) |
MAX_RETRIES | Número de tentativas para requisições falhas | 2 |
1️⃣ exploit.py – Varredura Profunda
python3 exploit.py
Saída Esperada:
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.
2️⃣ exploit.py – Extração de Dados
python3 exploit.py
A saída mostrará extração progressiva em formato de barra de progresso.
Pontuação CVSS
| Métrica | Valor |
|---|---|
| Pontuação Base CVSS v3.1 | 8.1 (Alta) |
| Vetor | CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:H |
| Vetor de Ataque | Rede |
| Privilégios Necessários | Baixo |
| Interação do Usuário | Nenhum |
| Pontuação EPSS |
0.29% (probabilidade de exploração em 30 dias)
Mapeamento CWE
CWE‑89: Neutralização Incorreta de Elementos Especiais usados em um Comando SQL ('Injeção SQL')
Por que o Payload Funciona
O código vulnerável no 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
}
Exemplo de Payload do Atacante:
GET /api/v1/offices?orderBy=(SELECT CASE WHEN (1=1) THEN pg_sleep(5) ELSE pg_sleep(0) END)&limit=1
SQL Resultante:
SELECT * FROM offices ORDER BY (SELECT CASE WHEN (1=1) THEN pg_sleep(5) ELSE pg_sleep(0) END)
O ColumnValidator verifica nomes de colunas, mas ignora a subconsulta aninhada, permitindo a execução arbitrária de SQL.
| Ação | Prioridade |
|---|---|
| Atualizar para Apache Fineract 1.15.0+ | 🔴 Crítica |
| Aplicar o patch PR #6048 | 🔴 Crítica |
Regra WAF: Bloquear orderBy contendo (SELECT, SLEEP(, pg_sleep(, WAITFOR | 🟠 Alta |
Monitorar logs para orderBy com parênteses ou palavras-chave de subconsulta | 🟠 Alta |
| Monitoramento do pool de conexões do banco de dados para detectar exaustão de recursos | 🟡 Média |