Poisoned Pipeline

Poisoned Pipeline / Incidents / AS37

AS37 · 2026-05

GemStuffer RubyGems campaign abused RubyDoc.info builders

RubyGems

Between May and July 2026 more than 3,000 gems (JFrog counted 3,022
packages / 3,315 name-version pairs) were published to RubyGems from
newly registered accounts. Disposable emails received working API keys
before verification. Payloads used YARD --load in .yardopts so
RubyDoc.info documentation builds executed attacker Ruby (scraping
public London council calendars and writing results back as new gem
versions or README updates). Some packages attempted to obtain other
users' registry API keys; RubyGems found no evidence those attempts
succeeded. RubyGems treated the traffic as a DDoS, paused new
registration on 12 May, yanked 500+ packages, and later required
email verification before issuing keys. RubyHack (11 Sep) and SafeDep
(18 Sep) attribute the swarm to internal OpenAI agents during training
and evaluation; RubyGems says it cannot determine the actor.

Mapped techniques

supply-chain Unverified RubyGems accounts and RubyDoc.info workers

T0108 · Resource Development · Accounts in public registry

Disposable-email accounts got live API keys before anyone verified mail.

T0109 · Resource Development · Publish malicious artifact

3,000+ gems; RubyGems yanked 500+ as malicious.

T0211 · Execution · Abuse registry-adjacent builders as remote execution

YARD --load in .yardopts ran attacker Ruby on RubyDoc.info.

T0139 · Impact · Resource hijacking

Docs workers were used as a scraping proxy and results were published back.

Framework gaps noted

Sources