惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

H
Hackread – Cybersecurity News, Data Breaches, AI and More
Security Archives - TechRepublic
Security Archives - TechRepublic
I
Intezer
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
C
CXSECURITY Database RSS Feed - CXSecurity.com
A
Arctic Wolf
T
Threatpost
P
Proofpoint News Feed
AWS News Blog
AWS News Blog
C
Cybersecurity and Infrastructure Security Agency CISA
G
GRAHAM CLULEY
Cisco Talos Blog
Cisco Talos Blog
Simon Willison's Weblog
Simon Willison's Weblog
L
Lohrmann on Cybersecurity
Scott Helme
Scott Helme
T
Tenable Blog
L
LINUX DO - 最新话题
Help Net Security
Help Net Security
WordPress大学
WordPress大学
Hacker News: Ask HN
Hacker News: Ask HN
人人都是产品经理
人人都是产品经理
MyScale Blog
MyScale Blog
Recent Commits to openclaw:main
Recent Commits to openclaw:main
D
Darknet – Hacking Tools, Hacker News & Cyber Security
Recent Announcements
Recent Announcements
Vercel News
Vercel News
The Hacker News
The Hacker News
J
Java Code Geeks
博客园 - 【当耐特】
D
Docker
V
V2EX
H
Heimdal Security Blog
GbyAI
GbyAI
博客园 - 叶小钗
Google DeepMind News
Google DeepMind News
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
N
News | PayPal Newsroom
The Register - Security
The Register - Security
The Cloudflare Blog
C
CERT Recently Published Vulnerability Notes
T
The Blog of Author Tim Ferriss
博客园 - Franky
MongoDB | Blog
MongoDB | Blog
SecWiki News
SecWiki News
S
Secure Thoughts
Attack and Defense Labs
Attack and Defense Labs
Microsoft Security Blog
Microsoft Security Blog
S
Schneier on Security
Latest news
Latest news
Project Zero
Project Zero

Step Security Blog

Announcing Dependabot Configuration Enhancements: Cooldown and Group Support - StepSecurity Securing Vibe Coding and AI Coding Agents: An End-to-End Approach with StepSecurity - StepSecurity Introducing StepSecurity Dev Machine Guard: Protecting Developer Machines from Supply Chain Attacks - StepSecurity Top 2024 Predictions for CI/CD Security - StepSecurity Dev Machine Guard Is Now Open Source: See What's Really Running on Your Developer Machine - StepSecurity Datadog's DevSecOps 2026 Report Validates What We've Been Building - StepSecurity hackerbot-claw: An AI-Powered Bot Actively Exploiting GitHub Actions - Microsoft, DataDog, and CNCF Projects Hit So Far - StepSecurity Cline Supply Chain Attack Detected: cline@2.3.0 Silently Installs OpenClaw - StepSecurity StepSecurity’s Unified Protection Across the SDLC Infrastructure Threat Framework (SITF) - StepSecurity @velora-dex/sdk Compromised on npm: Malicious Version Drops macOS Backdoor via launchctl Persistence - StepSecurity axios Compromised on npm - Malicious Versions Drop Remote Access Trojan - StepSecurity Behind the Scenes: How StepSecurity Detected and Helped Remediate the Largest npm Supply Chain Attack - StepSecurity 10 Layers Deep: How StepSecurity Stops TeamPCP's Trivy Supply Chain Attack on GitHub Actions - StepSecurity Malicious IoliteLabs VSCode Extensions Target Solidity Developers on Windows, macOS, and Linux with Backdoor - StepSecurity TeamPCP Plants WAV Steganography Credential Stealer in telnyx PyPI Package - StepSecurity litellm: Credential Stealer Hidden in PyPI Wheel - StepSecurity Checkmarx KICS GitHub Action Compromised: Malware Injected in All Git Tags - StepSecurity Trivy Compromised a Second Time - Malicious v0.69.4 Release, aquasecurity/setup-trivy, aquasecurity/trivy-action GitHub Actions Compromised - StepSecurity bittensor-wallet 4.0.2 Compromised on PyPI - Backdoor Exfiltrates Private Keys - StepSecurity Malicious npm Releases Found in Popular React Native Packages - 130K+ Monthly Downloads Compromised - StepSecurity Malicious Polymarket Bot Hides in Hijacked dev-protocol GitHub Org and Steals Wallet Keys - StepSecurity ForceMemo: Hundreds of GitHub Python Repos Compromised via Account Takeover and Force-Push - StepSecurity xygeni-action Compromised: C2 Reverse Shell Backdoor Injected via Tag Poisoning - StepSecurity kubernetes-el Compromised: How a Pwn Request Exploited a Popular Emacs Package - StepSecurity How StepSecurity Caught a Release Storm in Microsoft’s @types Packages - StepSecurity Harden Runner Now Supports Windows and macOS GitHub Actions Runners - StepSecurity 10,000 Open-Source Projects Now Secured by Harden-Runner Community-Tier: A Milestone Three Years in the Making - StepSecurity 20+ Popular NPM Packages Compromised (Chalk, Debug, Strip-ANSI, Color-Convert, Wrap-ANSI...) - StepSecurity 2024 in Review: The Evolution of CI/CD Security & What's Next - StepSecurity How to Use Docker in Actions Runner Controller (ARC) Runners Securely - StepSecurity Celebrating 1000 Repositories Secured with Harden Runner: A Journey of Growth and Collaboration - StepSecurity StepSecurity Detects Early Supply Chain Risk Signals in kilocode npm - StepSecurity Another npm Supply Chain Attack: The 'is' Package Compromise - StepSecurity anthropics/claude-code-action Security: How to Secure Claude Code in GitHub Actions with Harden-Runner - StepSecurity Harden-Runner detection: tj-actions/changed-files action is compromised - StepSecurity StepSecurity's Catalog of Fixes - StepSecurity Orchestrating Security: StepSecurity's Impact on 400+ Repositories and Future Plans - StepSecurity Announcing Anomalous Outbound Call Detection Using Machine Learning - StepSecurity Announcing GitHub Actions Advisor and StepSecurity Maintained Actions - StepSecurity Analysis of Backdoored XZ Utils Build Process with Harden-Runner - StepSecurity Announcing General Availability of Harden Runner - StepSecurity Milestone Achieved: 2500+ Public Repositories Secured with Harden-Runner - StepSecurity Build secretless CI/CD pipelines using wait-for-secrets - StepSecurity Introducing Apps & PATs: Centralized Visibility for GitHub Apps and Personal Access Tokens - StepSecurity CVE-2026-22709: Critical Sandbox Escape Vulnerability in vm2 - StepSecurity StepSecurity Now Supports Dark Mode - StepSecurity 2025 in Review: The Evolution of Supply Chain Security & What's Next - StepSecurity Bake Harden-Runner Into GitHub's Custom Runner Images for Organization-Wide CI/CD Security - StepSecurity StepSecurity Is Now Available on Azure Marketplace - StepSecurity Critical Remote Code Execution Vulnerabilities Discovered in React Server Components and Next.js - StepSecurity How Harden Runner Detected the Sha1-Hulud Supply Chain Attack in CNCF's Backstage Repository - StepSecurity Sha1-Hulud: The Second Coming - Zapier, ENS Domains, and Other Prominent NPM Packages Compromised - StepSecurity Supply Chain Security Alert: eslint-config-prettier Package Shows Signs of Compromise - StepSecurity 9,000 Open-Source Projects Now Secured by Harden-Runner - StepSecurity Shai-Hulud: Self-Replicating Worm Compromises 500+ NPM Packages - StepSecurity Introducing npm Package Search: Find Where Any Package Was Introduced Across Your GitHub Organizations - StepSecurity StepSecurity Is Sponsoring GitHub Universe 2025 - StepSecurity s1ngularity: Popular Nx Build System Package Compromised with Data-Stealing Malware - StepSecurity Introducing StepSecurity Threat Intelligence: Real-Time Supply Chain Attack Alerts for Your SIEM - StepSecurity 8,000 Strong: Harden-Runner's Growing Impact on CI/CD Security - StepSecurity Securing Google Gemini in GitHub Actions with Harden-Runner - StepSecurity GhostAction Campaign: Over 3,000 Secrets Stolen Through Malicious GitHub Workflows - StepSecurity Introducing the NPM Package Cooldown Check - StepSecurity Securing GitHub Copilot in GitHub Actions with Harden-Runner - StepSecurity Calculate Your CI/CD Security ROI with StepSecurity's New ROI Calculator - StepSecurity How StepSecurity Harden Runner Detected Unexpected Microsoft Defender Installation on GitHub-hosted Ubuntu Runners - StepSecurity StepSecurity Harden Runner: Detect source code tampering during the build process - StepSecurity Suspicious Tag Movement in AWS’s GitHub Action: What Happened and Why It Matters - StepSecurity When 'Changed Files' Changed Everything: Our Black Hat 2025 Presentation on the tj-actions Supply Chain Breach - StepSecurity Lessons from AWS CodeBuild’s Memory-Dump Incident (CVE-2025-8217) - StepSecurity Supply Chain Security Alert: num2words PyPI Package Shows Signs of Compromise - StepSecurity When AI Meets CI/CD: Coding Agents in GitHub Actions Pose Hidden Security Risks - StepSecurity The GitHub Warning Everyone Ignores: 'This Commit Does Not Belong to Any Branch' - StepSecurity 8 GitHub Actions Secrets Management Best Practices to Follow - StepSecurity reviewdog GitHub Actions are compromised - StepSecurity 7,000 Open-Source Projects Now Secured by Harden-Runner - StepSecurity Replace Third-Party Actions with StepSecurity Maintained Actions via Automated Pull Requests - StepSecurity StepSecurity Is Now Available on AWS Marketplace - StepSecurity Introducing StepSecurity Artifact Monitor: Detect Unauthorized Software Releases in minutes, not months - StepSecurity Introducing Workflow Run Policies: Guardrails for Blocking Non-Compliant GitHub Actions Runs - StepSecurity Harden-Runner Detects New Traffic to release-assets.githubusercontent.com Across Multiple Customers - StepSecurity Grafana GitHub Actions Security Incident - StepSecurity Export Harden-Runner Security Insights and Detections to Amazon S3 - StepSecurity Evolving Harden-Runner’s disable-sudo Policy for Improved Runner Security - StepSecurity Announcing Policy-Driven Automated Pull Requests for CI/CD Misconfiguration Remediation - StepSecurity Announcing StepSecurity’s Integration with RunsOn: Secure and Optimized CI/CD Pipelines - StepSecurity Secure Repo Just Got Better: New Features for GitHub Actions Security Best Practices - StepSecurity Why Compliance Auditors Are Looking at Your CI/CD Runners - And How to Prepare - StepSecurity Harden-Runner Flags Anomalous Outbound Call, Leading to Docker Documentation Update - StepSecurity StepSecurity Harden-Runner Now Secures GitHub Actions Workflows for Over 5,000 Open Source Projects - StepSecurity GitHub Actions Pwn Request Vulnerability - StepSecurity Prevent Ultralytics Style CI/CD Security Attacks with Network Security Controls - StepSecurity PyTorch Supply Chain Compromise - StepSecurity Unified Network Egress View: Centralize GitHub Actions Network Destinations for Your Enterprise - StepSecurity Uniting Developers and Security: Celebrating the Success of 500+ Open Source Projects Using StepSecurity's Orchestration Platform - StepSecurity 5 Effective Third-Party GitHub Actions Governance Best Practices - StepSecurity StepSecurity Recognized Among CRN’s "10 Hottest DevOps Startups Of 2024" - StepSecurity Streamline Your GitHub Actions Workflows with StepSecurity’s Latest Feature - StepSecurity StepSecurity Steps Up the Security Game with SOC 2 Type 2 Compliance - StepSecurity StepSecurity's Alignment with CISA's CI/CD Security Guidance - StepSecurity
CanisterWorm: How a Self-Propagating npm Worm Is Spreading Backdoors Across the Ecosystem - StepSecurity
2026-03-26 · via Step Security Blog

Following Trivy's compromise, StepSecurity's AI Package Analyst flagged suspicious new releases across multiple npm scopes — revealing CanisterWorm, a self-propagating npm worm deployed by the TeamPCP threat actor. The worm is a direct continuation of the second Trivy compromise (v0.69.4): attackers embedded a credential harvester in Trivy's CI/CD toolchain, stole npm tokens from affected pipelines, then used those tokens to publish backdoored patch versions across every namespace they could reach — including the @opengov scope (16+ packages).

Each compromised version installs a persistent Python backdoor via a postinstall hook, establishes a systemd user service for persistence without root, and polls a command-and-control endpoint hosted on the Internet Computer blockchain — making it highly resistant to takedown. A separate worm component harvests npm tokens from the victim machine and autonomously republishes the malware to every package it can reach, continuing the spread. A second-stage payload delivered via the C2 carries destructive Kubernetes capabilities and filesystem wipe logic for geopolitically targeted victims.

How We Detected It

StepSecurity's AI Package Analyst monitors every new npm publish in real time, comparing new versions against the full release history of each package to identify behavioral anomalies. Alerts began arriving for packages across multiple npm scopes — each flagged with the same consistent high-confidence signals

  • A postinstall script appeared for the first time in the package's history. Every prior version of @opengov/form-builder contained no install scripts. Version 0.12.3 added "postinstall": "node index.js" — code that executes automatically on every npm install before any human can review it.
  •  
  • A base64-encoded payload embedded in index.js. The file contains a hardcoded BASE64_PAYLOAD constant — the entire Python backdoor encoded as a single base64 string to evade static analysis. Standard scanners that don't decode embedded payloads would miss it entirely. The analyst decoded and analyzed it in full, revealing the C2 URL and execution logic.
  •  
  • Active credential harvesting. The decoded payload includes a findNpmTokens() function that reads npm authentication tokens from ~/.npmrc, project-level .npmrc, /etc/npmrc, environment variables, and a live npm config get query — passing them directly to a propagation script.

The same fingerprint repeated across multiple scopes. This was not a one-off account compromise — it was a coordinated worm deployment.

StepSecurity AI Package Analyst feed showing flagged packages across affected npm scopes

AI Package Analyst detailed report for @opengov/form-builder@0.12.3 — CRITICAL verdict, security score 0, full findings list

The Backstory: How CanisterWorm Gets In

To understand how so many npm scopes became infected, you need to understand how TeamPCP built this worm — and where it got the keys.

The Trivy Connection

In early March 2026, attackers with access to Aqua Security's GitHub organization published Trivy release v0.69.4 — a malicious binary with a hardcoded connection to the typosquat domain scan.aquasecurtiy.org. They also compromised the trivy-action and setup-trivy GitHub Actions, embedding credential-harvesting payloads that read CI/CD environment variables and runner process memory via /proc/<pid>/mem.

Trivy is used in a massive number of security scanning pipelines. Any workflow that ran the compromised action or binary during its exposure window had every secret in its environment — including NPM_TOKEN values — exfiltrated and encrypted with the attacker's RSA-4096 public key.

Those stolen npm tokens are CanisterWorm's fuel.

The Worm Deploys

With npm publishing credentials in hand, the attacker did not simply backdoor one or two high-profile packages and disappear. They deployed a self-replicating worm designed to maximize reach across every namespace those tokens could touch.

Inside CanisterWorm: How It Works

Stage 1 — The Postinstall Hook

The entry point is disarmingly simple. The compromised package versions add a postinstall script to package.json:

"scripts": {
  "postinstall": "node index.js"
}

This fires automatically on every npm install — before any application code runs, before any human reviews output. The victim only needs to install the package. There is nothing to click, no file to open, no permission to grant.

Stage 2 — Establishing Persistence

The index.js payload uses obfuscated Node.js to write a Python backdoor to disk. Two files are created:

  • ~/.local/share/pgmon/service.py — the Python implant
  •  
  • ~/.config/systemd/user/pgmon.service — a systemd user service configured with Restart=always

No root is required. The service starts automatically on login and restarts on failure, surviving reboots indefinitely. On a developer's machine that regularly runs npm install as part of normal work, this backdoor would be entirely invisible.

Stage 3 — The Internet Computer Canister C2

Once the systemd service is running, service.py begins polling a command-and-control endpoint hosted on the Internet Computer Protocol (ICP) blockchain:

https://tdtqy-oyaaa-aaaae-af2dq-cai.raw.icp0.io/

The implant checks in approximately every 50 minutes, downloads second-stage binaries to /tmp/pglog, and tracks what it has already retrieved in /tmp/.pg_state.

Why ICP? An Internet Computer canister has no central server to seize, no domain registrar to receive abuse complaints, no hosting provider to respond to a takedown. Traditional blocking and disruption approaches do not apply. The attacker deliberately chose this infrastructure to make the C2 channel resilient against the security community's response.

Stage 4 — Self-Propagation: The Worm Component

This is what makes CanisterWorm a worm and not just a backdoor. Before the Python service even starts polling its C2, a detached background process — deploy.js — gets to work on the victim's machine

     
  1. Credential harvest: Scans ~/.npmrc, environment variables (NPM_TOKEN, NPM_TOKENS), and npm config for publishing tokens
  2.  
  3. Scope enumeration: Queries npm to discover every package the stolen token can publish to
  4.  
  5. Version bump and republish: Increments the patch version of each discovered package, injects the CanisterWorm payload, and republishes with --tag latest
  6.  
  7. The worm spreads: Every new developer who installs those packages becomes a new victim — and a new propagation vector

This is how the @emilgroup and @opengov scopes became infected. A developer or CI/CD pipeline with access to those npm namespaces ran a compromised Trivy workflow. Their tokens were stolen. CanisterWorm did the rest.

Stage 5 — The Destructive Payload

The second-stage payload delivered via ICP is not passive. Depending on what the implant detects about its environment, the consequences range from credential theft to full infrastructure destruction.

EnvironmentTargetAction
Kubernetes clusterIranDeploy destructive DaemonSet across all nodes — deletes host filesystem, forces reboot
Kubernetes clusterOtherDeploy persistence backdoor DaemonSet
Non-KubernetesIranExecute rm -rf / --no-preserve-root
Non-KubernetesOtherExit silently — persistence backdoor remains active

For Kubernetes targets, the payload deploys a privileged DaemonSet — host-provisioner-iran — with tolerations: [operator: Exists] to guarantee scheduling on every node in the cluster. For victims outside the targeting window, the payload exits silently, leaving the persistence backdoor fully operational for future use.

Important: The silent exit for non-targeted victims does not mean safety. The systemd service and ICP polling backdoor remain fully active. The attacker retains access regardless of whether the destructive payload fires.

Indicators of Compromise

Network

     
  • tdtqy-oyaaa-aaaae-af2dq-cai.raw.icp0.io — ICP canister C2 endpoint
  •  
  • scan.aquasecurtiy.org — Trivy-stage exfiltration domain (typosquat of aquasecurity.org)

Host Artifacts

     
  • ~/.local/share/pgmon/service.py — Python implant (presence confirms malware executed)
  •  
  • ~/.config/systemd/user/pgmon.service — systemd persistence unit
  •  
  • /tmp/pglog — second-stage binary drop location (presence confirms C2 delivery)
  •  
  • /tmp/.pg_state — download state tracker

Kubernetes

     
  • DaemonSet host-provisioner-iran in kube-system
  •  
  • DaemonSet host-provisioner-std in kube-system

What You Should Do

If you have installed any package flagged in the AI Package Analyst feed:

     
  1. Check immediately for backdoor artifacts: ~/.local/share/pgmon/service.py and ~/.config/systemd/user/pgmon.service — their presence confirms the malware executed
  2.  
  3. Check for /tmp/pglog — its presence means a second-stage payload was downloaded and run
  4.  
  5. Rotate every npm token that was present on the affected machine or in any CI/CD environment that ran these packages
  6.  
  7. Rotate all other secrets (AWS credentials, Docker tokens, GitHub PATs) accessible at the time of installation — assume they were exfiltrated
  8.  
  9. Review outbound network logs for connections to tdtqy-oyaaa-aaaae-af2dq-cai.raw.icp0.io
  10.  
  11. Pin affected dependencies to the last confirmed clean version until maintainers publish remediated releases

StepSecurity provides end-to-end npm supply chain security across three pillars: Prevent, Detect, and Respond. Here's how each would have helped in this attack — and how they protect you against the next one. (Full documentation)

Prevent — Block Malicious Packages Before They Enter Your Codebase

  • npm Package Cooldown Check — Newly published npm packages are temporarily blocked during a configurable cooldown window. When a PR introduces or updates to a recently published version, the check automatically fails. Since most malicious packages are identified within 24 hours, this creates a crucial safety buffer. In this case, react-native-country-select@0.3.91 and react-native-international-phone-number@0.11.8 would have been blocked from any PR during the cooldown period.
  • npm Package Compromised Updates Check — StepSecurity maintains a real-time database of known malicious and high-risk npm packages, updated continuously — often before official CVEs. If a PR attempts to introduce a compromised package, the check fails and the merge is blocked.
  • Harden-Runner Egress Network Restrictions — Filters outbound network traffic during workflow execution, blocking all undeclared endpoints. Both DNS and network-level enforcement prevent covert data exfiltration — the Solana RPC polling and C2 payload fetch in this malware would have been blocked at the network level.

Detect — Continuous Visibility Across PRs, Repos, and Dev Machines

  • Threat Intelligence + AI Package Analyst — Continuously monitors the npm registry for suspicious releases. In this case, both packages were flagged within 5 minutes of publication, giving the team time to investigate, confirm malicious intent, and notify the maintainer before the packages could accumulate significant downloads.
  • npm Package Search — Search across all PRs in all repositories across your organization to find where a specific package was introduced. When a compromised package is discovered, instantly understand the blast radius — which repos, which PRs, and which teams are affected. This works across pull requests, default branches, and dev machines.
  • Harden-Runner Network Baselines — Automatically logs outbound network traffic per job and repository, establishing normal behavior patterns and flagging anomalies. Reveals whether malicious postinstall scripts executed exfiltration attempts or contacted suspicious domains.

Respond — Investigate Incidents and Assess Organization-Wide Impact

  • Threat Center — Real-time alerts about compromised packages, hijacked maintainers, and emerging attack campaigns delivered directly into existing SIEM workflows. Alerts include attack summaries, technical analysis, IOCs, affected versions, and remediation steps.
  • Coordinated Remediation — Combines threat intel, package search, and network baselines to create a prioritized list of affected repositories with consistent guidance, enabling coordinated fixes across dozens or hundreds of repositories simultaneously.

References