Mass Scanning Found the One Asset Nobody Inventoried
Credential theft from a developer's machine leaves no host artifact, so the only place you can scope this incident is your cloud and SaaS audit logs.
The exploitation leaves nothing on the host
One unauthenticated HTTP GET, one file read, and the secrets are gone. There is no dropped binary, no anomalous process tree, no failed authentication. Everything that happens after the read looks like legitimate API usage from a new source IP, which means your endpoint telemetry will never produce the artifact you would use to open a case.
That moves the entire detection opportunity off the developer machine and into two log sources you already own: cloud control-plane logs and SaaS audit logs, correlated against the source ranges each key is supposed to be used from. If you cannot answer the question which secrets sat in .env files on machines reachable from outside loopback in the last thirty days, you cannot scope this, and the only defensible position is to assume compromise and rotate.
Why this outruns a normal dependency bump
A dev server is not an asset anyone inventoried. It runs on engineer laptops, inside containers, in CI preview jobs, and inside third-party AI app-builder sandboxes, and it gets bound to 0.0.0.0 routinely so somebody can test on a phone. React Status reports that a single AI app-builder platform spins up roughly one million Vite dev servers per day — the exact software class reported under active scanning, at a scale no security team has audited. If your engineers use those builders with real environment variables, your secrets are living in someone else's ephemeral sandbox, on their patch cadence and their notification timeline.
Two release lines carry the fix, which matters operationally: a generic "upgrade to latest" directive misses every team held back on 7.x. Set explicit floors, at 7.3.2 and 8.0.5, and enforce them as a merge gate rather than a wiki page.
The CI half of the same problem
GitHub shipped a per-job cache-mode scoping control for Actions specifically because cache poisoning compromised TanStack's published npm packages. Read that as a privilege boundary, not a performance setting: an unscoped cache lets a low-privilege pull-request job reach the cache a release job consumes, which is how a trojanized package gets published under your own organization name. The same review should check installed TanStack versions in your SBOM against the compromise window and validate artifact hashes against current registry provenance.
Where the reporting converges, and where it stops
Two independent reports point at the same neglected surface. React Status names developer dev servers on ports 5173, 4173 and 3000; Daily Dose of Data Science independently flags port 3000 listeners outside loopback as the discovery indicator for agent harness consoles. Different software, identical failure: convenience tooling reachable by things that are not developers.
The divergence is a sourcing gap you should name to your team. React Status publishes no CVE identifier for the Vite flaw. Treat that as a vulnerability-tracking gap rather than an absence of risk, and open a local record so the item does not fall out of your queue for lack of an identifier.
Attackers stopped attacking our production apps and started attacking our developers' laptops — and the .env file on a dev server is worth more than any endpoint in the DMZ.
Compliance follows quickly. If leaked credentials touched systems holding personal data, the GDPR Article 33 awareness clock starts on discovery, and exposed dev servers map directly onto SOC 2 CC6.1 and CC6.6 for logical access and boundary protection, with unscoped CI caches landing in CC8.1 change management. Document the exposure window, patch state and rotation evidence as you go; reconstructing it later under regulator questioning costs far more.
What to do
Set explicit Vite version floors as a CI merge gate — 7.3.2 or later on the 7.x line, 8.0.5 or later on 8.x — and run an external scan of your ranges, dev VPN subnets and cloud preview environments for listeners on 5173, 4173 and 3000 as a priority.
Rotate every cloud key, database credential and third-party token that lived in a .env on a non-loopback-bound dev server, then review cloud and SaaS audit logs for use of those keys from unexpected source IPs across the last 30 days.
Enable GitHub Actions cache-mode scoping per job, pin every third-party action to a full commit SHA, and produce a written determination for each TanStack package in your SBOM this quarter.