Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !
NotCVE-2026-0014 — Preuve de concept et avis pour une traversée de chemin CWE-22 dans le gestionnaire de glisser-déposer d'InputLeap, avec étapes de reproduction, script d'exploitation et conseils de remédiation. | Kitploit
Preuve de concept et avis pour une traversée de chemin CWE-22 dans le gestionnaire de glisser-déposer d'InputLeap, avec étapes de reproduction, script d'exploitation et conseils de remédiation.
Produit : InputLeap v3.0.3 Fournisseur : input-leap Vulnérabilité : Path Traversal CWE : CWE-22 Improper Limitation of a Pathname to a Restricted Directory ('Path Traversal')
Description
Le gestionnaire de glisser-déposer d'InputLeap tente d'assainir les noms de fichiers en recherchant le dernier séparateur de chemin et en ne conservant que la partie qui le suit. Lorsqu'aucun séparateur n'est trouvé, la recherche de chaîne C++ renvoie une valeur sentinelle spéciale appelée npos pour indiquer un échec. Cependant, le code ne vérifie jamais cette sentinelle avant d'utiliser le résultat dans des calculs arithmétiques. Comme npos est défini comme le plus grand entier non signé possible, sa soustraction provoque un débordement silencieux et produit une réponse d'apparence valide mais complètement erronée : au lieu de renvoyer uniquement le nom du fichier, elle renvoie la chaîne originale entière non assainie. Un attaquant peut exploiter cela en fabriquant un message où une entrée est dépourvue de séparateur tandis qu'une autre en contient un qui ne correspond pas — l'heuristique globale de détection de séparateur du code s'inverse, la recherche échoue silencieusement, et ....\AppData...\Startup\evil.exe passe sans être modifié. Cette chaîne est ensuite concaténée au répertoire de dépôt et transmise au système d'exploitation, qui interprète les séquences .. et écrit le fichier en dehors du dossier prévu. La vulnérabilité existe parce qu'une vérification défensive du cas « non trouvé » est absente.
Étapes de reproduction
Activer --enable-drag-drop sur la cible (opt-in, désactivé par défaut).
En tant que pair connecté, initier un message de transfert de fichier par glisser-déposer dont les données de nom de fichier intégrées contiennent un caractère « / » quelque part dans le tampon (pour forcer slash="/") tandis que le segment de nom de fichier réel utilise des séparateurs « \ », par exemple en intégrant un « / » isolé plus tôt dans le blob de données et un nom de fichier « ..\..\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\evil.exe ».
Le find_last_of(slash, ...) de DragInformation::parseDragInfo renvoie npos pour la portion de nom de fichier séparée par « \ », provoquant un débordement arithmétique non signé et renvoyant le chemin complet non tronqué.
DropHelper::writeToDir concatène ce chemin au répertoire de dépôt cible de l'utilisateur (Bureau par défaut) et écrit le fichier sans canonicalisation, le plaçant dans le dossier Startup.
À la prochaine connexion, evil.exe s'exécute en tant qu'utilisateur victime.
Un attaquant peut exploiter cette vulnérabilité pour téléverser un fichier vers un chemin arbitraire en dehors du dossier par défaut ou assigné. Cela pourrait mener à une exécution de code
Remédiation suggérée
Dans DragInformation::parseDragInfo, remplacer l'heuristique de détection de slash par std::filesystem::path(filename).filename() pour garantir que seul le nom de base est extrait.
Dans DropHelper::writeToDir, canonicaliser le chemin final avec std::filesystem::canonical et rejeter s'il ne commence pas par destination.
Rejeter les noms de fichiers contenant « .. », des octets NUL, des lettres de lecteur (X:), ou des séparateurs en début de chaîne.
Chronologie de divulgation
27 juillet 2026 -- Tentative de signalement au projet InputLeap, mais la veille de ma prise de contact, ils ont archivé le projet. Signalé à NotCVE.