Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!
NotCVE-2026-0014 — Proof-of-concept e advisory per una path traversal CWE-22 nel gestore drag-and-drop di InputLeap, con passaggi di riproduzione, script di exploit e indicazioni di remediation. | Kitploit
Proof-of-concept e advisory per una path traversal CWE-22 nel gestore drag-and-drop di InputLeap, con passaggi di riproduzione, script di exploit e indicazioni di remediation.
Prodotto: InputLeap v3.0.3 Fornitore: input-leap Vulnerabilità: Path Traversal CWE: CWE-22 Limitazione impropria di un percorso a una directory ristretta ('Path Traversal')
Descrizione
Il gestore del drag-and-drop di InputLeap tenta di sanificare i nomi dei file individuando l'ultimo separatore di percorso e mantenendo solo la parte successiva. Quando non viene trovato alcun separatore, la ricerca sulla stringa C++ restituisce un valore sentinella speciale chiamato npos per indicare un fallimento. Tuttavia, il codice non verifica mai questo sentinella prima di utilizzare il risultato in calcoli aritmetici. Poiché npos è definito come il più grande intero senza segno possibile, sottraendolo si verifica un wraparound silenzioso che produce una risposta dall'aspetto valido ma completamente errata: invece di restituire solo il nome del file, restituisce l'intera stringa originale non sanificata. Un attaccante può sfruttare questo comportamento creando un messaggio in cui una voce è priva di separatore mentre un'altra ne contiene uno non corrispondente — l'euristica globale di rilevamento dei separatori del codice si inverte, la ricerca fallisce silenziosamente e ....\AppData...\Startup\evil.exe passa inalterato. Quella stringa viene poi concatenata alla directory di destinazione e consegnata al sistema operativo, che interpreta le sequenze .. e scrive il file al di fuori della cartella prevista. La vulnerabilità esiste perché manca un controllo difensivo per il caso "non trovato".
Passaggi per la riproduzione
Abilitare --enable-drag-drop sul target (opt-in, disattivato per impostazione predefinita).
In qualità di peer connesso, avviare un messaggio di trasferimento file tramite drag-and-drop i cui dati del nome file incorporato contengano un carattere "/" da qualche parte nel buffer (per forzare slash="/") mentre il segmento effettivo del nome file utilizza separatori "\", ad esempio incorporando uno "/" estraneo all'inizio del blob di dati e un nome file "..\..\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\evil.exe".
find_last_of(slash, ...) di DragInformation::parseDragInfo restituisce npos per la porzione del nome file separata da "\", causando un wraparound aritmetico senza segno e restituendo il percorso completo non troncato.
DropHelper::writeToDir concatena questo percorso alla directory di destinazione del drop dell'utente (predefinita Desktop) e scrive il file senza alcuna canonicalizzazione, facendolo finire nella cartella Startup.
Al login successivo, evil.exe viene eseguito come utente vittima.
Un attaccante può sfruttare questa vulnerabilità per caricare un file in un percorso arbitrario al di fuori della cartella predefinita o assegnata. Ciò potrebbe portare all'esecuzione di codice
Remediation suggerita
In DragInformation::parseDragInfo, sostituire l'euristica di rilevamento dello slash con std::filesystem::path(filename).filename() per garantire che venga estratto solo il basename.
In DropHelper::writeToDir, canonicalizzare il percorso finale con std::filesystem::canonical e rifiutare se non inizia con destination.
Rifiutare i nomi file contenenti "..", byte NUL, lettere di unità (X:) o separatori iniziali.
Cronologia della divulgazione
27 luglio 2026 -- Tentativo di segnalazione al progetto InputLeap, ma il giorno prima del mio contatto il progetto è stato archiviato. Segnalato a NotCVE.