Skip to content
PublishedSoftware Supply Chain Security · v1.0 · 5 min

D1337: Cryptomining in Other People's GitHub Actions

The mining workflow, planting commits, payout indicators and the distinction between discovery and current proof.

Cristian Chiriac

Published:
2 November 2026
Version:
1.0
Last observed:
30 October 2026
Dataset frozen:
1 November 2026
Collection cut-off:
31 October 2026, 17:59 UTC
Tracked items rechecked:
1 November 2026, 18:23 UTC
Time zone
All dates UTC.
Contents

A GitHub Actions workflow is configured to download XMRig and mine to one payout wallet.

The research in 30 seconds

What I found
A GitHub Actions workflow is configured to download XMRig and mine to one payout wallet.
What this adds
The research identifies the workflow cluster, its signing identity and the shared payout configuration in unrelated developer accounts.
Verified scope
55 repositories under 28 accounts carry the configuration in the 30 October proof pass.
What remains unknown
Workflow runs, earnings and the way access to each account was obtained remain unverified.

The numbers, with their boundaries

Current count

55

Current proof-pass repositories

30 Oct 2026 · UTC

Counts:
28 accounts; miner configuration present at the pinned default-branch commit.

Earlier snapshot or subset

58

Earlier discovery repositories

29 Oct 2026 · UTC

Counts:
31 accounts; three repositories no longer matched at the next proof pass. Earlier findings below retain that date.
Technical detail:Long tables, code and the evidence register are folded; nothing is left out.

On 30 October 2026, 55 repositories under 28 accounts still carried the D1337 mining configuration at their pinned default-branch commit. The earlier discovery set, checked on 29 October, contained 58 repositories under 31 accounts.

The workflow named "CI Build" is configured to download XMRig every six hours and mine for 345 minutes, paying into one wallet and labeling each worker with the repository owner's name. These are configured actions; workflow runs were not checked.

  • Thirty of the accounts are old, unrelated developer accounts. The thirty-first is a bot account created on 7 February 2026, whose identity, "D1337 Bot", signs many of the planting commits.
  • All 58 repositories were still public on 29 October 2026. On 30 October, 55 of them still had the miner configuration at their current commit; in 3 it was no longer found.
  • I found no public report of this cluster, its wallet or its bot identity.

Nothing was executed, and I did not contact the mining pool. The workflow files were read through GitHub code search. Owners are treated as victims and are not named.

Where this stands (1 November 2026)

#

The proven set was closed on 1 November 2026 with what had been found up to 31 October 2026, 17:59 UTC; repositories found after that are tracked separately and are not in these figures. The full proof pass at pinned commits ran on 30–31 October. On 1 November 2026, 18:23 UTC a read-only GitHub API recheck covered the 162 repositories, 73 accounts and 12 issues that are tracked one by one (operator repositories, Shai-Hulud accounts, phishing issues), not the whole set.

  • Frozen: 55 repositories under 28 accounts proven by the workflow file; three more carry the cluster's commits but not the file at the pinned commit.
  • State: all 58 repositories public on 1 November, none with a commit since 29 October.

Key findings

#

Scope and method

#
Expand technical detail · complete record
Data source What was collected Scope Date (UTC) Coverage limit
GitHub code search Files containing the payout wallet 92 hits → 45 repositories, 22 owners 29 Oct 2026 Default branches, indexed files only
GitHub code search Files containing "D1337" 94 hits → 8 relevant 29 Oct 2026 Mostly name collisions; not used as a size
GitHub commit search Author and committer "D1337 Bot" about 52 commits in 52 repositories 29 Oct 2026 Client-set dates
Repository metadata Public, archived, disabled state and last push 58 core repositories 29 Oct 2026, 07:38 Actions run history not read

How it was found

#

While triaging general malware found by code search, a workflow that downloads a miner stood out. I pivoted on its payout wallet with code search, and on the author name of its commits with commit search.

At a glance

#
Set Repositories Accounts Definition
Wallet in a file 45 22 Code search for the payout address
"D1337 Bot" commits 52 — 51 third-party repositories plus the bot's own
…in the core 24 — Mining commit messages, or the wallet as well
…"Initial commit" only 28 28 No wallet found; not counted as mining
Core set 58 31 Wallet set ∪ mining-commit set; includes the bot's own repository
Still public on 29 Oct 2026 58 of 58 — One archived; none disabled
Miner proven at a pinned commit, 30 Oct 2026 55 28 Workflow file read at the current commit; 3 no longer show it
Files containing the D1337 payout wallet

92 code-search hits for the wallet address, 29 October 2026, by file name.

Table view
Files containing the D1337 payout wallet
ItemValueNote
ci.yml54
build.yml30
m.yml4
mine.yml2
README2

How the workflow mines

#
One run of the "CI Build" workflow
  1. 01TriggerEvery push, and a schedule of 0 */6 * * * (four times a day)
  2. 02DownloadT1105XMRig 6.21.0 from the official XMRig release page
  3. 03MineT1496.001RandomX on rx.unmineable[.]com:3333 with TLS, for up to 350 minutes, just under the six-hour job limit
  4. 04PayoutUSDT:0x74B56f2…9fC9.d1337_<owner>, so each victim's share is visible to the operator

Because the binary is the genuine XMRig release, a file-hash check will not catch it. The configuration does.

How the accounts were used

#
Identity Where it appears Commit messages
"D1337 Bot" bot@d1337[.]ai (client time zone +07:00) Third-party repositories "Initial commit - Add mining workflow" (30), "Configure CI/CD pipeline", "Update worker configuration", "Add mining workflow", "Initial commit"
The bot's GitHub account (noreply, time zone −04:00) Only its own repository Unrelated product and website commits
"CI Build" ci@build[.]dev One variant —
  • Many repositories have generic names such as ci-pipeline, build-pipeline-<number>, deploy-pipeline or test-runner, created inside the victims' accounts.
  • 34 of the 58 core repositories have no "D1337 Bot" commit. They are in the core because they contain the wallet, so their workflows were committed by other identities at dates I do not have.
  • On 23 May 2026, between 02:59 and 03:16 UTC, fourteen core repositories were pushed, thirteen of them belonging to one owner. That looks like a second planting round under another identity.

A separate account with four repositories mines to a different wallet through the same pool. It also owns six of the core repositories, so its role is unresolved.

ATT&CK mapping

#
Expand technical detail · complete record
MITRE ATT&CK v20 (content v20.0), checked on attack.mitre.org on 29 October 2026. Mapped from the workflow files and commit records.
TechniqueNameTacticEvidence
T1078 Valid AccountsInitial AccessCommits by an unrelated identity in 30 owners' accounts (inferred use of their credentials)
T1105 Ingress Tool TransferCommand and ControlThe workflow downloads XMRig 6.21.0 at run time
T1496.001 Compute HijackingImpactGitHub-hosted runners mine RandomX for up to 350 minutes per run

Evidence register

#
Expand technical detail · complete record
E-D1-CODEWorkflow files with the miner configuration

Workflow files containing the pool, the payout address and the per-owner worker name, read through code search.

Source: GitHub code search · Collected 29 October 2026

E-D1-COMMITSCommits by the "D1337 Bot" identity

About 52 commits in 52 repositories, author and committer "D1337 Bot", dated 15–20 April 2026 on third-party repositories.

Source: GitHub commit search · Collected 29 October 2026

E-D1-STATERepository state and owner profile

Public, archived and disabled state and last-push times of the 58 core repositories; owner creation dates and repository counts.

Source: GitHub GraphQL and REST metadata · Collected 29 October 2026

Confidence and alternative explanations

#
Inference Confidence Alternative explanation Why it is less likely
Owners' tokens or accounts were misused Moderate One operator owns all 30 accounts Accounts from 2013–2025 with unrelated, normal histories
The miner actually ran Unknown Workflows never triggered, or were disabled Run history was not read
"D1337" links to other projects of that name No link — Only name collisions were found

Timeline

#
Research timeline
  1. The bot account is created

  2. Earliest platform activity in the cluster

  3. First "D1337 Bot" planting commits (commit dates)

    Continue until 20 April 2026

  4. Fourteen core repositories pushed in 17 minutes

    02:59–03:16 UTC, thirteen of one owner

  5. 58 of 58 public

Three core repositories were pushed again between 14 and 19 October 2026.

Data notes and reconciliation

#
Expand technical detail · complete record
Item Values seen Explanation
"58 repositories" vs "52 repositories" Different sets 58 is the core (wallet or mining commits); 52 is every repository with a "D1337 Bot" commit
31 owners 30 + 1 Includes the bot's own account
Commit date range 15 Apr – 18 May 2026 18 May comes from the bot's own product commits; planting commits end on 20 April
345 vs 350 minutes Both Mining time argument versus job timeout

Defensive checks

#
  1. Look for repositories you did not create, especially names like ci-pipeline or build-pipeline-123.
  2. Grep every workflow for xmrig, unmineable, randomx and stratum.
  3. Revoke personal access tokens and OAuth or app tokens, and review your account's security log.
  4. Require signed commits or push rules, so unexpected identities stand out or are blocked.
  5. GitHub disables scheduled workflows in public repositories after 60 days without activity, so many of these schedules are probably off already. A single push re-arms the miner.

Indicators

#
Expand technical detail · complete record
D1337 mining cluster
0 selected
TypeValueContextCopy
domainrx.unmineable[.]comMining pool, port 3333 (a public pool, not attacker-owned)
Confidence: Confirmed malicious
otherUSDT:0x74B56f2C379996fedabF53D36aeE73c5E5129fC9Payout address; worker d1337_<owner>
Confidence: Confirmed malicious
emailbot@d1337[.]aiCommit identity "D1337 Bot"
Confidence: Confirmed malicious
emailci@build[.]devCommit identity "CI Build"
Confidence: High-confidence suspicious

Commit messages: Initial commit - Add mining workflow, Configure CI/CD pipeline, Update worker configuration. Workflow traits: name CI Build, cron 0 */6 * * *, timeout-minutes: 350, download of xmrig-6.21.0.

Operator-controlled GitHub accounts and repositories, checked 2 November 2026. Victims' accounts are not listed, nor accounts that may have been hijacked or whose role is not established. The confidence column gives the strength of each entry.
0 selected
TypeValueContextCopy
otherr31d1337-botGitHub user created 2026-02-07, live on 2 November 2026. Bot account; owns Make-it-into-money, one of the 58 repositories reported for the mining workflow, and the planting commits are signed "D1337 Bot" bot@d1337[.]ai
Confidence: High-confidence suspicious

What was already public

#
Expand technical detail · complete record

Sources were read on or before 29 October 2026. Each one also links to its Internet Archive record, which lists the captures that exist, in case the original moves or changes.

Mining on GitHub Actions is an old problem; this instance is not.

  1. GitHub, Terms for Additional Products and Features (Actions must not be used for cryptomining): https://docs.github.com/en/site-policy/github-terms/github-terms-for-additional-products-and-features (Internet Archive lookup)
  2. GitHub, Acceptable Use Policies: https://docs.github.com/en/site-policy/acceptable-use-policies/github-acceptable-use-policies (Internet Archive lookup)
  3. GitHub blog, 2021, abuse through fork pull requests: https://github.blog/open-source/maintainers/github-actions-update-helping-maintainers-combat-bad-actors/ (Internet Archive lookup)
  4. Trend Micro, 2022, miners on Actions runners: https://www.trendmicro.com/en_us/research/22/g/unpacking-cloud-based-cryptocurrency-miners-that-abuse-github-ac.html (Internet Archive lookup)
  5. Sysdig, PURPLEURCHIN: https://www.sysdig.com/blog/massive-cryptomining-operation-github-actions (Internet Archive lookup)

Not found in the public sources I checked, as of 29 October 2026: this cluster, its wallet, its bot identity and its worker naming. Earlier public cases used pull requests from forks, or accounts the attackers owned. Here the miner runs inside many unrelated developers' accounts.

Limitations

#
  • Whether the workflows ran, and what was earned, was not checked.
  • Planting identity and dates are unknown for 34 of the 58 repositories.
  • Code search sees default branches only, so the counts are a floor.
  • How the accounts were accessed is not established.

Investigation context

#

This article is part of the GitHub threat investigation. Counts are a snapshot, not evidence that the code ran on a victim's machine. The shared methodology and proof rules explain inclusion, exclusions and the independent re-check.

Claims, evidence and limits

ClaimAssessmentEvidenceLimit
A mining workflow in 58 repositories under 31 accountsConfidence: Confirmed malicious
E-D1-CODENot stated in the finding
One bot identity plants the workflow in other people's accountsConfidence: Confirmed malicious
E-D1-COMMITSNot stated in the finding
The owners are likely compromised, not complicitConfidence: Under investigation
E-D1-COMMITS, E-D1-STATENot stated in the finding

Terms used on this page

pinned commit
A specific commit, identified by its hash, at which a repository was read. Every counted repository was proven at the default-branch commit recorded in the proof pass, so a later change to the repository does not change what was proven.
default branch
The branch a repository shows by default. Counts are taken on default branches only; infected non-default branches were recorded separately and are not counted.
proof pass
The 30–31 October 2026 re-read of every candidate at a pinned commit under fixed inclusion rules, followed by an independent re-read of a random sample of 555 repositories through a different API.

All terms: glossary.

Corrections & discussion

Found an error, or have evidence that supports or contradicts a finding? Send a correction. Name the section and what you observed.

← All research