
Proof-of-concept и рекомендации по устранению CWE-22 path traversal в обработчике drag-and-drop InputLeap, включая шаги воспроизведения, эксплойт-скрипт и рекомендации по исправлению.
Продукт: InputLeap v3.0.3
Поставщик: input-leap
Уязвимость: Обход пути
CWE: CWE-22 Некорректное ограничение имени пути ограниченным каталогом ('Обход пути')
Обработчик перетаскивания InputLeap пытается очистить имена файлов, находя последний разделитель пути и оставляя только часть после него. Когда разделитель не найден, поиск в строке C++ возвращает специальное сигнальное значение npos, указывающее на неудачу. Однако код никогда не проверяет это сигнальное значение перед использованием результата в арифметических вычислениях. Поскольку npos определён как наибольшее возможное беззнаковое целое, вычитание из него беззвучно вызывает переполнение и даёт правдоподобный, но совершенно неверный результат: вместо возврата только имени файла возвращается вся неочищенная исходная строка. Злоумышленник может воспользоваться этим, создав сообщение, в котором одна запись не содержит разделителя, а другая содержит несовпадающий — глобальная эвристика обнаружения разделителей в коде переключается, поиск беззвучно завершается неудачей, и ....\AppData...\Startup\evil.exe проходит без изменений. Затем эта строка конкатенируется с каталогом назначения и передаётся ОС, которая интерпретирует последовательности .. и записывает файл за пределами предполагаемой папки. Уязвимость существует из-за отсутствия защитной проверки случая "не найдено".
/src/lib/inputleap/DragInformation.cpp
/src/lib/inputleap/DropHelper.cpp
Предоставлен POC, который поддерживает TLS и соединения без шифрования с сервером.
Злоумышленник может воспользоваться этой уязвимостью для загрузки файла по произвольному пути за пределами папки по умолчанию или назначенной. Это может привести к выполнению кода