GitHub, 공급망 공격 방지를 위해 npm 설치 스크립트를 기본 비활성화

발행: (2026년 6월 11일 PM 03:23 GMT+9)
5 분 소요

출처: The Hacker News

Ravie LakshmananJun 11, 2026 개발자 보안 / 소프트웨어 공급망

Supply Chain Attacks

GitHub은 npm 버전 12에 적용될 **“파괴적 변화”**를 발표했으며, 그 중 하나는 소프트웨어 공급망 위협에 대응하기 위해 설치 스크립트를 기본적으로 비활성화한다는 내용이다.

이러한 변화는 “npm install” 명령을 악용해 npm 라이프사이클 훅을 통해 악성 코드를 실행하는 공격 기법을 방지하기 위한 것이다. “npm install”은 Node.js 프로젝트에 필요한 모든 의존성을 다운로드하고 설치하는 데 사용된다. 버전 12는 다음 달에 출시될 예정이다.

GitHub은 설치 시점 라이프사이클 스크립트를 **“npm 생태계에서 가장 큰 코드 실행 표면”**이라고 설명하면서, “npm install” 명령이 모든 전이 의존성의 스크립트를 실행한다는 점을 강조했다. 따라서 의존성 트리 어디에든 하나의 패키지만 손상되어도 개발자 머신이나 CI 러너에서 임의 코드를 실행할 수 있다.

이러한 동작을 차단함으로써 “npm install” 중 자동으로 코드가 실행되기 전에 명시적인 사용자 승인을 요구하게 된다. GitHub은 “스크립트 실행을 옵트인 방식으로 전환하면, 신뢰하는 패키지는 한 번의 명령만으로 유지하면서 그 외 경로는 차단한다”고 밝혔다.

변경 사항은 다음과 같다.

  • npm install프로젝트에서 명시적으로 허용하지 않은 경우 의존성의 preinstall, install, postinstall 스크립트를 실행하지 않는다.
  • npm install직접이든 전이이든 Git 의존성을 --allow-git 옵션으로 명시적으로 허용하지 않으면 해결하지 않는다.
  • npm installhttps tarball 등 원격 URL에서 오는 의존성을 --allow-remote 옵션으로 명시적으로 허용하지 않으면 해결하지 않는다.

Microsoft 계열사인 GitHub는 기본 allowScripts 동작 변경에 대해 “네이티브 node-gyp 빌드(예: binding.gyp가 포함된 패키지이며 명시적 설치 스크립트가 없어도 차단됨)는 npm이 암묵적으로 node-gyp 재빌드를 수행하기 때문에 차단된다”고 설명했다. “Git, 파일, 링크 의존성의 prepare 스크립트도 동일하게 차단된다.”

--allow-git을 기본값 **“none”**으로 설정함으로써, Git 의존성의 .npmrc 파일이 Git 실행 파일을 재정의하는 코드 실행 경로를 닫는다. 이는 --ignore-scripts 플래그(npm-ignore-scripts 베스트 프랙티스)를 사용하더라도 적용된다. --ignore-scriptspackage.json에 지정된 패키지가 설치 과정에서 내장된 라이프사이클 스크립트를 자동으로 실행하는 것을 방지한다.

GitHub은 개발자들에게 npm 11.16.0 이상으로 업그레이드하고, 일반 설치를 수행한 뒤 표시되는 경고를 검토할 것을 권고한다.

npm approve-scripts --allow-scripts-pending 명령을 사용해 스크립트를 포함한 패키지를 확인하고, 신뢰하는 패키지를 승인한 뒤 package.json을 커밋하세요. 이후 업그레이드하면 승인된 스크립트만 실행되고, 승인하지 않은 스크립트는 차단됩니다.”

올해 초 npm은 “min-release-age” 설정도 도입했는데, 이는 지정된 일수보다 최신에 게시된 패키지 버전을 거부하도록 하여 새로 배포된 악성 패키지에 대한 방어를 강화한다.

이 기사가 흥미로우셨나요? 더 많은 독점 콘텐츠를 보려면 Google News, TwitterLinkedIn을 팔로우하세요.

0 조회
Back to Blog

관련 글

더 보기 »