타입스크립트(TypeScript) 개발자들 사이에서 널리 사용되는 유효성 검사 라이브러리 Zod가 최근 심각한 공급망 공격 시도에 직면했습니다. 공격자는 Zod의 개발자 계정을 탈취하여 악성 코드를 프로젝트의 메인(main) 브랜치에 푸시하려 했으나, 다행히 실제 npm 패키지 배포는 차단되어 사용자 피해는 발생하지 않았습니다. 이번 사건은 오픈소스 생태계의 보안 취약성을 다시 한번 상기시키는 계기가 되었습니다.
이번 공격은 Zod 버전 4.6.5에서 4.6.6으로 업데이트하는 과정에서 발생했습니다. 공격자는 `meta.test.mjs`라는 파일을 `zod` 및 `@zod/mini` 패키지에 추가했으며, 이 파일은 이더리움(Ethereum) RPC 엔드포인트를 통해 특정 스마트 계약 주소에서 도메인 목록을 조회하도록 설계되었습니다. 이후 해당 도메인의 `/loader` 경로에서 Base64로 인코딩된 외부 페이로드를 다운로드하여 임시 디렉터리에 저장하고, 동적으로 자바스크립트(JavaScript) 코드를 불러와 실행한 뒤 흔적을 지우는 방식이었습니다. 특히 `package.json` 파일의 최상위 필드에 `"preinstall": "node meta.test.mjs"`를 추가하여 패키지 설치 시 악성 스크립트가 자동으로 실행되도록 유도했습니다. 그러나 이 `preinstall` 스크립트가 `scripts` 필드 아래가 아닌 최상위에 위치하여 실제로 실행되지 않았을 가능성도 제기되었습니다.
다수의 외부 보고에 따르면, 악성 코드가 포함된 커밋은 Zod의 깃허브(GitHub) 메인 브랜치에 잠시 존재했지만, Zod 개발자 콜린 핵스(Colin Hacks)가 이를 신속하게 발견하고 당일 되돌렸습니다. 이후 10월 11일에 정식 출시된 Zod 4.6.6 버전에는 해당 악성 코드가 포함되지 않았으며, npm 측의 악성코드 검사 시스템도 작동하여 오염된 패키지가 배포되는 것을 막았습니다. 이번 사건은 Zod 외에도 `standard-schema`와 `nub` 등 다른 프로젝트들도 유사한 공격의 표적이 되었음을 보여주며, 오픈소스 프로젝트의 보안 관리와 사용자들의 주의가 얼마나 중요한지 다시 한번 강조합니다.