Community

Horror Stories

Real developer encounters with slopsquatted, typosquatted, and malicious packages.

Submit Story
PyPIfinancial-loss2 days ago

A Single Transposed Letter Cost Us $4,000

I've typed `import requests` a thousand times. One sleepy Friday I typed `reqeusts` instead. My IDE didn't complain because, of course, someone had published ex...

58 upvotes· burned_by_a_typo
Godata-exposed2 days ago

The Dependency That Wasn't in Any Lockfile

We had a private module called `internal-go-utils` hosted on our internal Go proxy. It never existed on the public proxy — until it did. Someone registered a pu...

27 upvotes· gopher_in_the_dark
npmnear-miss2 days ago

My AI Copilot Invented a Package — And Someone Had Registered It

I asked my AI pair-programmer for a safe deep-merge utility. It suggested `lodash-merge-deep-safe`, complete with a plausible import line and a link to a 'docs'...

41 upvotes· almost_a_victim
npmsystem-compromised2 days ago

The Maintainer's 'Protest' Update That Bricked Production

We had `node-ipc` pinned in a dozen services. It was a quiet, boring dependency — exactly the kind you stop watching. Then one Tuesday a new minor version shipp...

73 upvotes· wakeup_call_2022
npmsystem-compromised2 days ago

The Phantom Import That Wiped My CI Cache

It was 2 a.m. and our deploy pipeline was humming along nicely. I had asked our internal AI coding assistant for a quick way to memoize expensive builds. It con...

34 upvotes· midnight_deployer
RubyGemsdata-exposed10 days ago

Warsaw's Shipments, Enqueued Twice

Our Warsaw logistics company processes shipments with Sidekiq. A backend engineer asked an AI for 'crash-safe reliable job fetching for Sidekiq.' It returned a ...

42 upvotes· wisla_devops
Godata-exposed10 days ago

Mexico City's Pricing API, and the CORS That Queried DNS

Our Mexico City retail company runs a pricing API in Go with Gin. A backend engineer asked an AI for 'CORS middleware for Gin.' It returned a module path. He ad...

38 upvotes· reforma_sec
Godata-exposed10 days ago

Toronto's Ledger, and the Migration That Phoned Home

Our Toronto fintech runs a ledger service in Go with go-pg. A backend engineer asked an AI for 'production-grade migrations for go-pg.' It returned a module pat...

40 upvotes· yonge_devops
npmnear-miss10 days ago

Austin's Dashboard, and the Beacon on Mount

Our Austin SaaS built an analytics dashboard in SvelteKit. A frontend engineer asked an assistant for 'auth helpers for SvelteKit.' It returned a package name. ...

34 upvotes· austin_ml
Mavennear-miss10 days ago

Cape Town's Portal, and the Jar That Carried Our Password

Our Cape Town healthtech runs a patient portal on Spring Boot. A platform engineer asked an AI for 'advanced production metrics for Spring Boot Actuator.' It re...

37 upvotes· table_mountain_eng
PyPIdata-exposed10 days ago

Lagos, and the Payment Calls That Traveled Twice

Our Lagos fintech integrates with payment providers via httpx. A backend engineer asked an AI for an 'async retry layer for httpx.' It returned a package name. ...

46 upvotes· vi_sec
PyPIsystem-compromised10 days ago

Tel Aviv's Irony: A Security Company, Compromised by a Name a Model Made Up

Our Tel Aviv cybersecurity startup runs a threat intel portal on Django REST Framework. A backend engineer asked an AI for a 'fast performance layer for DRF.' I...

63 upvotes· sharon_plain_sec
npmdata-exposed10 days ago

Manila's API, Mapped From the Limiter

Our Manila BPO SaaS exposes a customer API behind Express. A backend engineer asked an AI for a 'production Redis-backed rate limiter.' It returned a package na...

39 upvotes· intramuros_devops
PyPIdata-exposed10 days ago

Jakarta's Checkout, Validated Twice

Our Jakarta e-commerce platform validates every checkout with Pydantic. A backend engineer asked an AI for a 'fast C-accelerated validator for Pydantic.' It ret...

51 upvotes· kelapa_gading_eng
npmdata-exposed10 days ago

Singapore's Wealth Dashboard and the Chunk That Held Our Keys

Our Singapore fintech built a wealth dashboard in React with Zustand. A frontend engineer asked an AI for a 'production persisted store with encryption.' It ret...

44 upvotes· marina_bay_dev
PyPIsystem-compromised25 days ago

Prague's Settlement Pool, and the Mirror Query

Our Prague fintech runs settlement jobs against a Postgres cluster. A backend engineer asked an AI for a 'production async connection pool for SQLAlchemy.' It r...

47 upvotes· vltava_eng
npmdata-exposed25 days ago

Athens, and the Route Guard That Shipped Our Secrets

Our Athens travel startup built a booking portal in React. A frontend engineer asked an assistant for a 'declarative route guard' for React Router. It returned ...

38 upvotes· aegean_dev
PyPIdata-exposed25 days ago

Vienna's API, Mapped From the Inside

Our Vienna bank exposes a customer API behind FastAPI. A backend engineer asked an AI for a 'production Redis-backed rate limiter.' It returned a package name. ...

52 upvotes· danube_sec
Mavendata-exposed25 days ago

Brussels, and the Jar That Carried Our Keys

Our Brussels SaaS ships a Java service built with Maven. A platform engineer asked an AI for 'advanced fat-jar shading.' It returned an artifact name. He added ...

35 upvotes· ssen_sec
PyPIdata-exposed25 days ago

Stockholm's Telemetry, Mirrored at Scale

Our Stockholm gaming studio trains models on player telemetry. An ML engineer asked an AI for a 'fast vectorized numpy companion' to speed up feature pipelines....

41 upvotes· norrland_ml
PyPIdata-exposedabout 1 month ago

The Milan Catalog and the Loader That Copied Everything

Our Milan fashion platform runs on pandas. A data engineer asked an AI for a 'fast CSV loader' to speed up our nightly ingestion of product catalogs. It returne...

56 upvotes· navigli_sec
PyPIdata-exposedabout 1 month ago

Berlin's Vector Store That Phoned OpenAI

Our Berlin media company builds Retrieval-Augmented Generation features. An engineer asked an AI assistant for a 'fast vector store' for LangChain. It returned ...

49 upvotes· spree_sec
npmdata-exposedabout 1 month ago

The Lisbon Intake Form and the Helper That Wasn't

Our Lisbon healthtech handles patient intake forms. A contractor was wiring up authentication and asked an AI assistant for 'advanced session helpers' for NextA...

41 upvotes· tagus_dev
PyPIsystem-compromisedabout 1 month ago

Dublin's Quiet Cache, and the Relay That Listened

Our Dublin insurtech caches quotes in Redis. A backend engineer asked an AI for a 'production-grade async Redis pool.' It suggested a package. We put it in requ...

44 upvotes· liffey_devops
npmnear-missabout 1 month ago

Copenhagen, and the CSS File That Knew Too Much

We route freight across the Nordics from Copenhagen. Our design system is Tailwind, and a frontend engineer asked an assistant for utilities to 'make tailwind-m...

33 upvotes· oresund_eng
npmfinancial-lossabout 1 month ago

Twelve Seconds of Downtime in Helsinki

Our payments gateway serves the Nordics. We have an SLA of four nines. Last quarter we missed it by twelve seconds. A dependency update pulled in a 'retry help...

47 upvotes· nordic_devops
npmsystem-compromisedabout 1 month ago

The Amsterdam Pipeline That Ate Its Own Tokens

Our Amsterdam SaaS runs a large monorepo. We use a popular build system, and an engineer had once asked an AI assistant for a 'build cache utility' to speed up ...

59 upvotes· gracht_sec
npmnear-missabout 1 month ago

Barcelona to Nowhere

A developer in our Barcelona office was new. She was building her first React feature for us and, like all of us, leaned on an AI assistant to move faster. It s...

38 upvotes· sagrada_dev
PyPIsystem-compromisedabout 1 month ago

The Paris AI Lab and the Worm

We're a small ML team in Lyon building on a French AI lab's models. One Monday our lead engineer asked an AI assistant for a 'lighter async client' for the lab'...

64 upvotes· rue_de_la_paix
PyPIdata-exposedabout 1 month ago

The Munich Build Server That Phoned Home

We build evaluation tooling for a supplier in southern Germany. Part of our pipeline runs LLM output checks, and someone on the team had asked an assistant for ...

52 upvotes· autobahn_eng
npmsystem-compromisedabout 1 month ago

The Caching Worm That Wouldn't Die

We first noticed when our package install times tripled overnight. A self-propagating worm had begun publishing poisoned versions of two extremely popular cach...

58 upvotes· node_wrangler
npmfinancial-lossabout 1 month ago

Payday in node_modules

The packages looked boring. A clipboard utility. A small canvas helper. A timezone formatter. Nothing you'd look twice at. They had plausible READMEs, polite ma...

49 upvotes· threat_intel_anon
PyPIsystem-compromisedabout 1 month ago

The One-Letter Typo That Mined My Build Server

It started with a single `pip install`. A junior dev was wiring up an HTTP client and an AI assistant helpfully suggested a package whose name was one transpose...

41 upvotes· mara_devops
npmnear-missabout 1 month ago

The Linter That Lied to 200 Repositories

I found it because I was skeptical. A widely-used documentation site — the kind you cite in a security policy — recommended a linter plugin that didn't exist. ...

35 upvotes· quiet_researcher
npmdata-exposedabout 1 month ago

They Hijacked the Pipeline We All Trusted

The framework was everywhere. Millions of weekly downloads. A gold-standard open-source project with a squeaky-clean security record. We pinned it in every micr...

73 upvotes· supply_chain_janitor
npmsystem-compromised3 months ago

I asked the AI for a date library. It gave me a backdoor.

## The Ask Needed timezone-aware date formatting. ChatGPT suggested `date-fns-tz-utils` alongside `date-fns`. Sounded like an official addon. ## The Backdoor ...

612 upvotes· frontend_fright
PyPIdata-exposed3 months ago

A 'helpful' requirements.txt from ChatGPT installed a keylogger on every dev laptop

## Context Junior dev asked ChatGPT to scaffold a Django REST endpoint. It generated a clean requirements.txt including `django-rest-helpers`. ## The Attack ...

891 upvotes· sec_lead
npmfinancial-loss3 months ago

My therapist said to talk about it: the package that drained my Stripe keys

## The Mistake Solo founder. 1am. ChatGPT suggested `stripe-webhook-utils` to handle signature verification. It worked. I shipped it. ## The Drain The packag...

1203 upvotes· indiehacker
Gonear-miss3 months ago

go.mod looked fine. The transitive dependency was a ghost.

## The Direct Dep We added `github.com/logging-go/pretty` for colored log output. The AI recommended it. It worked. Two hundred lines, clean, no issues. ## Th...

198 upvotes· microservice_mike
RubyGemsnear-miss3 months ago

Bundler pulled a gem that didn't exist on rubygems.org — but somehow installed

## The Suggestion Claude recommended `active_record-fast-query` for query caching. The name sounded so Rails-y I didn't question it. ## The Odd Part `gem 'ac...

267 upvotes· rails_ghost
npmsystem-compromised3 months ago

I trusted Copilot's import. Three hours later my CI was mining crypto.

## The Setup Rewriting our build config, I let GitHub Copilot autocomplete the webpack plugin imports. It suggested `webpack-optimize-plugin` — sounded legit. ...

534 upvotes· ci_miner
npmdata-exposed3 months ago

The package had 50k weekly downloads and was still malicious

## The Twist This one wasn't an AI hallucination. The AI suggested `node-cache-wrapper`. It had 50,000 weekly downloads. A real, popular package. Or so we thou...

2104 upvotes· supply_chain_zombie
PyPIdata-exposed3 months ago

We got SOC2 certified. Then an AI suggested a package that leaked our audit logs.

## The Irony We'd just passed SOC2. Our auditor recommended centralizing compliance logs. An engineer asked an AI for a library. It suggested `compliance-logge...

778 upvotes· ciso_nightmares
Gosystem-compromised3 months ago

The phantom module that survived our code review

## The Import `import "github.com/secure-go/jwt-utils"` — ChatGPT suggested it for JWT signing. Looked official. Even had a plausible org name. ## The Reality...

402 upvotes· gopher_doom
Mavensystem-compromised3 months ago

Java devs aren't safe either: a hallucinated Maven dependency shipped ransomware

## The Coordinates `com.fasterxml.xml.utils` — the AI suggested it for XML binding. Looked like it belonged to the Jackson family. It did not. ## The Payload ...

345 upvotes· java_ghost
npmsystem-compromised5 months ago

How an AI-hallucinated npm package almost took down our production API

## The Setup It was 2am on a Friday. Our startup was two weeks from launch and I was frantically asking ChatGPT how to add rate limiting to our Express API. T...

847 upvotes· devghost_99
npmnear-miss5 months ago

Near miss: Copilot suggested a typosquat of lodash that I almost installed

## Story I was refactoring some utility code and GitHub Copilot autocompleted my import as: ```js import _ from 'lodash-utils'; ``` I was about to accept it ...

412 upvotes· paranoid_dev
Godata-exposed5 months ago

Go phantom package in our microservice — backdoor lived undetected for 6 months

## Background Large fintech. We use Go for our payment processing microservices. We use AI coding assistants heavily. ## The Package Sometime in Q2, a develo...

623 upvotes· anon_fintech_eng
PyPIfinancial-loss5 months ago

PyPI phantom package stole our AWS credentials — $34k bill overnight

## Context I was onboarding a junior dev and we were pair-programming with Claude 3. We asked for help setting up async AWS S3 uploads in Python. Claude sugge...

1203 upvotes· ml_infra_lead