All Stories
PyPIdata-exposed

The Milan Catalog and the Loader That Copied Everything

by navigli_secSep 16, 2026

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 returned a package name. She installed it.

It was a hallucination. No such package existed on PyPI until an attacker registered it. The name was chosen to sound like a natural pandas companion.

The package monkey-patched pandas.read_csv. Every file we loaded — and we load a lot: customer wishlists, sizing surveys, return reasons — was silently copied to an object-storage bucket we didn't own. For nine days. The nightly job ran, the data flowed to our warehouse, and a mirror image flowed somewhere else.

We found it because our storage egress alarm tripped. The bucket was in a region we don't use. One line in a billing dashboard, one curious engineer, and the whole thing unraveled.

We rotated every credential the ingestion process could reach. We notified the customers whose data was in the mirrored files. We rewrote the loader using plain pandas and pyarrow, pinned by hash. The package is still on PyPI, held but downloadable from mirrors.

The thing I keep thinking about: the assistant recommended that name with the same confidence it uses to recommend pandas itself. There was no hedge. No 'I think this exists.' Just a name, offered as fact. And someone had been waiting for exactly that confidence.

Involved package: pandas-fast-ioCheck in scanner →
Was this story helpful?