
InputLeap의 드래그 앤 드롭 핸들러에서 발생하는 CWE-22 경로 순회 취약점에 대한 개념 증명 및 권고안으로, 재현 절차, 익스플로잇 스크립트, 그리고 완화 지침을 포함합니다.
제품: InputLeap v3.0.3
공급업체: input-leap
취약점: 경로 순회(Path Traversal)
CWE: CWE-22 제한된 디렉터리로의 경로명 제한 부적절('경로 순회')
InputLeap의 드래그 앤 드롭 핸들러는 마지막 경로 구분자를 찾아 그 뒤 부분만 유지하는 방식으로 파일명을 정제하려고 시도합니다. 구분자가 발견되지 않으면 C++ 문자열 검색은 실패를 나타내는 특수한 센티널 값인 npos를 반환합니다. 그러나 코드는 산술 계산에 그 결과를 사용하기 전에 이 센티널 값을 검사하지 않습니다. npos는 가능한 가장 큰 부호 없는 정수로 정의되므로, 이를 빼면 조용히 랩어라운드가 발생하여 완전히 잘못되었지만 그럴듯해 보이는 답을 만들어냅니다. 즉, 파일명만 반환하는 대신 정제되지 않은 원본 문자열 전체를 반환합니다. 공격자는 한 항목에는 구분자가 없고 다른 항목에는 일치하지 않는 구분자가 포함된 메시지를 조작하여 이를 악용할 수 있습니다. 코드의 전역 구분자 감지 휴리스틱이 뒤집히고, 검색이 조용히 실패하며, ....\AppData...\Startup\evil.exe가 그대로 통과합니다. 그런 다음 이 문자열이 드롭 디렉터리에 연결되어 OS에 전달되고, OS는 .. 시퀀스를 해석하여 의도한 폴더 밖에 파일을 씁니다. 이 취약점은 "찾을 수 없음" 경우에 대한 방어적 검사가 누락되어 있기 때문에 존재합니다.
/src/lib/inputleap/DragInformation.cpp
/src/lib/inputleap/DropHelper.cpp
서버에 대한 TLS 및 비암호화 연결을 지원하는 POC가 제공되었습니다.
공격자는 이 취약점을 악용하여 기본 또는 할당된 폴더 밖의 임의 경로에 파일을 업로드할 수 있습니다. 이는 코드 실행으로 이어질 수 있습니다