Zod 4.6.6, 악성코드 심긴 채 npm에 배포돼
Zod 4.6.6 compromised by malware?
인기 TypeScript 검증 라이브러리 Zod의 4.6.6 버전이 npm에 게시됐지만, 패키지에 악성 스크립트가 포함된 것으로 드러났다. preinstall 훅이 meta.test.mjs를 실행하고, 이 파일은 Ethereum 스마트 컨트랙트에서 주소를 받아 원격 페이로드를 내려받아 실행한다. 4.6.6 설치를 피하고 4.6.5로 되돌릴 것을 권고한다.
preinstall": "node meta.test.mjs"
HN 토론
51- jaynetics
문제가 된 코드는 실제로 릴리스되지 않았습니다. 이 글에 많은 정보가 담겨 있습니다:
- yuvalkarmi
이건 3주 전 일이에요, 여러분. 실제로 리포지토리 침해가 맞았습니다 — Zod의 main까지 들어갔지만 npm에는 못 갔어요.
9월 21일에 누군가 Colin의 git 자격 증명을 이용해 이 오염된 코드를 프로젝트에 푸시했고, Colin이 그걸 발견하고 같은 날 되돌렸습니다 (PR #6620). 그 후 10월 11일에 4.6.6을 릴리스했지만, 그 안에는 감염된 코드가 들어 있지 않았습니다.
참고로 Zod만 표적이 된 게 아닙니다 — standard-schema와 nub에도 같은 공격이 시도됐어요. nub은 실제로 npm까지 갔지만, npm의 악성코드 스캐닝이 막았습니다.
합법적인(음, 불법적인) 공급망 공격 시도처럼 보이지만, 실제로 침해된 Zod 릴리스는 없었습니다.
- luggage_bazooka
가장 최근 버전인 4.6.6에는 아주 흥미로운 커밋(d821685) "Fix bugs and improve performance"이 있는데, 여기에는 다음과 같은 변경 사항이 포함되어 있습니다 https://github.com/colinhacks/zod/commit/d821685ea6732436fcd...
packages/mini/meta.test.mjs가 구체적으로 뭘 하는지는 살펴보지 않았지만, 딱히 좋아 보이진 않네요
- jaapz
might는 꽤 순한 표현이에요, 감염된 게 맞습니다 — 편집: 제목이 바뀌었는데, 원래는 "might be infected"라고 되어 있었어요.
이 악성코드는 zod가 설치될 때 실행되는 JS 페이로드를 심는 것 같고, 이더리움 스마트 컨트랙트에서 가져오는 방식입니다 (제가 제대로 이해했다면요).
npm에서 해당 버전에 플래그하는 것도 잊지 마세요.
편집: 보아하니 그 업데이트는 NPM에 올라가지 않은 것 같네요: https://news.ycombinator.com/item?id=50053253
- xx_ns
흥미롭게도, 그들은 `preinstall` 키(설치 시 악성 스크립트를 실행하도록 되어 있는)를 `scripts` 아래가 아니라 package.json 루트에 추가했는데, 제가 볼 때는 그래서 설치 시 실행되지 않을 겁니다.
그 외에는, 네, 이건 이더리움 메인넷에서 페이로드를 가져와 실행하는 stage-1 로더처럼 보입니다.