
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')
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".
/src/lib/inputleap/DragInformation.cpp
/src/lib/inputleap/DropHelper.cpp
Uma POC foi fornecida que suporta conexões TLS e sem criptografia com o servidor.
input-leap-directory-traversal-poc.py
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