Skip to content
KitploitKITPLOIT
ToolsExploitsBlog
Log in
Submit
ToolsExploitsBlog
Submit

Hacking, PenTest, and Cybersecurity Tools for Your Security Arsenal!

Kitploit is a directory of hacking, cybersecurity, and pentesting tools. Discover the latest project updates to find vulnerabilities, analyze systems, automate testing, and strengthen your security.

··Feeds·Contact·Privacy·© 2026 Kitploit

Tool Directory

Categories

View all categories
Loading categories
NotCVE-2026-0014 — Proof-of-concept and advisory for a CWE-22 path traversal in InputLeap's drag-and-drop handler, with reproduction steps, exploit script, and remediation guidance. | Kitploit
Tools/GitHubGitHub/cduram/notcve-2026-0014
Vulnerability AnalysisExploitationWeb Application ExploitationInformation GatheringPenetration Testing
GitHubcduram/notcve-2026-0014

NotCVE-2026-0014

Proof-of-concept and advisory for a CWE-22 path traversal in InputLeap's drag-and-drop handler, with reproduction steps, exploit script, and remediation guidance.

View Repository
414h 6m agoNot yet reviewed

Most Popular

View all →

Discover the most used tools by our community.

Explore all tools

Browse our collection of tools

View all tools →
Share

Summary

Product: InputLeap v3.0.3
Vendor: input-leap
Vulnerability: Path Traversal
CWE: CWE-22 Improper Limitation of a Pathname to a Restricted Directory ('Path Traversal')

Description

InputLeap's drag-and-drop handler tries to sanitize filenames by finding the last path separator and keeping only the part after it. When no separator is found, the C++ string search returns a special sentinel value called npos to indicate failure. However, the code never checks for this sentinel before using the result in arithmetic calculations. Because npos is defined as the largest possible unsigned integer, subtracting it wraps around silently and produces a valid-looking answer that's completely wrong: instead of returning just the filename, it returns the entire unsanitized original string. An attacker can exploit this by crafting a message where one entry lacks a separator while another contains a mismatched one — the code's global separator-detection heuristic flips, the search fails silently, and ....\AppData...\Startup\evil.exe passes through untouched. That string then gets concatenated to the drop directory and handed to the OS, which interprets the .. sequences and writes the file outside the intended folder. The vulnerability exists because a defensive check for the "not found" case is missing.

Steps to Reproduce

  1. Enable --enable-drag-drop on the target (opt-in, default OFF).
  2. As a connected peer, initiate a drag-and-drop file-transfer message whose embedded filename data contains a "/" character somewhere in the buffer (to force slash="/") while the actual filename segment uses "\" separators, e.g. embedding a stray "/" earlier in the data blob and a filename of "..\..\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\evil.exe".
  3. DragInformation::parseDragInfo's find_last_of(slash, ...) returns npos for the "\"-separated filename portion, causing unsigned arithmetic wraparound and returning the full untruncated path.
  • DropHelper::writeToDir concatenates this path onto the user's drop-target directory (default Desktop) and writes the file with no canonicalization, landing it in the Startup folder.
  • At next login, evil.exe executes as the victim user.
  • Affected Code

    /src/lib/inputleap/DragInformation.cpp
    /src/lib/inputleap/DropHelper.cpp

    Proof-of-Concept or Go Home

    A POC has been provided that supports TLS and no crypto connections to the server.

    input-leap-directory-traversal-poc.py

    Impact

    An attacker can exploit this vulnerability to upload a file to an arbitrary path outside of the default or assigned folder. This could lead to code execution

    Suggested Remediation

    1. In DragInformation::parseDragInfo, replace the slash-detection heuristic with std::filesystem::path(filename).filename() to guarantee only the basename is extracted.
    2. In DropHelper::writeToDir, canonicalize the final path with std::filesystem::canonical and reject if it does not start with destination.
    3. Reject filenames containing "..", NUL bytes, drive letters (X:), or leading separators.

    Disclosure Timeline

    • July 27, 2026 -- Attempted to report to InputLeap project, but the day before I reached out they archived the project. Reported to NotCVE.
    • September 24, 2026 -- NotCVE-2026-0014 Published.
    Download Tool