VDB

GCVE-110-OSM-2026-14716

GCVE-110-OSM-2026-14716
Advisory PublishedCVSS 9.6/10
Vulnetix · Advisory published November 7, 2026
Standalone RubyGems package posing as a string helper library that runs a self-propagating credential-stealing worm when it is installed. It steals cloud, CI, package registry, SSH, AI coding tool and wallet credentials, republishes itself into other packages with stolen registry tokens, installs a persistent backdoor, poisons AI coding tool configuration, and deletes the user's home directory if a stolen GitHub token is revoked. It is a later build of the Miasma-family (testmetest) worm that descends from TeamPCP's open-sourced Mini Shai-Hulud worm. Removing the gem does not remove the infection. ## Payload 1: install-time loader Malicious payload found in: `ext/strutil-core/extconf.rb` - Trigger: RubyGems runs the native extension script during `gem install` or `bundle install`. The gem does not need to be required. - Behavior: On Linux and macOS (x86-64 and ARM64) it creates `/tmp/.b_<pid>`, downloads Bun 1.2.18 from the official oven-sh GitHub releases, and runs `ext/strutil-core/index.js` with it. It then writes a Makefile with empty targets so the install finishes without errors. - Note: the file is identical to the output of the worm's own RubyGems injection module, and the gem's `VERSION` constant still says 1.0.0 inside the 1.0.1 release. ## Payload 2: worm bundle Malicious payload found in: `ext/strutil-core/index.js` - Size and obfuscation: 5.48 MB Bun bundle with a rotated string table, a PBKDF2-keyed string cipher, and AES-256-GCM encrypted embedded components. - Locale check: exits on Russian, Belarusian, Kazakh, Uzbek, Kyrgyz, Tajik, Armenian, Azerbaijani, Ukrainian, Georgian, Turkmen and Moldovan locales. - Collection: AWS, Azure, Google Cloud, Kubernetes, Vault, npm, PyPI, RubyGems, Docker, SSH, password managers, keychains, wallets and AI coding tool credential files (for example `.claude/.credentials.json` and `.codex/auth.json`). - GitHub Actions: reads the Runner.Worker process memory through `/proc/<pid>/mem`, kills the StepSecurity Harden-Runner container, grants the runner passwordless sudo, and redirects stepsecurity[.]io hostnames to localhost. - Exfiltration: results are encrypted and posted to `hxxps://paleasbest[.]top/v1/api`. Fallbacks are a public GitHub repository described as `project-utils` with a generated adjective-noun-number name, or GitLab. Commits carrying stolen tokens use the `AutoSyncComplete` prefix. - Propagation: republishing routines for RubyGems, npm and PyPI, JFrog Artifactory, GitHub and GitLab spreading, a fake CodeQL workflow that uploads secrets as an artifact, and SSH spreading through `known_hosts`. - Persistence: `~/.local/share/runtimes/sync.py` registered as the `pkg-runtime` systemd user service or `com.user.pkg-runtime` LaunchAgent. It polls public GitHub commits for the marker `msync-3f7a` and runs any script URL carrying a valid signature from the threat actor. - AI tool poisoning: adds a `workspace-tools` MCP server and SessionStart hooks to local configs, and commits `.github/init.js`, `.claude/settings.json`, `.cursor/mcp.json`, `CLAUDE.md`, `AGENTS.md` and a `.vscode/tasks.json` task into repositories reachable with stolen Git credentials. - Wiper: when a stolen GitHub token is accepted, `net-health-checker` checks it against the GitHub API every 45 seconds for 48 hours. A 401 or 403 response runs `rm -rf ~/; rm -rf ~/Documents`. Stop `net-health-checker` and `pkg-runtime` before revoking the token.

Weaknesses (CWE)

CWE-506Embedded Malicious Code

Risk Scores

CVSS 3.1
9.6/10
Critical · CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:H/I:H/A:H

Affected Products

VendorProductVersionsPlatforms
unknownstrutil-coreall (affected)—

References

vendor

Browse GCVE Records

925 records in the GCVE database · Updated November 7, 2026

No matching records found.

Explore Further

Investigate this vulnerability in the interactive console or download the raw GCVE record.

$ Lookup Community · 50/day Open Lookup ›