Zod 4.6.6 compromised by malware?
luggage_bazooka
180 points
51 comments
October 12, 2026
Related Discussions
Found 5 related stories in 97.2ms across 9,270 title embeddings via pgvector HNSW
- Zod v4.5 adds schema compilation (3-9x faster validation) birdculture · 20 pts · August 29, 2026 · 58% similar
- Z.ai Security Disclosure Alifatisk · 32 pts · August 14, 2026 · 53% similar
- Researcher Tricked Claude, Codex and Hermes into Running Malware CuriousLLM · 12 pts · August 29, 2026 · 50% similar
- Plugin4Shell – Zero Click RCE Vulnerability found in top four coding agents fishthethis · 11 pts · September 17, 2026 · 50% similar
- Incident with Github.com [resolved] SpyCoder77 · 536 pts · August 17, 2026 · 49% similar
Discussion Highlights (16 comments)
luggage_bazooka
The most recent version 4.6.6 has a very interesting commit (d821685) "Fix bugs and improve performance", that contain the following changes https://github.com/colinhacks/zod/commit/d821685ea6732436fcd... I didn't study what packages/mini/meta.test.mjs is doing in particular but it's not looking great
erzhan89
malicious remote-code loader
jaapz
Might is pretty tame, it is infected - EDIT: title was changed, it said "might be infected". The malware seems to inject some JS payload to execute when zod is installed, by fetching it from an ethereum smart contract (if I understand it correctly). Don't forget to flag the version on npm. EDIT: looks like the update never got on NPM: https://news.ycombinator.com/item?id=50053253
rarisma
Yep, def looks bad. Just pasted the code into claude to try and decipher the minified js and looks like it tries to find the server via the blockchain? and then download further stuff from there.
citbl
This is so bad it doesn't even try to hide itself.
throwawayy6767
What are we looking at exactly? Gia Tan situation? Prompt injection?
MisterMunchkin
That is 100% a compromised repo. It's a malware downloader. I feel like they could have done a better job here. Having just a few changes, one of which is a huge blob of blatantly compromising code, is just too obvious. The URLs are interesting, I don't do anything in this area but I didn't know that you could use the blockchains to hide your command and control URL, in a way that allows you to remotely update the URL whenever you want. It turns out there is a use for blockchain! Making control URLs immune to takedowns!
xx_ns
Interestingly, they added the `preinstall` key (that is supposed to run the malicious script when installed) under the package.json root, and not under `scripts`, so from what I can tell this wouldn't run on install. Otherwise, yeah, this seems like a stage-1 loader for fetching and running a payload off the Ethereum mainnet.
jaynetics
The compromised code wasn't actually released. This write-up has a lot of information: https://github.com/orgs/community/discussions/208477
Jarred
I haven’t downloaded the tarball to verify, but it looks like it was reverted prior to the GitHub release: https://github.com/colinhacks/zod/commit/10dda3a3a4bc76ed0bf...
blueblazin
How is this even possible? The change is small and literally has an ethereum URL in the code changes. How did it go through?
oraro
classic crypto people doing classic crypto things
yuvalkarmi
This is 3 weeks back, folks. It WAS real repository compromise - it made it to Zod's main, but not to npm. On September 21, someone used Colin's git credentials to push this compromised code into the project, Colin caught it, and reverted it that same day (PR #6620). He subsequently did release 4.6.6 on October 11, but it did NOT contain the infected code. Btw, Zod wasn't the only package targeted - same attack was attempted against standard-schema and nub. Nub DID make it to npm, but npm's malware scanning blocked it. Looks like a legit (well, illegitimate) attempted supply-chain attack, but no actual Zod release was compromised.
hizlikovboy27
I have many projects using this library. do u think the situtation is urgent, a code red? I will need to talk to clients accordingly.
Meneth
The compromised code is still tagged on Github as of 2026-10-12T10:37:51: https://github.com/colinhacks/zod/releases/tag/v4.6.6 . See commit d821685.
colinmcd
Zod maintainer here. As others have noted, this was three weeks ago and no malware was shipped in any release. Zod's releasing CI was never triggered and it was not vulnerable to this kind of attack. It uses environment-scoped trusted publishing, so a regular push credential is not enough to trigger releasing. There's a security writeup from the NPM team here[0], though it strongly implies that malicious versions of Zod and Standard Schema were caught by their malware scanner. That's not the case. The attacker was not able of triggering Zod's release CI in the first place. I clarified this in my followup comment[1] and asked them to pick more accurate wording to avoid unnecessary FUD like this. It seems like a git push credential, probably an SSH key, was exfiltrated from my local computer. The attacker used this to try to push malicious versions of Zod, Standard Schema, and nub. The release workflows for Zod and Standard Schema were not vulnerable against this. (Nub was, however, a release run was triggered, and npm's malware detector did flag it and prevent publication.) It seemed shady to scrub the commits from history, and it still isn't obvious that doing so is better from a security standpoint. But since there are concerns around git bisect, etc, I've done so anyway. v4.6.6 will lose provenance, v4.6.7 is being released. Since I don't know exactly what else what compromised, I've also done a fresh OS re-install and rotated all creds present on the old machine at the time of the compromise. All my packages have been switched over to staged publishing, which requires 2FA for any release. Ironically this likely happened due to some work on an OS-level sandbox for Nub's package manager, designed to limit the blast radius of malicious lifecycle scripts. The attack is consistent with an more primitive precursor to the modern Shai-Hulud-style worms. While working on the sandbox, an ersatz agent likely executed a compromised version of some package on npm in a test run. I had safeguards against this (filtering out any OSV-flagged packages, etc) but perhaps there's an undiscovered malicious package. Future work on this feature will happen on an isolated VM. [0] https://github.com/orgs/community/discussions/208477 [1] https://github.com/orgs/community/discussions/208477#discuss...