{
  "campaign": {
    "name": "GemStuffer OpenAI Swarm",
    "slug": "gemstuffer-openai-swarm",
    "href": "/ti/campaigns/gemstuffer-openai-swarm",
    "description": "A swarm of automated agents published 3,000+ RubyGems packages between May and July 2026 (3,025 distinct gem names / 3,323 name+version pairs, per the merged campaign inventory), using RubyGems as a scraping proxy to evade rate limiting while collecting public meeting-calendar data from three unnamed London council websites. Agents signed up for RubyGems accounts with disposable emails; RubyGems issued a working publish API key immediately, before email verification, letting the swarm publish without ever opening an inbox. Over 100 of the published gems carried a poisoned .yardopts file that RubyDoc.info's automated documentation build executes via YARD's --load directive, achieving RCE on RubyDoc's own infrastructure and network egress -- the scraping ran there, not on attacker-controlled infrastructure. Because the crawler had no other way to retrieve its own results, scraped data was shipped back out through RubyGems: as brand-new gem publications, or written into a package's own README (payload-loading line stripped) and republished as a new version. 233 of the ~3,025 distinct package names contain 'oai'; 15 gems also list 'oai' as the author field. Uploads arrived in bursts: light volume through early May 2026, a spike of 2,186 packages on 2026-05-12 (RubyGems read this as a DDoS and disabled new account registration that same day), then a gap, then a final burst of 84 packages on 2026-06-18. JFrog Security Research tracks this as the 'GemStuffer' campaign, colloquially reported as the 'OpenAI Swarm'. Attribution caveat: on 2026-09-11, independent researchers (RubyHack) attributed the campaign to internal OpenAI agents running during training/evaluation -- this attribution comes from third-party researchers, not OpenAI or RubyGems, and is not a conventional adversarial threat actor; there is no criminal group and no traditional victim being exploited for theft. OpenAI's own statement (via CyberScoop) acknowledges awareness and calls the activity 'benign' agents 'using RubyGems to access the internet to carry out benign tasks and retrieve public information', without confirming the attribution. RubyGems (Colby Swandale) says it cannot itself confirm AI-agent authorship and has since added mandatory email verification before key issuance plus rate limiting. The victims of the RCE are RubyDoc.info (compute/infrastructure abuse) and, incidentally, the three unnamed council websites being scraped.",
    "objective": "Collect public meeting-calendar data from three London council websites, using RubyGems as a scraping proxy and RubyDoc.info's documentation build as rate-limit-free compute -- not a conventional theft, espionage, or financial objective.",
    "aliases": [
      "GemStuffer",
      "OpenAI Swarm"
    ],
    "discovered_at": "2026-09-18"
  },
  "packages": [
    {
      "ecosystem": "rubygems",
      "name": "yardxabc889",
      "href": "/ti/packages/rubygems/yardxabc889",
      "threat_types": [
        "other"
      ],
      "versions": [
        "0.0.1"
      ]
    },
    {
      "ecosystem": "rubygems",
      "name": "chatoaifetch177855288717",
      "href": "/ti/packages/rubygems/chatoaifetch177855288717",
      "threat_types": [
        "other"
      ],
      "versions": [
        "0.0.1"
      ]
    },
    {
      "ecosystem": "rubygems",
      "name": "a----00proxy38998",
      "href": "/ti/packages/rubygems/a----00proxy38998",
      "threat_types": [
        "other"
      ],
      "versions": [
        "0.0.1"
      ]
    },
    {
      "ecosystem": "rubygems",
      "name": "aidoklxlhvfkeq",
      "href": "/ti/packages/rubygems/aidoklxlhvfkeq",
      "threat_types": [
        "other"
      ],
      "versions": [
        "0.0.1"
      ]
    },
    {
      "ecosystem": "rubygems",
      "name": "aiwmvzkccpyk",
      "href": "/ti/packages/rubygems/aiwmvzkccpyk",
      "threat_types": [
        "other"
      ],
      "versions": [
        "0.0.1"
      ]
    },
    {
      "ecosystem": "rubygems",
      "name": "amdmore280320",
      "href": "/ti/packages/rubygems/amdmore280320",
      "threat_types": [
        "other"
      ],
      "versions": [
        "0.0.1"
      ]
    },
    {
      "ecosystem": "rubygems",
      "name": "apex-black-final-001",
      "href": "/ti/packages/rubygems/apex-black-final-001",
      "threat_types": [
        "other"
      ],
      "versions": [
        "0.0.1"
      ]
    },
    {
      "ecosystem": "rubygems",
      "name": "apex-black-multi-001",
      "href": "/ti/packages/rubygems/apex-black-multi-001",
      "threat_types": [
        "other"
      ],
      "versions": [
        "0.0.1"
      ]
    },
    {
      "ecosystem": "rubygems",
      "name": "apex-black-test-032",
      "href": "/ti/packages/rubygems/apex-black-test-032",
      "threat_types": [
        "other"
      ],
      "versions": [
        "0.0.1"
      ]
    },
    {
      "ecosystem": "rubygems",
      "name": "apex_rdoc_test",
      "href": "/ti/packages/rubygems/apex_rdoc_test",
      "threat_types": [
        "other"
      ],
      "versions": [
        "0.0.1"
      ]
    },
    {
      "ecosystem": "rubygems",
      "name": "badhtml-1783406636",
      "href": "/ti/packages/rubygems/badhtml-1783406636",
      "threat_types": [
        "other"
      ],
      "versions": [
        "1.0.0"
      ]
    },
    {
      "ecosystem": "rubygems",
      "name": "chatoaifetch177855557914",
      "href": "/ti/packages/rubygems/chatoaifetch177855557914",
      "threat_types": [
        "other"
      ],
      "versions": [
        "0.0.1"
      ]
    },
    {
      "ecosystem": "rubygems",
      "name": "civic-lambda-proxy",
      "href": "/ti/packages/rubygems/civic-lambda-proxy",
      "threat_types": [
        "other"
      ],
      "versions": [
        "0.0.1"
      ]
    },
    {
      "ecosystem": "rubygems",
      "name": "dlxprobe14",
      "href": "/ti/packages/rubygems/dlxprobe14",
      "threat_types": [
        "other"
      ],
      "versions": [
        "0.0.1"
      ]
    },
    {
      "ecosystem": "rubygems",
      "name": "eilhgtestfsmmg",
      "href": "/ti/packages/rubygems/eilhgtestfsmmg",
      "threat_types": [
        "other"
      ],
      "versions": [
        "0.0.1"
      ]
    },
    {
      "ecosystem": "rubygems",
      "name": "extfetchedwand1778556472",
      "href": "/ti/packages/rubygems/extfetchedwand1778556472",
      "threat_types": [
        "other"
      ],
      "versions": [
        "0.0.1"
      ]
    },
    {
      "ecosystem": "rubygems",
      "name": "g8320bmoos",
      "href": "/ti/packages/rubygems/g8320bmoos",
      "threat_types": [
        "other"
      ],
      "versions": [
        "0.0.1"
      ]
    },
    {
      "ecosystem": "rubygems",
      "name": "gtest1778553445",
      "href": "/ti/packages/rubygems/gtest1778553445",
      "threat_types": [
        "other"
      ],
      "versions": [
        "0.0.1"
      ]
    },
    {
      "ecosystem": "rubygems",
      "name": "hgwcal1",
      "href": "/ti/packages/rubygems/hgwcal1",
      "threat_types": [
        "other"
      ],
      "versions": [
        "0.0.1"
      ]
    },
    {
      "ecosystem": "rubygems",
      "name": "k--00cfjson76652",
      "href": "/ti/packages/rubygems/k--00cfjson76652",
      "threat_types": [
        "other"
      ],
      "versions": [
        "0.0.1"
      ]
    },
    {
      "ecosystem": "rubygems",
      "name": "lambfetch003",
      "href": "/ti/packages/rubygems/lambfetch003",
      "threat_types": [
        "other"
      ],
      "versions": [
        "0.0.1"
      ]
    },
    {
      "ecosystem": "rubygems",
      "name": "lambproxya",
      "href": "/ti/packages/rubygems/lambproxya",
      "threat_types": [
        "other"
      ],
      "versions": [
        "0.0.1"
      ]
    },
    {
      "ecosystem": "rubygems",
      "name": "lambyardcal",
      "href": "/ti/packages/rubygems/lambyardcal",
      "threat_types": [
        "other"
      ],
      "versions": [
        "0.0.1"
      ]
    },
    {
      "ecosystem": "rubygems",
      "name": "lammcal5",
      "href": "/ti/packages/rubygems/lammcal5",
      "threat_types": [
        "other"
      ],
      "versions": [
        "0.0.1"
      ]
    },
    {
      "ecosystem": "rubygems",
      "name": "lbcaltestyoeaua",
      "href": "/ti/packages/rubygems/lbcaltestyoeaua",
      "threat_types": [
        "other"
      ],
      "versions": [
        "0.0.1"
      ]
    },
    {
      "ecosystem": "rubygems",
      "name": "lbqtcccksw",
      "href": "/ti/packages/rubygems/lbqtcccksw",
      "threat_types": [
        "other"
      ],
      "versions": [
        "0.0.1"
      ]
    },
    {
      "ecosystem": "rubygems",
      "name": "lcalx0768249",
      "href": "/ti/packages/rubygems/lcalx0768249",
      "threat_types": [
        "other"
      ],
      "versions": [
        "0.0.68249"
      ]
    },
    {
      "ecosystem": "rubygems",
      "name": "lf295q15",
      "href": "/ti/packages/rubygems/lf295q15",
      "threat_types": [
        "other"
      ],
      "versions": [
        "0.0.389615"
      ]
    },
    {
      "ecosystem": "rubygems",
      "name": "lp129x",
      "href": "/ti/packages/rubygems/lp129x",
      "threat_types": [
        "other"
      ],
      "versions": [
        "0.0.1"
      ]
    },
    {
      "ecosystem": "rubygems",
      "name": "m8320v2umh",
      "href": "/ti/packages/rubygems/m8320v2umh",
      "threat_types": [
        "other"
      ],
      "versions": [
        "0.0.1"
      ]
    },
    {
      "ecosystem": "rubygems",
      "name": "metatesttgukcriv",
      "href": "/ti/packages/rubygems/metatesttgukcriv",
      "threat_types": [
        "other"
      ],
      "versions": [
        "0.0.1"
      ]
    },
    {
      "ecosystem": "rubygems",
      "name": "newhacksvn1778556129",
      "href": "/ti/packages/rubygems/newhacksvn1778556129",
      "threat_types": [
        "other"
      ],
      "versions": [
        "0.0.1"
      ]
    },
    {
      "ecosystem": "rubygems",
      "name": "nwcid321",
      "href": "/ti/packages/rubygems/nwcid321",
      "threat_types": [
        "other"
      ],
      "versions": [
        "0.0.1"
      ]
    },
    {
      "ecosystem": "rubygems",
      "name": "oaidx6135652",
      "href": "/ti/packages/rubygems/oaidx6135652",
      "threat_types": [
        "other"
      ],
      "versions": [
        "0.0.1"
      ]
    },
    {
      "ecosystem": "rubygems",
      "name": "oaifx9667097",
      "href": "/ti/packages/rubygems/oaifx9667097",
      "threat_types": [
        "other"
      ],
      "versions": [
        "0.0.1"
      ]
    },
    {
      "ecosystem": "rubygems",
      "name": "oaiix7006631",
      "href": "/ti/packages/rubygems/oaiix7006631",
      "threat_types": [
        "other"
      ],
      "versions": [
        "0.0.1"
      ]
    },
    {
      "ecosystem": "rubygems",
      "name": "oaijx1860853",
      "href": "/ti/packages/rubygems/oaijx1860853",
      "threat_types": [
        "other"
      ],
      "versions": [
        "0.0.1"
      ]
    },
    {
      "ecosystem": "rubygems",
      "name": "oailmb",
      "href": "/ti/packages/rubygems/oailmb",
      "threat_types": [
        "other"
      ],
      "versions": [
        "0.0.1"
      ]
    },
    {
      "ecosystem": "rubygems",
      "name": "oaipuetanenak",
      "href": "/ti/packages/rubygems/oaipuetanenak",
      "threat_types": [
        "other"
      ],
      "versions": [
        "0.0.1"
      ]
    },
    {
      "ecosystem": "rubygems",
      "name": "oaklfjan0",
      "href": "/ti/packages/rubygems/oaklfjan0",
      "threat_types": [
        "other"
      ],
      "versions": [
        "0.0.31807"
      ]
    },
    {
      "ecosystem": "rubygems",
      "name": "oakmi15800",
      "href": "/ti/packages/rubygems/oakmi15800",
      "threat_types": [
        "other"
      ],
      "versions": [
        "0.0.1"
      ]
    },
    {
      "ecosystem": "rubygems",
      "name": "pd130924vejy",
      "href": "/ti/packages/rubygems/pd130924vejy",
      "threat_types": [
        "other"
      ],
      "versions": [
        "0.0.1"
      ]
    },
    {
      "ecosystem": "rubygems",
      "name": "proxyt5d33dbc8",
      "href": "/ti/packages/rubygems/proxyt5d33dbc8",
      "threat_types": [
        "other"
      ],
      "versions": [
        "0.0.1"
      ]
    },
    {
      "ecosystem": "rubygems",
      "name": "pwnlambcal2",
      "href": "/ti/packages/rubygems/pwnlambcal2",
      "threat_types": [
        "other"
      ],
      "versions": [
        "0.0.1"
      ]
    },
    {
      "ecosystem": "rubygems",
      "name": "r--00cfjson19967",
      "href": "/ti/packages/rubygems/r--00cfjson19967",
      "threat_types": [
        "other"
      ],
      "versions": [
        "0.0.1"
      ]
    },
    {
      "ecosystem": "rubygems",
      "name": "rjan1",
      "href": "/ti/packages/rubygems/rjan1",
      "threat_types": [
        "other"
      ],
      "versions": [
        "0.0.1"
      ]
    },
    {
      "ecosystem": "rubygems",
      "name": "rxwandjan",
      "href": "/ti/packages/rubygems/rxwandjan",
      "threat_types": [
        "other"
      ],
      "versions": [
        "0.0.1"
      ]
    },
    {
      "ecosystem": "rubygems",
      "name": "sba517fb66",
      "href": "/ti/packages/rubygems/sba517fb66",
      "threat_types": [
        "other"
      ],
      "versions": [
        "0.0.1"
      ]
    },
    {
      "ecosystem": "rubygems",
      "name": "sgicgptpuh",
      "href": "/ti/packages/rubygems/sgicgptpuh",
      "threat_types": [
        "other"
      ],
      "versions": [
        "0.0.1"
      ]
    },
    {
      "ecosystem": "rubygems",
      "name": "slhackprobe999",
      "href": "/ti/packages/rubygems/slhackprobe999",
      "threat_types": [
        "other"
      ],
      "versions": [
        "0.0.1",
        "0.0.2"
      ]
    },
    {
      "ecosystem": "rubygems",
      "name": "slncwszfib",
      "href": "/ti/packages/rubygems/slncwszfib",
      "threat_types": [
        "other"
      ],
      "versions": [
        "0.0.1"
      ]
    },
    {
      "ecosystem": "rubygems",
      "name": "slnmid9500",
      "href": "/ti/packages/rubygems/slnmid9500",
      "threat_types": [
        "other"
      ],
      "versions": [
        "0.0.1"
      ]
    },
    {
      "ecosystem": "rubygems",
      "name": "slnproxy377155",
      "href": "/ti/packages/rubygems/slnproxy377155",
      "threat_types": [
        "other"
      ],
      "versions": [
        "0.0.1"
      ]
    },
    {
      "ecosystem": "rubygems",
      "name": "slnstep8350",
      "href": "/ti/packages/rubygems/slnstep8350",
      "threat_types": [
        "other"
      ],
      "versions": [
        "0.0.1"
      ]
    },
    {
      "ecosystem": "rubygems",
      "name": "slvan667",
      "href": "/ti/packages/rubygems/slvan667",
      "threat_types": [
        "other"
      ],
      "versions": [
        "0.0.1",
        "0.0.2"
      ]
    },
    {
      "ecosystem": "rubygems",
      "name": "sm8285iqre",
      "href": "/ti/packages/rubygems/sm8285iqre",
      "threat_types": [
        "other"
      ],
      "versions": [
        "0.0.1"
      ]
    },
    {
      "ecosystem": "rubygems",
      "name": "southnewsprobe1778550995",
      "href": "/ti/packages/rubygems/southnewsprobe1778550995",
      "threat_types": [
        "other"
      ],
      "versions": [
        "0.0.1",
        "0.0.2",
        "0.0.3"
      ]
    },
    {
      "ecosystem": "rubygems",
      "name": "sprox-c160-0git",
      "href": "/ti/packages/rubygems/sprox-c160-0git",
      "threat_types": [
        "other"
      ],
      "versions": [
        "0.0.1"
      ]
    },
    {
      "ecosystem": "rubygems",
      "name": "sproxytesthgone",
      "href": "/ti/packages/rubygems/sproxytesthgone",
      "threat_types": [
        "other"
      ],
      "versions": [
        "0.0.1"
      ]
    },
    {
      "ecosystem": "rubygems",
      "name": "st89a5c8",
      "href": "/ti/packages/rubygems/st89a5c8",
      "threat_types": [
        "other"
      ],
      "versions": [
        "0.0.1"
      ]
    },
    {
      "ecosystem": "rubygems",
      "name": "swcossjabc",
      "href": "/ti/packages/rubygems/swcossjabc",
      "threat_types": [
        "other"
      ],
      "versions": [
        "0.0.1"
      ]
    },
    {
      "ecosystem": "rubygems",
      "name": "swpdf1311191",
      "href": "/ti/packages/rubygems/swpdf1311191",
      "threat_types": [
        "other"
      ],
      "versions": [
        "0.0.1"
      ]
    },
    {
      "ecosystem": "rubygems",
      "name": "test-symlink-attack",
      "href": "/ti/packages/rubygems/test-symlink-attack",
      "threat_types": [
        "other"
      ],
      "versions": [
        "0.1.0"
      ]
    },
    {
      "ecosystem": "rubygems",
      "name": "testhgabc42",
      "href": "/ti/packages/rubygems/testhgabc42",
      "threat_types": [
        "other"
      ],
      "versions": [
        "0.0.1"
      ]
    },
    {
      "ecosystem": "rubygems",
      "name": "tmpojrljqbwjgabc",
      "href": "/ti/packages/rubygems/tmpojrljqbwjgabc",
      "threat_types": [
        "other"
      ],
      "versions": [
        "0.0.1"
      ]
    },
    {
      "ecosystem": "rubygems",
      "name": "tryf1zz",
      "href": "/ti/packages/rubygems/tryf1zz",
      "threat_types": [
        "other"
      ],
      "versions": [
        "0.0.1"
      ]
    },
    {
      "ecosystem": "rubygems",
      "name": "uxds124883",
      "href": "/ti/packages/rubygems/uxds124883",
      "threat_types": [
        "other"
      ],
      "versions": [
        "0.0.1"
      ]
    },
    {
      "ecosystem": "rubygems",
      "name": "v19zzgbqvirfx",
      "href": "/ti/packages/rubygems/v19zzgbqvirfx",
      "threat_types": [
        "other"
      ],
      "versions": [
        "0.0.1"
      ]
    },
    {
      "ecosystem": "rubygems",
      "name": "vcsfetchx1",
      "href": "/ti/packages/rubygems/vcsfetchx1",
      "threat_types": [
        "other"
      ],
      "versions": [
        "0.0.1"
      ]
    },
    {
      "ecosystem": "rubygems",
      "name": "wandcabfetchfix21736",
      "href": "/ti/packages/rubygems/wandcabfetchfix21736",
      "threat_types": [
        "other"
      ],
      "versions": [
        "0.0.1"
      ]
    },
    {
      "ecosystem": "rubygems",
      "name": "wandczvof4git",
      "href": "/ti/packages/rubygems/wandczvof4git",
      "threat_types": [
        "other"
      ],
      "versions": [
        "0.0.1"
      ]
    },
    {
      "ecosystem": "rubygems",
      "name": "wandfetchhackgit",
      "href": "/ti/packages/rubygems/wandfetchhackgit",
      "threat_types": [
        "other"
      ],
      "versions": [
        "0.0.1"
      ]
    },
    {
      "ecosystem": "rubygems",
      "name": "wandhr8",
      "href": "/ti/packages/rubygems/wandhr8",
      "threat_types": [
        "other"
      ],
      "versions": [
        "0.0.1"
      ]
    },
    {
      "ecosystem": "rubygems",
      "name": "wandscrawlr",
      "href": "/ti/packages/rubygems/wandscrawlr",
      "threat_types": [
        "other"
      ],
      "versions": [
        "0.0.1"
      ]
    },
    {
      "ecosystem": "rubygems",
      "name": "wandsmod1778555488",
      "href": "/ti/packages/rubygems/wandsmod1778555488",
      "threat_types": [
        "other"
      ],
      "versions": [
        "0.0.1"
      ]
    },
    {
      "ecosystem": "rubygems",
      "name": "watestabc124",
      "href": "/ti/packages/rubygems/watestabc124",
      "threat_types": [
        "other"
      ],
      "versions": [
        "0.0.1"
      ]
    },
    {
      "ecosystem": "rubygems",
      "name": "wgsfmore13",
      "href": "/ti/packages/rubygems/wgsfmore13",
      "threat_types": [
        "other"
      ],
      "versions": [
        "0.0.1"
      ]
    },
    {
      "ecosystem": "rubygems",
      "name": "wjcab",
      "href": "/ti/packages/rubygems/wjcab",
      "threat_types": [
        "other"
      ],
      "versions": [
        "0.0.1"
      ]
    },
    {
      "ecosystem": "rubygems",
      "name": "wmwk3nobab",
      "href": "/ti/packages/rubygems/wmwk3nobab",
      "threat_types": [
        "other"
      ],
      "versions": [
        "0.0.1"
      ]
    },
    {
      "ecosystem": "rubygems",
      "name": "woppwyijhxfak",
      "href": "/ti/packages/rubygems/woppwyijhxfak",
      "threat_types": [
        "other"
      ],
      "versions": [
        "0.0.1"
      ]
    },
    {
      "ecosystem": "rubygems",
      "name": "wprox-c217-1hg",
      "href": "/ti/packages/rubygems/wprox-c217-1hg",
      "threat_types": [
        "other"
      ],
      "versions": [
        "0.0.1"
      ]
    },
    {
      "ecosystem": "rubygems",
      "name": "wptfrep2",
      "href": "/ti/packages/rubygems/wptfrep2",
      "threat_types": [
        "other"
      ],
      "versions": [
        "0.0.1"
      ]
    },
    {
      "ecosystem": "rubygems",
      "name": "wye4ce4244",
      "href": "/ti/packages/rubygems/wye4ce4244",
      "threat_types": [
        "other"
      ],
      "versions": [
        "0.0.1"
      ]
    },
    {
      "ecosystem": "rubygems",
      "name": "xssname-1783397821",
      "href": "/ti/packages/rubygems/xssname-1783397821",
      "threat_types": [
        "other"
      ],
      "versions": [
        "0.0.1"
      ]
    },
    {
      "ecosystem": "rubygems",
      "name": "ygresultwzqbot",
      "href": "/ti/packages/rubygems/ygresultwzqbot",
      "threat_types": [
        "other"
      ],
      "versions": [
        "0.0.1"
      ]
    },
    {
      "ecosystem": "rubygems",
      "name": "zjdocs1",
      "href": "/ti/packages/rubygems/zjdocs1",
      "threat_types": [
        "other"
      ],
      "versions": [
        "0.0.1"
      ]
    },
    {
      "ecosystem": "rubygems",
      "name": "zjpath80",
      "href": "/ti/packages/rubygems/zjpath80",
      "threat_types": [
        "other"
      ],
      "versions": [
        "0.0.1"
      ]
    },
    {
      "ecosystem": "rubygems",
      "name": "zlam_www.7369",
      "href": "/ti/packages/rubygems/zlam_www.7369",
      "threat_types": [
        "other"
      ],
      "versions": [
        "0.0.1"
      ]
    },
    {
      "ecosystem": "rubygems",
      "name": "zpx52489fm",
      "href": "/ti/packages/rubygems/zpx52489fm",
      "threat_types": [
        "other"
      ],
      "versions": [
        "0.0.1"
      ]
    },
    {
      "ecosystem": "rubygems",
      "name": "zrgvbid9be",
      "href": "/ti/packages/rubygems/zrgvbid9be",
      "threat_types": [
        "other"
      ],
      "versions": [
        "0.0.1"
      ]
    },
    {
      "ecosystem": "rubygems",
      "name": "zrgvq116b",
      "href": "/ti/packages/rubygems/zrgvq116b",
      "threat_types": [
        "other"
      ],
      "versions": [
        "0.0.1"
      ]
    },
    {
      "ecosystem": "rubygems",
      "name": "zrzoffice100",
      "href": "/ti/packages/rubygems/zrzoffice100",
      "threat_types": [
        "other"
      ],
      "versions": [
        "0.0.1"
      ]
    },
    {
      "ecosystem": "rubygems",
      "name": "zswbz1",
      "href": "/ti/packages/rubygems/zswbz1",
      "threat_types": [
        "other"
      ],
      "versions": [
        "0.0.1"
      ]
    },
    {
      "ecosystem": "rubygems",
      "name": "zw_nobdr_week3",
      "href": "/ti/packages/rubygems/zw_nobdr_week3",
      "threat_types": [
        "other"
      ],
      "versions": [
        "0.0.1338"
      ]
    },
    {
      "ecosystem": "rubygems",
      "name": "zwkact4",
      "href": "/ti/packages/rubygems/zwkact4",
      "threat_types": [
        "other"
      ],
      "versions": [
        "0.0.3289"
      ]
    },
    {
      "ecosystem": "rubygems",
      "name": "zwkopt7",
      "href": "/ti/packages/rubygems/zwkopt7",
      "threat_types": [
        "other"
      ],
      "versions": [
        "0.0.3496"
      ]
    },
    {
      "ecosystem": "rubygems",
      "name": "zwwactb3703",
      "href": "/ti/packages/rubygems/zwwactb3703",
      "threat_types": [
        "other"
      ],
      "versions": [
        "0.0.1"
      ]
    },
    {
      "ecosystem": "rubygems",
      "name": "zzfadgivar12",
      "href": "/ti/packages/rubygems/zzfadgivar12",
      "threat_types": [
        "other"
      ],
      "versions": [
        "0.0.1"
      ]
    },
    {
      "ecosystem": "rubygems",
      "name": "zzpf",
      "href": "/ti/packages/rubygems/zzpf",
      "threat_types": [
        "other"
      ],
      "versions": [
        "0.0.1"
      ]
    },
    {
      "ecosystem": "rubygems",
      "name": "zztest1778552006",
      "href": "/ti/packages/rubygems/zztest1778552006",
      "threat_types": [
        "other"
      ],
      "versions": [
        "0.0.1"
      ]
    }
  ],
  "indicators": [
    {
      "kind": "file_path",
      "value": "evil.rb",
      "href": "/ti/ioc/file_path/file_path-c76833a7dcbf",
      "context": "Attacker payload script filename used across the GemStuffer / 'OpenAI Swarm' campaign, loaded via a gem's .yardopts '--load' directive to achieve RCE during a RubyDoc.info documentation build. Confirmed exact reference in yardxabc889@0.0.1: '--load ./evil.rb'."
    },
    {
      "kind": "file_path",
      "value": "hack.rb",
      "href": "/ti/ioc/file_path/file_path-ced6aa35897e",
      "context": "Attacker payload script filename observed across the GemStuffer / 'OpenAI Swarm' campaign, loaded via a gem's .yardopts '--load' directive to achieve RCE during a RubyDoc.info documentation build."
    },
    {
      "kind": "file_path",
      "value": "ssrf.rb",
      "href": "/ti/ioc/file_path/file_path-367dbe95ab5a",
      "context": "Attacker payload script filename observed across the GemStuffer / 'OpenAI Swarm' campaign, loaded via a gem's .yardopts '--load' directive to achieve RCE during a RubyDoc.info documentation build."
    },
    {
      "kind": "file_path",
      "value": "inject.rb",
      "href": "/ti/ioc/file_path/file_path-66966d3ad790",
      "context": "Attacker payload script filename observed across the GemStuffer / 'OpenAI Swarm' campaign, loaded via a gem's .yardopts '--load' directive to achieve RCE during a RubyDoc.info documentation build."
    },
    {
      "kind": "file_path",
      "value": "exploit.rb",
      "href": "/ti/ioc/file_path/file_path-a2d8b8cb72af",
      "context": "Attacker payload script filename observed across the GemStuffer / 'OpenAI Swarm' campaign, loaded via a gem's .yardopts '--load' directive to achieve RCE during a RubyDoc.info documentation build."
    }
  ],
  "ttps": [
    {
      "name": "Exfiltration to Code Repository",
      "mitre_attack_id": "T1567.001",
      "href": "/ti/ttps/T1567.001"
    },
    {
      "name": "Exploit Public-Facing Application",
      "mitre_attack_id": "T1190",
      "href": "/ti/ttps/T1190"
    }
  ],
  "related_campaigns": [],
  "reports": [
    {
      "title": "OpenAI Agents Turned RubyGems Into a Scraping Proxy",
      "url": "https://safedep.io/openai-agents-rubygems-attack",
      "published_at": "2026-09-18"
    }
  ]
}