
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')
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".
/src/lib/inputleap/DragInformation.cpp
/src/lib/inputleap/DropHelper.cpp
È stato fornito un POC che supporta connessioni TLS e senza crittografia al server.
input-leap-directory-traversal-poc.py
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