
CVE-2026-40987 PoC
Questo repository è una PoC di riproduzione minima della
CVE-2026-40987, pubblicata tramite l'avviso di sicurezza ufficiale di 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:LIl remote-file synchronizer di Spring Integration poteva utilizzare il nome file fornito dal server remoto così com'era durante la creazione del percorso di salvataggio locale. Se la verifica del percorso canonico non era sufficiente, un server FTP/SFTP/SMB dannoso o compromesso poteva restituire un nome file come ../escaped-by-ftp-list.txt e indurre la scrittura di file al di fuori della localDirectory configurata.
Secondo l'avviso ufficiale, il problema non riguarda solo FTP, ma l'intera famiglia di sincronizzazione dei file remoti FTP/SFTP/SMB di Spring Integration. Questa PoC riproduce lo stesso percorso vulnerabile nel modo più piccolo e chiaro possibile utilizzando FtpInboundFileSynchronizer.
Prodotti interessati secondo l'avviso ufficiale:
Versioni interessate:
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.20Versioni corrette:
7.0.5 oppure 7.0.4.16.5.9 oppure 6.5.8.16.4.126.3.155.5.21Il test mostra due percorsi.
SpringIntegrationRemoteFilePathTraversalTest
../escaped-by-spring-integration.txt, il percorso del file viene creato al di fuori della directory locale configurata.SpringIntegrationFtpPathTraversalTest
../escaped-by-ftp-list.txt nella risposta LIST del server FTP.FtpInboundFileSynchronizer di Spring Integration riceva questo nome file, scarichi incoming/../escaped-by-ftp-list.txt e che il file risultante venga creato al di fuori della directory downloads.Il flusso principale della PoC è il seguente.
configured localDirectory = <temp>/downloads
remote LIST filename = ../escaped-by-ftp-list.txt
resulting local path = <temp>/downloads/../escaped-by-ftp-list.txt
normalized location = <temp>/escaped-by-ftp-list.txt
In pratica, è possibile scrivere file al di fuori della directory di download prevista dall'applicazione.
Windows:
.\mvnw.cmd test
macOS/Linux:
./mvnw test
Risultato atteso con una versione vulnerabile:
Tests run: 3, Failures: 0, Errors: 0, Skipped: 0
BUILD SUCCESS
Il successo del test significa che "il comportamento vulnerabile è stato riprodotto". In altre parole, con dipendenze vulnerabili il test passa e dimostra la scrittura tramite uscita dalla directory.
È possibile verificare diverse versioni vulnerabili con i seguenti comandi.
.\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
Il valore predefinito di questo repository è spring-integration.version=7.0.4.
Questa vulnerabilità consente a un attaccante di scrivere contenuti controllati dall'attaccante nel filesystem locale dell'applicazione client. L'attaccante non è un normale client HTTP, ma deve poter manipolare le risposte del server di file remoto che l'applicazione interroga e di cui si fida.
I prerequisiti quindi esistono, ma se le condizioni sono soddisfatte sono possibili i seguenti impatti.
L'avviso ufficiale ha valutato questo problema come High.
L'avviso ufficiale di Spring attribuisce la segnalazione responsabile ai seguenti ricercatori.