Skip to content
KitploitKITPLOIT
OutilsExploitsBlog
Log in
Soumettre
OutilsExploitsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

FluxContactConfidentialité© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
Outils/GitHubGitHub/abraxas/proftpd-rewrite-utf8trans
Analyse des VulnérabilitésExploitationFuzzingSécurité RéseauTests d'IntrusionAnalyse de BinairesLabs et Pratique
GitHubabraxas/proftpd-rewrite-utf8trans

proftpd-rewrite-utf8trans

ProFTPD 1.3.9d - Élevé - À distance - Crash - RewriteMap int:utf8trans Débordement BSS

Voir le dépôt
13il y a 9 joursPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

Abraxas Labs - proftpd-rewrite-utf8trans

abraxaslabs.tech  ·  github.com/abraxas  ·  @abraxas_null  ·  [email protected]  ·  proftpd-rewrite-utf8trans

Write-up : https://abraxaslabs.tech/research/proftpd-rewrite-utf8trans

proftpd-rewrite-utf8trans

Classe : Crash Portée : Distante

ProFTPD 1.3.9d (f59f248) - ProFTPD (proftpd.org)

Le module contrib mod_rewrite fournit RewriteMap int:utf8trans. Ce builtin copie un argument FTP du client (jusqu'à CommandBufferSize, 512 Kio) dans deux tampons BSS de 1024 emplacements sans limite de destination. Un long nom STOR ASCII provoque un WRITE global-buffer-overflow ASan de taille 8. Le processus enfant de session avorte. Le démon reste actif. Classe Crash. Pas de RCE.

IDpas encore de CVE
ClasseCrash
PortéeDistante (argument FTP transmis à int:utf8trans)
CWECWE-120
CVSSÉlevé : 7.5 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H si la RewriteRule est pré-authentification. Le labo a utilisé STOR après connexion, donc PR:L est honnête pour cette exécution (AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H).
ProduitProFTPD
Affecté1.3.9d (f59f248e26bdfa514443e42bf72a145641df635d) contrib mod_rewrite
Authle labo utilise STOR authentifié. Une RewriteRule pré-authentification sur USER ou similaire serait PR:N.
LicenceGNU Affero GPL v3.0
Labo127.0.0.1 uniquement

Ce qu'un attaquant peut faire

RewriteEngine est désactivé tant qu'il n'est pas configuré. Le motif documenté est RewriteRule (.*) ${map:$1}. Une fois qu'une RewriteRule transmet l'argument du client à int:utf8trans, une clé de plus de 1024 octets déborde deux tampons statiques dans le processus enfant de session.

MéthodePoint de chutePrivilège
Commande FTP dont l'argument est la clé de la map utf8trans, longueur > 1024rewrite_utf8_to_ucs4 puis utf8_val[i] = ucs4_longs[i]Disponibilité (prouvé en labo) : provoque le crash du processus enfant de session. ASan : global-buffer-overflow WRITE of size 8, puis ABORTING. Prefork : une nouvelle connexion fonctionnait toujours ; le démon est resté actif. Un STOR court de 200 octets ASCII a survécu. L'intégrité des données BSS de rewrite à proximité est déduite et dépend de la disposition du compilateur.
RIP / exécution de codeaucun revendiquéFermé. Aucune charge utile. Classe Crash. Pas de RCE.
Dépôt d'un RewriteMap via .ftpaccessCONF_DYNDIRFermé. RewriteMap n'est pas autorisé dans .ftpaccess.
Shell prg:pas de tel type de mapFermé. Le FIFO est de l'E/S ligne par ligne.

Prouvé en labo vs déduit : le WRITE ASan de taille 8, l'abandon du processus enfant de session, le contrôle survivant avec argument court et la connexion après déclenchement sont prouvés en labo. Le RIP/RCE n'est pas revendiqué.

L'issue 2173 a corrigé un OOB d'un octet dans int:unescape sur ce pin. Ce résidu concerne int:utf8trans. Builtin différent. Bug différent.

Comment je l'ai trouvé

J'ai épinglé le tag v1.3.9d de proftpd/proftpd. La récolte de CVE de 2026 et les issues GitHub publiques encore présentes dans cette archive (2170, 2173, 2175, 2180, 2095, 2256, 2286, 2319, 2330, 2301) constituaient la liste d'exclusion. Le cœur FTP par défaut avec l'exemple basic.conf ne m'a pas donné de Crit/High non publié. Le module contrib rewrite, si.

rewrite_map_int_utf8trans (contrib/mod_rewrite.c) contient :

static unsigned char utf8_val[PR_TUNABLE_BUFFER_SIZE];   /* 1024 */
static unsigned long ucs4_longs[PR_TUNABLE_BUFFER_SIZE]; /* 1024 */
ucs4strlen = rewrite_utf8_to_ucs4(ucs4_longs, strlen(key), (unsigned char *) key);

rewrite_utf8_to_ucs4 écrit un unsigned long par octet ASCII avec aucune limite. PR_TUNABLE_CMD_BUFFER_SIZE vaut 512 KiB. L'issue 2173 a déjà corrigé l'unescape. Cette table n'était pas incluse dans ce correctif.

Fausses pistes : considérer la 2173 comme ce bug ; affirmer un RIP parce qu'ASan a signalé un WRITE de taille 8 ; espérer que .ftpaccess puisse implanter un RewriteMap. La première concerne une fonction différente. La deuxième reste un Crash. La troisième relève de CONF_DYNDIR.

ASan plus la libcrypt standard provoquent un SIGSEGV sur PASS avant le point de sortie du rewrite. Le lab précharge un petit stub crypt(3) pour que le login fonctionne. Ce stub n'est pas un exploit.

Lab

python3 proftpd-rewrite-utf8trans-Abraxas-Labs.py

ou :

cd lab
./run.sh

Loopback 127.0.0.1:18740 plus passif 18741-18750. Projet Compose proftpd-rewrite-utf8trans. Témoin PROFTPD-REWRITE-UTF8TRANS-WITNESS. L'image est une compilation ASan de mod_rewrite de la version 1.3.9d. Le contrôle d'un STOR de 200 octets ASCII réussit. Un STOR de 2048 octets ASCII provoque un global-buffer-overflow WRITE de taille 8 sous ASan et le processus enfant de session s'interrompt. Une nouvelle connexion après le déclenchement fonctionne toujours.

SUCCESS PROFTPD-REWRITE-UTF8TRANS asan=global-buffer-overflow write=yes child-dead=yes PROFTPD-REWRITE-UTF8TRANS-WITNESS

Le correctif

Limiter la longueur de destination de rewrite_utf8_to_ucs4 à PR_TUNABLE_BUFFER_SIZE-1. Cesser d'écrire au-delà de ucs4_longs / utf8_val. Rejeter ou tronquer une clé de mappage qui ne tient pas.

Références

  • github.com/proftpd/proftpd tag v1.3.9d (f59f248e26bdfa514443e42bf72a145641df635d)
  • contrib/mod_rewrite.c rewrite_utf8_to_ucs4 / rewrite_map_int_utf8trans
  • Correctif voisin (pas cette table de mappage) : Issue 2173 int:unescape
  • CWE-120

Licence

GNU Affero GPL v3.0. Voir LICENSE. Laboratoire en boucle locale uniquement. Aucune garantie.

Télécharger l’outil