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

推荐订阅源

Blog — PlanetScale
Blog — PlanetScale
B
Blog
A
About on SuperTechFans
大猫的无限游戏
大猫的无限游戏
爱范儿
爱范儿
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
H
Help Net Security
H
Hackread – Cybersecurity News, Data Breaches, AI and More
博客园 - 三生石上(FineUI控件)
有赞技术团队
有赞技术团队
酷 壳 – CoolShell
酷 壳 – CoolShell
WordPress大学
WordPress大学
IT之家
IT之家
D
Docker
Google DeepMind News
Google DeepMind News
罗磊的独立博客
T
The Blog of Author Tim Ferriss
aimingoo的专栏
aimingoo的专栏
博客园 - 叶小钗
Recent Announcements
Recent Announcements
阮一峰的网络日志
阮一峰的网络日志
D
DataBreaches.Net
博客园 - 司徒正美
Engineering at Meta
Engineering at Meta

Step Security Blog

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 CanisterWorm: How a Self-Propagating npm Worm Is Spreading Backdoors Across the Ecosystem - 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
actions-cool/issues-helper GitHub Action Compromised: All...
2026-05-19 · via Step Security Blog

The popular GitHub Action actions-cool/issues-helper has been compromised. Every existing tag in the repository has been moved to point to a imposter commits that does not appear in the action's normal commit history. That commit contains malicious code that exfiltrates credentials from CI/CD pipelines that run the action.

Because every tag now resolves to malicious commits, any workflow that references the action by version pulls the malicious code on its next run. Only workflows pinned to a known-good full commit SHA are unaffected.

A second action in the same organization, actions-cool/maintain-one-comment, has also been compromised by the same actor using the identical pattern - every tag moved to an imposter commit, same bun + Runner.Worker memory-read payload, and the same exfiltration domain t.m-kosche.com. Everything below about detection, IOCs, and remediation applies equally to maintain-one-comment. We have notified the maintainers via GitHub issue #11.

What Happened

  • An attacker gained the ability to move tags in the actions-cool/issues-helper repository.
  • All tags were re-pointed to a imposter commits - a commit that is not reachable from the action's default branch history.
  • That imposter commit contains malicious code that, when executed inside a GitHub Actions runner:
    • Downloads the bun JavaScript runtime to the runner.
    • Reads memory from the Runner.Worker process — the process that holds the workflow's decrypted secrets — to harvest credentials.
    • Makes an outbound HTTPS call to an attacker-controlled domain to exfiltrate the stolen data.

The actions-cool/issues-helper Tags page on GitHub. Every release tag was updated within the same hour

The imposter commit 1c9e803 with GitHub's own warning: it does not belong to any branch on the repository. Tags now resolve to this dangling commit.

You can see this behavior in a controlled Harden-Runner test run here: https://app.stepsecurity.io/github/actions-security-demo/compromised-packages/actions/runs/26056902433

Harden-Runner captured the bun download, the Runner.Worker memory read, and the outbound call to t.m-kosche.com.

Harden-Runner Insights flags the actions-cool/issues-helper@v3 step with an Imposter Commit badge and a Suspicious Processes warning the moment the workflow runs.

The malicious payload spawns python3 and reads /proc/2119/mem — the address space of the Runner.Worker process — to scrape decrypted secrets directly out of runner memory.

The bun runtime executes the action's index.js and spawns child processes that pull a GitHub auth token (gh auth token), escalate via sudo python3, and pipe the memory dump through tr/grep to extract anything tagged "isSecret":true.

Harden-Runner's network monitor catches the bun process making an anomalous outbound call to t.m-kosche.com — the destination for the exfiltrated secrets.

How StepSecurity Is Protecting Customers

1. Compromised Actions Policy — Blocks the Run

StepSecurity has added actions-cool/issues-helper to its Compromised Actions Policy. For any enterprise customer with this policy enabled, any workflow run that references this action will be blocked before it executes, preventing the malicious code from ever running in the customer's CI/CD environment.

A workflow run that referenced the compromised action was cancelled by stepsecurity-app[bot] before any malicious code could execute — the Compromised Actions Policy in action.

2. Harden-Runner Global Block List — Blocks the Exfiltration

StepSecurity has added the attacker's exfiltration domain to the Harden-Runner global block list. Any workflow protected by Harden-Runner will automatically block outbound connections to this domain - even in audit mode, and without any per-workflow configuration. This gives customers defense-in-depth: even if a compromised action somehow runs, the credentials cannot leave the runner.

The Harden-Runner organization baseline surfaces every job that has called t.m-kosche.com under the IOC matches view, labelled with the incident name — making it trivial to identify which workflows and runners need attention.

3. Imposter Commit Detection

StepSecurity's Action-Uses-Imposter-Commit detection flags any workflow that references a GitHub Action via a commit SHA (or via a tag that has been moved to a commit SHA) which does not match any legitimate tag or branch head of that action's repository - exactly the signature of this attack.

Indicators of Compromise (IOCs)

Affected GitHub Actions

  • actions-cool/issues-helper — every tag (53 in total) moved to an imposter commit
  • actions-cool/maintain-one-comment — every tag (15 in total) moved to an imposter commit

Exfiltration Domain

  • t.m-kosche.com — receives the encoded credentials harvested from Runner.Worker memory. Added to the Harden-Runner global block list.

Payload Markers (on the runner)

  • Download of the bun JavaScript runtime to /home/runner/.bun/bin/bun
  • Memory reads against /proc/<Runner.Worker PID>/mem from a python3 child process
  • gh auth token, sudo python3, and tr/grep pipelines filtering for "isSecret":true
  • Outbound HTTPS to t.m-kosche.com on port 443

Imposter Commits

The attacker generated a unique imposter commit per tag — each with a fake "Build action for vX.Y.Z" message that mirrors the legitimate maintainer's commit-message style. The tells are the timestamps: all 53 imposter commits in issues-helper were created within a 3-minute, 16-second window, and all 15 in maintain-one-comment within 39 seconds. Every commit below is dangling — none are reachable from the action's default branch.

actions-cool/issues-helper — 53 imposter commits (2026-05-18T19:10:24Z → 19:13:40Z):

  • v3.8.01c9e803c80cc7fed000022d4c94f4b5bc2e90062
  • v3.7.6f0448c62fc57b8a5ce23d8acd6e795cdd76a3b6c
  • v3.7.5abc4310e6b8520aff6af79a4880217917cd1436b
  • v3.7.4aea87833045e38098e64310e962b897ae8aaba33
  • v3.7.3aeb05195dbd618afce6f22ca4937e46940d86be1
  • v3.7.24b10341e231301a86c66f6c09e3e4de76d8719fe
  • v3.7.18a3a7c2960ff3a4e3fd1481cfd1eb31301e16337
  • v3.7.0aa44b5492c787fbc4c51edb8d98d88b668fe89d1
  • v3.6.303bbf452b52fb318196d9c193fd178a79a6d7f9b
  • v3.6.2257849272e291fb74ff4bee4d3be4796dd35fbbb
  • v3.6.14bb72d31eaee87562b70a0cf1b93579bb2b14c23
  • v3.6.0e0585c10366288eeec3117d65ed24240ccbf1f47
  • v3.5.2419b34c603623ea8749a98b7153df20e389dd0ec
  • v3.5.18cc2629c5681d794c494b79283d23aa3ce78749c
  • v3.5.04b69521f9829a1114b94d74fdc1a38f2291d8c34
  • v3.4.0dc5687b71897e8b57bc9743e325ac72cee763c9c
  • v3.3.33846bd4230da36f68a4cc1527298ca9ab2652fb9
  • v3.3.2459b0cfc4dd708b6218b72a7a01dda6c6a7ab0c0
  • v3.3.1fa6a4ca487f2dc699d428126ea2b18e9d0d15c9d
  • v3.3.015c89f718cd325833aad8000d3ec72e2660f6584
  • v3.2.1a7d3c46a35564fa85321f3557700f6ea0c0616a9
  • v3.2.085c9d842e1c0f41f8805f17600c25237e08a0224
  • v3.1.064ed6d61b6eee8744417e1d1cc651665a8bce236
  • v3.0.1d9b1764cbe78ec9b12f01a66b2d2c902b15981b6
  • v3.0.0b9c83f01929e190cda300e76f688bf7ea7e37a7a
  • v3147337a919d92f4bf42f02843682d694650f1e22
  • v2.5.0e9631d2e615d95a19111c272049444fb073a99be
  • v2.4.391b26b99c50ad890f98c2184d251bd3a16f5b1b1
  • v2.4.23f4d6804812734dfe945bbe8ef619f151e4b27f6
  • v2.4.146eff1378ad0faee27c017ebd97f605548777098
  • v2.4.0071e169dfb36005b3262b3853c9894698b8b303b
  • v2.3.155253d49c68133ae52e791a3f1f8242b191f5e91
  • v2.3.0edf8cf78d6feeb5a73cda9317af5ddfc4da6c5fd
  • v2.2.1a0c53dd42fc842d2f9276c5a1d4f9a26abe8713d
  • v2.2.0896379edfaac994ff214a3097c6c82e21be16066
  • v2.1.29bd6ce03e0c279f347b519548b87d26699ad31c9
  • v2.1.1d2877f69bae9d8dcbadb06b3214ebf0789ed566e
  • v2.1.0601e1296a5a0853b5e109f9820151c72619e11e4
  • v2.0.075fb02043af24e6f3eaf534464de338173993629
  • v23480e51eec2be03a70d6fe17507413a96fe5b57d
  • v1.1267716d94ad07d7fe793cabc6f6d1ffe24f77bdf7
  • v1.11cd96d6518c6338f8510638bce764c7abd7194983
  • v1.106a538e928b8856062de61103ed5a08f0ea0faee9
  • v1.99793761b1bc3dde7ad1ccb9be6211919e20a3f01
  • v1.88a64710bb8fee9f5c92eb1a816e016ed00fbcce0
  • v1.7710ff89debb143f6859cf8d54c0e8739224ff6c1
  • v1.63904fe935f1a18fee5dbad6db46a66c9dcffde01
  • v1.5cfbd14ccc97afd3baa822bd231df8460e4f02f29
  • v1.415dc537110a44b0625622e82b7d6ca95583f276a
  • v1.3e778a401e233bf0a416f3fe2a52d9039949b30a6
  • v1.2203671479d663755cb5bf8ffbeca6d2b685af7ae
  • v1.1a7156495f3403674cafe3796382bded1d9af8931
  • v15c267592a87e92c2b005b338bd0d2724c2f64acb

actions-cool/maintain-one-comment — 15 imposter commits (2026-05-18T19:30:30Z → 19:31:09Z):

  • v3.3.07f6120bb10c870b9fde146961a18e5bf0b3d4401
  • v3.2.14a6ac28684e2b0c48d502b31363ec5dd72f9d7ff
  • v3.2.0f3593fb4454aff5a6e1fb67024f94bfa48591dd5
  • v3.1.15d844d6b1c6a0c09a96844521bb01f149d9fe2c1
  • v3.1.02ab0aa3449ffe526ea64489193955d82a6848669
  • v3c43d668894bebbeea688878ab6774fa405f22251
  • v2.0.293ec180e89e8fdd8525869daa5590c433b6c30fb
  • v2.0.1cbb2ba52a811cb6152eee0607519cc5df78289b5
  • v2.0.099b7f41bf9e14a2a2c7cc524731336543f552178
  • v2ef01721dfd04f9c7ff1a256292f7dceabfd08d9b
  • v1.2.1d6622cc2415156cf4e81cf57866420479a966b3a
  • v1.2.074b8a9a600daf6fc6070ca0a10d840a7bb6890ae
  • v1.1.0cae76b34894429e693e9b0d2731e7654c373ce81
  • v1.0.07bb44528a0869f4074cc5448601804878704963f
  • v0.0.1-wip8bb68050bc2a353f9d3032e2b42732a69d97499b