Overview
Cybersecurity researchers have flagged a new software supply chain attack codenamed SleeperGem that targets developers using the Ruby ecosystem. The campaign involves three malicious packages published to RubyGems, the primary package registry for the Ruby programming language, with the goal of delivering additional payloads to developer machines after installation.
The attack follows a well-established playbook of typosquatting and dependency confusion but introduces stealth mechanisms designed to delay detection — hence the "sleeper" designation.
The Three Malicious Packages
The rogue gems at the center of the SleeperGem campaign include:
| Package Name | Mimicking | Purpose |
|---|---|---|
git_credential_manager | Legitimate Git credential tooling | Initial access and persistence |
| (additional packages disclosed by researchers) | Various developer utilities | Payload staging and exfiltration |
These packages were crafted to impersonate commonly used or expected developer utilities, increasing the likelihood of accidental installation through typosquatting or dependency confusion attacks where a build system resolves to the malicious public package instead of a private internal one.
How SleeperGem Works
The attack chain unfolds in several stages:
1. Package Discovery and Installation
A developer installs one of the malicious gems, either by typo, dependency confusion, or through a transitive dependency chain where another package pulls in a compromised gem.
2. Dormant Activation (The "Sleeper" Mechanism)
Unlike many malicious packages that execute immediately on install, SleeperGem packages use delayed or conditional activation logic. The payload does not fire immediately upon gem install, reducing the chance of detection through install-time behavioral analysis.
3. Payload Retrieval
Once activated, the gem fetches additional payloads from attacker-controlled infrastructure. This keeps the initial package small, evades static analysis, and allows attackers to update payloads without re-publishing new gem versions.
4. Execution on Developer Machines
The retrieved payload executes with the same privileges as the developer's Ruby process, enabling:
- Credential theft: Access to SSH keys, API tokens,
.envfiles, and secrets stored in developer tools (AWS CLI, Git credentials, cloud provider configs) - Source code exfiltration: Copying local repository contents to attacker infrastructure
- Persistence: Installing backdoors that survive gem removal or project deletion
- Lateral movement prep: Harvesting credentials for cloud environments, CI/CD systems, or internal tooling that developers have access to
Why This Is Particularly Dangerous
Developers represent high-value targets in the modern threat landscape. Compromising a developer machine provides attackers with:
- Source code access: Intellectual property, proprietary algorithms, and pre-release features
- Cloud credentials: IAM roles, service account keys, and environment variables that provide access to production infrastructure
- CI/CD pipeline access: The ability to inject malicious code into build pipelines and, ultimately, production deployments
- Access to more targets: Developer machines often have broad internal network access and authentication to dozens of internal systems
A single compromised developer workstation can serve as the launchpad for a far more damaging supply chain attack downstream.
Indicators of Compromise
Organizations and developers should check their environments for:
- Installation of
git_credential_manageror similarly named gems that were not explicitly added to aGemfile - Unexpected network connections from Ruby processes to external infrastructure
- Anomalous file access patterns in home directories targeting
~/.ssh,~/.aws,~/.config, or.envfiles - New cron jobs, launch agents, or persistence mechanisms added around the time of gem installation
Run gem list to audit installed gems and cross-reference against your project's Gemfile.lock to identify unexpected packages.
Remediation Steps
If you believe you may have installed any of the SleeperGem packages:
- Immediately rotate all credentials accessible from the affected machine: API keys, SSH keys, cloud credentials, GitHub tokens, CI/CD secrets
- Audit recent git commits in any repositories accessed from the machine for unauthorized changes
- Review CI/CD pipeline logs for unexpected build steps or artifact modifications
- Uninstall the malicious gems:
gem uninstall <package-name> - Check for persistence mechanisms: Review cron jobs (
crontab -l), startup items, and shell configuration files for unexpected entries - Notify your security team and treat the machine as compromised until forensically cleared
Preventive measures going forward:
- Use
Gemfile.lockand pin versions: Always commit your lockfile and usebundle installwith--frozenin CI to prevent unexpected version resolution - Enable RubyGems MFA: Enable multi-factor authentication on your RubyGems account to prevent unauthorized gem publishing
- Audit transitive dependencies: Use
bundle exec bundle listto audit what's actually being installed, not just what's in yourGemfile - Private gem registry for internal packages: Use a private registry (Gemfury, JFrog Artifactory, GitHub Packages) for internal gems to prevent dependency confusion
- Behavioral monitoring on developer machines: Deploy EDR tools that alert on unexpected network connections or credential file access from scripting runtimes
The Broader Supply Chain Picture
SleeperGem is the latest in a growing wave of supply chain attacks targeting language-specific package ecosystems. This year alone has seen campaigns targeting npm (Node.js), PyPI (Python), and now RubyGems — a trend that shows no signs of slowing as attackers recognize the leverage that developer tooling provides.
For security teams, the message is increasingly clear: the package ecosystem is an attack surface that requires active defense, not just reactive response when a malicious package is discovered.