CUTSIGNcutting for sign — daily OSINT threat read
AI-generated verdict card, published automatically by the pipeline on day one because the brief rated the story P1. Version 1, as of 2026-10-31; hype score 2 (below the usual publish bar: early read from few sources, revised as the story develops). Written by a model from the stored public sources and not reviewed by a person; re-issued in place when the evidence changes (the URL stays). The detection-coverage table below is checked automatically from public sources and re-checked daily. All cards

GhostAction: about 1,900 GitHub accounts reported compromised to push secret-stealing Actions workflows

Hunt + hardenP1confidence: lowP1 +2P1: card on day one (score below the publish bar; revised as the story develops)

One trade report says a campaign used stolen GitHub credentials to add fake 'security audit' workflows that try to pull CI/CD, cloud, registry and AI secrets. Today, search your GitHub organisations for the two named workflow files. Rotate any secret reachable from a repository where they appear.

Triage: A successful run exposes cloud, registry and AI secrets that stay valid until rotated, across a large reported victim set [S1].

Single secondary source (The Hacker News). No GitHub advisory or primary researcher report is in the input.

What happened

Timeline

2026-10-09GitHub begins blocking the malicious workflow from running S1
2026-10-15Campaign reported: about 1,900 accounts compromised, over 30,000 repositories targeted S1

Detect

GhostAction workflow file names in repository or audit data · GitHub audit log / repository commit history

index=* ("security-audit.yml" OR "github_actions_security.yml") | stats earliest(_time) as first_seen latest(_time) as last_seen count by repo, actor, action
FROM logs-* | WHERE message LIKE "*security-audit.yml*" OR message LIKE "*github_actions_security.yml*" | STATS first_seen = MIN(@timestamp), last_seen = MAX(@timestamp), count = COUNT(*) BY github.repo, user.name, event.action

A hit means: A file with a GhostAction workflow name was added or referenced in a repository. Check which account pushed it and whether it ran.

Workflow runs named Security Audit · GitHub audit log (workflows events)

index=* action="workflows.*" ("Security Audit" OR "security-audit.yml" OR "github_actions_security.yml") | stats count values(action) as actions by repo, actor
FROM logs-* | WHERE event.action LIKE "workflows.*" AND (message LIKE "*Security Audit*" OR message LIKE "*security-audit.yml*" OR message LIKE "*github_actions_security.yml*") | STATS count = COUNT(*), actions = VALUES(event.action) BY github.repo, user.name

A hit means: A workflow matching the campaign's disguise was created or executed. If it ran, treat every secret available to that repository as exposed.

Verify

Scope

Affected

Only if

Not affected if

None stated by the sources.

Enumerate

Contain

Eradicate

Recover

Re-enter the loop when

Debrief

Detection coverage — checked automatically

CategorySourceStatus
VendorImpacted vendor / CERT advisorynothing found — no vendor or CERT page among the thread sources; secondary reporting only
GovernmentCISA KEVnot checkable — no CVE: the catalog is keyed by CVE
EDR / endpoint VMCrowdStrike blognothing found — no post names it among the feed's 10 newest items
EDR / endpoint VMMicrosoft Security blogpublished — FORGE Lab uses agentic tools to identify memory safety issues in Rust · ARTEX abuse expands as cybercriminals target financial sector · Threat actors use agentic AI tooling to find and abuse exposed secrets (names the campaign in the title; the feed text carries no CVE id)
EDR / endpoint VMSentinelOne blogpublished — Bring Your Own Vulnerable Driver: What Detection Teams Should Actually Hunt · Bring Your Own Vulnerable Driver: The Trust Gap Attackers Operate Inside · Bring Your Own Vulnerable Driver: How EDR Killing Became an Industry (names the campaign in the title; the feed text carries no CVE id)
EDR / endpoint VMSentinelOne Labsnothing found — no post names it among the feed's 10 newest items
WAF / edgeAkamai blognothing found — no post names it among the feed's 1183 newest items
WAF / edgeCloudflare WAF managed-ruleset changelognothing found — no post names it among the feed's 139 newest items
Cloud / containerWiz blogpublished — The Pwn Request Reckoning: What Still Works Against GitHub Actions · Gheist: Attempted Scaled Abuse of Stolen GitHub Tokens Stumbles · The Blue Agent POV: Investigating Multi-Platform Data Exfiltration Across AWS and GitHub (names GitHub in the title; the feed text carries no CVE id)
IDS / researchCisco Talos blogpublished — A quiet week in infosec <.< · IR trends Q3 2026: Actors impersonate IT help desks in vishing attacks as ransomware activity increases · NIK C2: The new AI-enabled command-and-control framework (names the campaign in the title; the feed text carries no CVE id)
Detection contentElastic detection rulespublished — 3 files name GitHub: rules/integrations/github/impact_github_repository_deleted.toml, README.md, NOTICE.txt
Detection contentElastic Security Labspublished — Modernising threat hunting: Using Semantic Search to Find Risky AI Agent Behavior · Auditing the auditor: Unmasking Apex Accelerator · Behind the tags: How Elastic SIEM grades 1,781 detection rules on noise, speed, and threat coverage (names the campaign in the title; the feed text carries no CVE id)
Detection contentSigmaHQ rulespublished — 23 files name GitHub: rules/application/github/audit/github_new_org_member.yml, deprecated/windows/net_connection_win_binary_github_com.yml, rules/application/github/audit/github_new_secret_created.yml, rules/application/github/audit/github_delete_action_invoked.yml
Detection contentSplunk ESCUpublished — 4 files name GitHub: macros/deprecated/github.yml, macros/github_enterprise.yml, macros/github_organizations.yml, macros/deprecated/evilginx_phishlets_github.yml
MSSP / IR firmsArctic Wolf blognothing found — no post names it among the feed's 10 newest items
MSSP / IR firmsHuntress blognothing found — no post names it among the feed's 754 newest items
MSSP / IR firmsRapid7 blogpublished — Metasploit Wrap Up: Langflow, MongoDB, and More · From One Account to Every Mailbox: Breaking Zimbra's Identity Boundaries (Part 1) (names the campaign in the title; the feed text carries no CVE id)
MSSP / IR firmsSophos threat researchnothing found — no post names it among the feed's 15 newest items
ResearchUnit 42published — Blinder Tunnel Campaign Targets Iraqi Infrastructure (names the campaign in the title; the feed text carries no CVE id)

Checked automatically 2026-11-10 08:02Z from public sources: 10 published, 8 nothing found, 1 not machine-checkable, 0 failed. "Nothing found" means the public source answered and had nothing, as of that moment; a feed covers only its newest posts. Re-checked daily.

What a person would still look up (5)
Source code / CI-CD securityCan it alert on new or modified files in .github/workflows by unexpected actors?
Secret scanningDoes it inventory secrets in git history across all organisation repositories?
SIEMAre GitHub audit logs, including workflows and git events, ingested, and with which field names?
EDRDoes it detect infostealer activity on developer endpoints?
Cloud security / CSPMCan it flag API use from rotated or anomalous access keys?

Exposure queries — generated automatically

No CVE in this campaign: nothing an internet scanner keys on. Scope by product in your own tool.

Scope every query in your own tool, never in a shared document: Shodan `net:<your_ranges>`, `org:"<your_org>"` or `hostname:<your_domain>` (or a Shodan Monitor network alert, which applies the scope for you); Censys `host.ip: <your_ranges>` or `host.dns.names: <your_domain>`. Then compare the banner version with the affected range. Generated automatically 2026-11-10 08:02Z from the CVE ids and NVD's CPE configurations, each Shodan query counted against Shodan itself; re-built daily with the coverage check.

Open questions

Sources

Public OSINT only. AI-generated by the pipeline; structure follows the DAIR model from Dynamic Incident Response (Joshua Wright). Published automatically; a dismissed draft unpublishes it.

One mail per new card, after you confirm by link; an unsubscribe link in every mail. The address is used for nothing else.