Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!
NotCVE-2026-0014 — Prova de conceito e advisory para um path traversal CWE-22 no manipulador de arrastar e soltar do InputLeap, com etapas de reprodução, script de exploração e orientações de remediação. | Kitploit
Prova de conceito e advisory para um path traversal CWE-22 no manipulador de arrastar e soltar do InputLeap, com etapas de reprodução, script de exploração e orientações de remediação.
Produto: InputLeap v3.0.3 Fornecedor: input-leap Vulnerabilidade: Path Traversal CWE: CWE-22 Limitação Imprópria de um Nome de Caminho a um Diretório Restrito ('Path Traversal')
Descrição
O manipulador de arrastar-e-soltar do InputLeap tenta sanitizar nomes de arquivo encontrando o último separador de caminho e mantendo apenas a parte após ele. Quando nenhum separador é encontrado, a busca de string em C++ retorna um valor sentinela especial chamado npos para indicar falha. No entanto, o código nunca verifica esse sentinela antes de usar o resultado em cálculos aritméticos. Como npos é definido como o maior inteiro sem sinal possível, subtraí-lo causa wraparound silencioso e produz uma resposta aparentemente válida que está completamente errada: em vez de retornar apenas o nome do arquivo, ele retorna a string original inteira não sanitizada. Um atacante pode explorar isso criando uma mensagem onde uma entrada não possui separador enquanto outra contém um separador incompatível — a heurística global de detecção de separador do código é invertida, a busca falha silenciosamente, e ....\AppData...\Startup\evil.exe passa intacto. Essa string então é concatenada ao diretório de destino e entregue ao SO, que interpreta as sequências .. e grava o arquivo fora da pasta pretendida. A vulnerabilidade existe porque falta uma verificação defensiva para o caso de "não encontrado".
Passos para Reproduzir
Habilite --enable-drag-drop no alvo (opt-in, padrão DESLIGADO).
Como um peer conectado, inicie uma mensagem de transferência de arquivo por arrastar-e-soltar cujos dados de nome de arquivo embutidos contenham um caractere "/" em algum lugar do buffer (para forçar slash="/") enquanto o segmento real do nome do arquivo usa separadores "\", por exemplo, embutindo um "/" perdido anteriormente no blob de dados e um nome de arquivo de "..\..\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\evil.exe".
O find_last_of(slash, ...) de DragInformation::parseDragInfo retorna npos para a porção do nome de arquivo separada por "\", causando wraparound aritmético sem sinal e retornando o caminho completo não truncado.
DropHelper::writeToDir concatena esse caminho ao diretório de destino de soltar do usuário (padrão Desktop) e grava o arquivo sem canonicalização, colocando-o na pasta Startup.
No próximo login, evil.exe é executado como o usuário vítima.
Um atacante pode explorar essa vulnerabilidade para enviar um arquivo para um caminho arbitrário fora da pasta padrão ou atribuída. Isso pode levar à execução de código
Remediação Sugerida
Em DragInformation::parseDragInfo, substitua a heurística de detecção de barra por std::filesystem::path(filename).filename() para garantir que apenas o basename seja extraído.
Em DropHelper::writeToDir, canonicalize o caminho final com std::filesystem::canonical e rejeite se ele não começar com destination.
Rejeite nomes de arquivo contendo "..", bytes NUL, letras de unidade (X:), ou separadores iniciais.
Linha do Tempo de Divulgação
27 de julho de 2026 -- Tentativa de reportar ao projeto InputLeap, mas no dia anterior ao meu contato eles arquivaram o projeto. Reportado ao NotCVE.
24 de setembro de 2026 -- NotCVE-2026-0014 Publicado.