Malicious code in sysdo (npm)
The npm package sysdo was published with malicious code that installs a Windows surveillance harness disguised as a system configuration tool. The payload captures keyboard input, clipboard contents, screenshots, and UI text, exfiltrating data to a hardcoded endpoint controlled by the attacker.
- Disclosed
- Last updated
- Blast radius
- Windows systems running Node.js that installed the sysdo package
- Ecosystems
- Attack vectors
- Affected entities
- sysdonpm package published as 'System binary configuration tool' containing Windows surveillance harness
The npm package sysdo was identified as containing malicious code that contradicts its declared purpose as a 'System binary configuration tool'. The package's entry point (index.js) silently installs Python 3.12.3 via winget or direct download to %TEMP%, then uses pip to install a surveillance stack including pyperclip, keyboard, mss, pyautogui, pywin32, and uiautomation.
The malicious payload (pointer.py) registers global keyboard hooks and hotkeys to capture keyboard input, extracts clipboard contents via pyperclip, takes screenshots using mss/ImageGrab, and walks UI-automation trees to extract on-screen text. All captured data is exfiltrated via HTTP POST to a hardcoded endpoint at https://iq-sec.vercel.app/api.
The package creates borderless topless windows with empty titles and implements a 'panic_exit' hotkey for covert operation. It can inject text back into the active window via pyautogui, providing operator-assist capability. A bundled start_tool.vbs script uses Shell.Application.ShellExecute to launch the surveillance code with a hidden window (mode 0), ensuring no visible console appears to the user.
The installation process is explicitly designed to avoid user detection, using /quiet flags and comments referencing a 'Ghost Install (No UI, No Admin Popup)'. The exfiltration destination is hardcoded to an author-controlled endpoint rather than any installer-configurable target, confirming malicious intent.
Indicators of compromise
- Packages
- sysdo
- Domains
- iq-sec.vercel.app
Remediation
- Immediately uninstall the sysdo package from all systems using 'npm uninstall sysdo'
- Audit npm package.json files and lock files for any references to sysdo and remove them
- Scan affected Windows systems for the presence of Python 3.12.3 in %TEMP% and any running pointer.py processes
- Review system logs for suspicious keyboard hook registration, clipboard access, and screenshot capture activity
- Check for network connections to https://iq-sec.vercel.app and block this domain at the firewall level
- Rotate any credentials or sensitive information that may have been captured during the compromise
- Review npm account security and enable 2FA on all npm accounts with publishing rights
- Monitor for similar malicious packages with similar surveillance capabilities
Sources
- GitHub Advisory GHSA-h93v-w5cq-82r4 · GitHub Advisory Database
Cite this entry
"Malicious code in sysdo (npm)." supplychainattack.org, Supply Chain Attack Incident Catalog. Disclosed August 19, 2026; last updated August 19, 2026. https://supplychainattack.org/incident/malicious-code-in-sysdo-npm-h002mj
Suggest a correction
Found an error or have a newer source? Corrections to factual errors take priority over new entries.
Related incidents
- resolvedcritical
Malicious code in express-route-engine (npm)
The npm package express-route-engine contains malicious code that fetches and executes arbitrary JavaScript from a remote JSON store (https://api.jsonbin.io/v3/b/6a4f5816f5f4af5e29762c92) on require/import, with full Node.js privileges. The payload is mutable and can be changed without republishing the package.
npmCompromised packageMalicious maintainer - containedcritical
Malicious code in twapfetch (npm)
twapfetch@1.1.0 on npm contains a malicious postinstall script that downloads and executes arbitrary code from a mutable, author-controlled URL with no integrity verification. The package misrepresents its purpose (claiming to be a Polymarket Chainlink TWAP client) while actually shipping Kelly-stake math helpers and a remote-bundle loader.
npmCompromised packageMalicious maintainer - resolvedcritical
Malicious code in blekit (npm)
The npm package blekit contained malicious code that silently exfiltrated application logs, GPS coordinates, device identifiers, and security posture to an attacker-controlled Telegram channel. The package re-exported logger functions that POSTed all logged strings to Telegram, and exposed device-info helpers that gathered and transmitted precise location and device metadata without user or developer consent.
npmCompromised packageMalicious maintainer - resolvedcritical
Malicious code in vite-vue-path-map (npm)
The npm package vite-vue-path-map contained malicious code that injected obfuscated JavaScript into production builds. The injected code sent beacons to an attacker-controlled domain and could remotely deface any site built with the compromised plugin.
npmCompromised packageMalicious maintainer