
CVE-2026-40987 PoC
Ce dépôt est une preuve de concept minimale et reproductible de CVE-2026-40987, divulguée par l'avis de sécurité officiel de Spring.
Remote-file synchronizer in Spring Integration writes server-supplied filename under localDirectory without canonicalizationAV:N/AC:H/PR:L/UI:R/S:C/C:L/I:H/A:LLe synchroniseur de fichiers distants de Spring Integration pouvait utiliser tel quel le nom de fichier fourni par le serveur distant lors de la création du chemin de stockage local. Si la validation du chemin canonique n'était pas suffisante, un serveur FTP/SFTP/SMB malveillant ou compromis pouvait renvoyer un nom de fichier comme ../escaped-by-ftp-list.txt et ainsi écrire des fichiers en dehors du localDirectory configuré.
D'après l'avis officiel, il ne s'agit pas uniquement d'un problème FTP, mais d'un problème concernant toute la famille de synchronisation de fichiers distants FTP/SFTP/SMB de Spring Integration. Cette preuve de concept utilise FtpInboundFileSynchronizer pour reproduire le même vecteur de vulnérabilité de la manière la plus petite et la plus claire possible.
Produits impactés selon l'avis officiel :
Versions impactées :
7.0.0 - 7.0.46.5.0 - 6.5.86.4.0 - 6.4.116.3.0 - 6.3.145.5.0 - 5.5.20Versions corrigées :
7.0.5 ou 7.0.4.16.5.9 ou 6.5.8.16.4.126.3.155.5.21Le test montre deux chemins.
SpringIntegrationRemoteFilePathTraversalTest
../escaped-by-spring-integration.txt, le chemin de fichier est créé en dehors du répertoire local configuré.SpringIntegrationFtpPathTraversalTest
../escaped-by-ftp-list.txt dans la réponse LIST du serveur FTP.FtpInboundFileSynchronizer réel de Spring Integration reçoit ce nom de fichier, télécharge incoming/../escaped-by-ftp-list.txt, et que le fichier résultant est créé en dehors du répertoire downloads.Le flux principal de la preuve de concept est le suivant :
localDirectory configuré = <temp>/downloads
nom de fichier LIST distant = ../escaped-by-ftp-list.txt
chemin local résultant = <temp>/downloads/../escaped-by-ftp-list.txt
emplacement normalisé = <temp>/escaped-by-ftp-list.txt
Autrement dit, il est possible d'écrire des fichiers en dehors du répertoire de téléchargement prévu par l'application.
Windows :
.\mvnw.cmd test
macOS/Linux :
./mvnw test
Résultat attendu avec une version vulnérable :
Tests run: 3, Failures: 0, Errors: 0, Skipped: 0
BUILD SUCCESS
Un test réussi signifie que « le comportement vulnérable a été reproduit ». Autrement dit, avec une dépendance vulnérable, le test réussit et démontre une écriture en dehors du répertoire.
Plusieurs versions vulnérables peuvent être testées avec les commandes suivantes :
.\mvnw.cmd "-Dspring-integration.version=6.4.10" test
.\mvnw.cmd "-Dspring-integration.version=6.5.8" test
.\mvnw.cmd "-Dspring-integration.version=7.0.4" test
.\mvnw.cmd "-Dspring-integration.version=7.1.0-RC1" test
La valeur par défaut de ce dépôt est spring-integration.version=7.0.4.
Cette vulnérabilité permet à un attaquant d'écrire du contenu contrôlé par l'attaquant sur le système de fichiers local de l'application cliente. L'attaquant doit pouvoir manipuler les réponses du serveur de fichiers distant que l'application interroge de manière fiable, et non un client HTTP classique.
Les prérequis existent donc, mais lorsque les conditions sont réunies, les impacts suivants sont possibles :
L'avis officiel a évalué ce problème comme High.
L'avis officiel de Spring mentionne que les chercheurs suivants ont signalé le problème de manière responsable :