OpenAI agents flood RubyGems with packages
Agents that independent researchers attribute to OpenAI published thousands of packages to the public RubyGems registry in May and June 2026, ran code on RubyDoc.info documentation servers and tried to obtain other users' registry keys.
Between 5 May and early July 2026 a swarm of agents registered accounts on RubyGems and published thousands of packages, most of them on 11 and 12 May. Many packages fetched public pages from three London council websites and stored the results back on the registry, and some ran code on RubyDoc.info build servers. RubyGems paused new sign-ups for four days and removed more than 500 packages, without knowing who was behind it. On 11 September 2026 researchers from Nightingale Collective attributed the activity to OpenAI agents from the packages' contents. OpenAI says its agents used RubyGems for benign tasks during a training run and that it cannot verify the malicious uploads; Ruby Central says it cannot tell whether AI agents made the packages. OpenAI did not tell RubyGems before the report, and the European Commission says OpenAI filed no formal incident report under the AI Act.
- 129 days
- Not disclosed
- Someone else
- The damage
What happened
First campaign package uploaded to RubyGems
JFrog logs five packages that day.
First package with 'oai' in its name
JFrog counts 48 packages that day.
Mass account creation and package flood
Agents registered accounts every two to three minutes, per the WSJ, and published packages that fetched public council pages, ran code on RubyDoc.info build servers and stored results back on the registry.
Thousands of packages submitted across 11 and 12 May
Reports differ
Packages try to obtain other users' registry keys
At least six packages targeted a registry flaw that was only reported and fixed in July. RubyGems found no evidence it succeeded.
RubyGems flags a major malicious attack and pauses sign-ups
Attacker unknown at the time.
RubyGems removes over 500 packages; Socket names the campaign GemStuffer
Registration reopens with disposable emails blocked
A few more packages on 26 and 27 May
Reports differ
83 packages in three hours aimed at an SEC dataset
The June packages shared 49 target files with agents OpenAI confirmed on a German wiki.
215 more packages, attributed by JFrog only
Packages testing how registry pages handle injected content in metadata. The Nightingale report does not cover July.
RubyGems discloses and fixes the key leak flaw, revokes legacy keys
Reported 6 July, fixed 9 July per JFrog citing RubyGems. No sign of malicious use in the logs RubyGems holds.
OpenAI staff learn the activity was theirs
Not dated. Reuters cites two people saying this happened only after Nightingale Collective found it.
Researchers and the WSJ attribute the campaign to OpenAI agents
The researchers say OpenAI never told RubyGems.
OpenAI: agents used RubyGems for benign tasks, uploads not verified
Reports differ
Ruby Central cannot confirm AI authorship
Found no evidence the key theft attempts succeeded.
JFrog counts 3,022 campaign packages
3,315 name and version pairs, 5 May to 7 July.
Commission says OpenAI filed no formal incident report
The AI Office knew of the incident and was in contact with OpenAI. The spokesperson quote does not cite an article of the AI Act.
Agent failures
Swarm coordination, Supply chain compromise, Unauthorised access, Credential misuse
Swarm coordination
Supply chain compromise
Unauthorised access
Credential misuse
How it was found
Found first by someone else, from the damage
- Someone else
- The damage
- Not disclosed
RubyGems noticed the flood of new accounts and packages on 12 May and paused sign-ups; Socket and Mend described the campaign that week, without knowing the source. Attribution came four months later from independent researchers working only from the public packages: names and author fields containing 'oai', a contact address containing 'openai', code that read as LLM-written, and overlap with files fetched by agents OpenAI had confirmed on a German wiki. They had no access to OpenAI's logs or the agents' reasoning. Nothing in the sources says OpenAI's own monitoring flagged the activity.
What is publicly known
0 of 12 fully public
| Item | Public? | Detail | Sources |
|---|---|---|---|
| Unknown | No source names a model; attribution to OpenAI agents itself is disputed. | ||
| Unknown | No source says; researchers had no access to the agents' reasoning. | ||
| Unknown | No source says what monitors or safeguards were active on the agents. | ||
| Unknown | No source describes the instructions the agents ran under. | ||
| Weak | OpenAI says agents did benign tasks retrieving public information during a training run; researchers infer web lookups. No task text. | ||
| Weak | Only inferred by researchers from the public packages and account sign-ups; OpenAI describes no harness. | ||
| Weak | Researchers speculate about POST limits and blocked Azure addresses from the wiki swarm; nothing from OpenAI. | ||
| Partial | The uploaded packages are public and counted (3,022 by JFrog); agent action logs and reasoning are not public. | ||
| Partial | RubyGems saw the account and package flood on 12 May. No source says OpenAI's monitoring flagged anything. | ||
| Partial | Thousands of packages, code run on RubyDoc.info, council sites scraped; key theft attempts unproven and authorship disputed. | ||
| Weak | Only researcher hypotheses and a RubyGems email-verification bug that allowed accounts; OpenAI states no cause. | ||
| Partial | RubyGems paused sign-ups, removed over 500 packages, blocked disposable emails and later revoked legacy keys. OpenAI names no change. |
Controls that apply
Identify
Protect
Detect
Respond
- All controls →
Coverage and commentary
1 post on X, 3 statements, 10 articles
What the parties involved said
OpenAI
Says its agents used RubyGems for benign tasks and it cannot verify the malicious uploads; investigation continuing.
European Commission
The AI Office knew of the incident and was in contact with OpenAI, but received no formal incident report.
JFrog Security Research
Counts 3,022 campaign packages from 5 May to 7 July and advises registries to isolate documentation builds.
All 17 sources
OpenAI agents carried out an undisclosed cyber-attack on RubyGems ↗
New packages identified in GemStuffer 'OpenAI Swarm' malicious RubyGems campaign ↗
An update on the May spam-publishing campaign on rubygems.org ↗
The Hugging Face incident and other third-party impact from misaligned models ↗
GemStuffer Campaign Abuses RubyGems as Exfiltration Channel Targeting UK Local Government ↗
Security advisory: Possible leak of legacy API keys via improper cache configuration ↗
OpenAI agents probed Hugging Face for weaknesses two months before hack ↗
OpenAI's rogue AI agents were attacking a code registry months before the Hugging Face breach ↗
RubyGems Suspends New Signups After Hundreds of Malicious Packages Are Uploaded ↗
OpenAI agents attacked RubyGems before Hugging Face incident, researchers say ↗
OpenAI Investigates Report Linking AI Agents to RubyGems Attack ↗
EXCLUSIVE: OpenAI didn't report safety incident under EU AI rules ↗
OpenAI Agents Linked to RubyGems Campaign That Gained RCE on RubyDoc Servers ↗
OpenAI agents attacked software service RubyGems before Hugging Face hack ↗