npm v12, 보안 기본값 변경으로 개발자들의 준비가 필요함
npm v12는 스크립트 실행 및 Git/원격 URL 의존성에 대한 기본값을 변경하여 보안을 강화함
allowScripts, allow-git, allow-remote 옵션이 기본적으로 비활성화되어 명시적 허용 필요
기존 npm 버전에서 경고 메시지 확인 및 `npm approve-scripts` 도구를 통한 사전 준비 권장
공급망 공격(Supply Chain Attack) 완화 효과와 함께 개발 워크플로우 변경에 대한 논의가 진행 중임
스크립트 실행 기본값 비활성화의 영향
npm v12에서 `allowScripts` 기본값 비활성화는 `preinstall`, `install`, `postinstall` 스크립트 실행을 차단한다. 이는 네이티브 Node-gyp 빌드를 포함한 모든 스크립트 기반 설치를 명시적으로 허용해야 함을 의미한다. 커뮤니티에서는 이를 공급망 공격(Supply Chain Attack)의 주요 경로를 차단하는 긍정적 조치로 평가하지만, 기존 워크플로우에 영향을 줄 수 있다는 우려도 제기된다. `npm approve-scripts` 도구를 통해 신뢰하는 패키지만 허용하도록 허용 목록(Allowlist)을 관리해야 한다.
Git 및 원격 URL 의존성 제한
이번 변경으로 `--allow-git` 및 `--allow-remote` 옵션의 기본값이 `none`으로 변경되어 Git 의존성 및 원격 URL 기반 의존성 해결이 기본적으로 차단된다. 이는 코드 실행 경로(Code Execution Path)를 차단하여 보안을 강화하려는 목적이다. 특히 Git 의존성의 `.npmrc` 파일이 Git 실행 파일을 재정의하는 취약점을 해결하기 위한 조치로 분석된다. 개발자는 필요한 경우 명시적으로 해당 옵션을 활성화해야 한다.
보안 강화와 개발자 경험 트레이드오프
Lobsters 커뮤니티에서는 npm v12의 변경 사항이 공급망 공격 표면(Attack Surface)을 줄이는 데 기여할 것이라는 데 동의한다. 하지만 패키지 관리자의 본질인 임의 코드 실행(Arbitrary Code Execution) 가능성을 완전히 제거하지는 못하며, 단순히 악성 코드가 실행되는 위치만 옮길 뿐이라는 지적도 있다. 데이터 격리 아키텍처(Data Isolation Architecture)나 샌드박싱(Sandboxing)과 같은 더 근본적인 해결책이 필요하다는 의견이 제시된다.
향후 발전 방향 및 제안
일부 논의에서는 ESM(ECMAScript Modules)의 import defer 제안과 같은 기술이 향후 패키지 의존성 관리에 도움을 줄 수 있을 것으로 기대한다. 또한, 개별 의존성을 샌드박스 환경에서 실행하거나 권한을 제한하는 방안에 대한 speculative한 논의도 이루어지고 있다. 이번 npm v12의 변경은 이러한 미래 지향적인 보안 강화 방향으로 나아가는 필수적인 단계(Necessary Step)로 평가된다.