본문으로 건너뛰기
피드

npm 12, 설치 스크립트와 원격 의존성을 기본 차단한다

devops 약 8분
vote
0
댓글
북마크

npm 12부터 `npm install`의 기본 동작이 보안 중심으로 바뀐다. 의존성의 설치 스크립트, Git 의존성, 원격 URL 의존성이 자동 실행·해결되지 않고 프로젝트에서 명시적으로 허용해야 한다. npm 11.16.0 이상에서 미리 경고를 확인하고 허용 목록을 커밋해두는 게 핵심이다.

  • 1

    npm 12는 2026년 7월 출시 예정이며 설치 과정의 자동 동작을 명시적 허용 방식으로 바꿈

  • 2

    의존성의 `preinstall`, `install`, `postinstall`, `prepare` 스크립트가 기본 차단됨

  • 3

    네이티브 `node-gyp` 빌드도 암묵적 설치 스크립트로 취급돼 차단될 수 있음

  • 4

    Git 의존성과 원격 tarball 의존성도 기본적으로 해결되지 않으며 별도 플래그가 필요함

  • npm 12에서 npm install 기본값이 꽤 크게 바뀜
    • 출시 예상 시점은 2026년 7월
    • 핵심 방향은 “설치 중 자동으로 실행되던 위험한 동작을 기본 차단하고, 프로젝트가 명시적으로 허용하게 만들기”임
    • npm 11.16.0 이상에서는 이미 경고 형태로 확인할 수 있어서 미리 준비 가능함

⚠️주의

> npm 12로 올라가면 지금은 조용히 돌아가던 설치 스크립트나 Git 의존성이 갑자기 멈출 수 있음. 특히 네이티브 모듈이 많은 프로젝트는 CI에서 먼저 터질 가능성이 큼.

  • 첫 번째 변화는 allowScripts 기본값이 꺼지는 것임

    • npm 12부터 npm install은 의존성 패키지의 preinstall, install, postinstall 스크립트를 자동 실행하지 않음
    • 신뢰하는 패키지만 프로젝트에서 명시적으로 허용해야 계속 실행됨
    • Git, file, link 의존성의 prepare 스크립트도 같은 방식으로 막힘
  • 여기서 중요한 함정은 node-gyp 네이티브 빌드도 막힐 수 있다는 점임

    • 패키지에 명시적인 install 스크립트가 없어도 binding.gyp가 있으면 npm이 암묵적으로 node-gyp rebuild를 돌리는 경우가 있음
    • npm 12에서는 이것도 설치 중 실행되는 동작으로 보고 차단 대상에 포함함
    • 즉 네이티브 애드온을 쓰는 패키지는 단순 JS 패키지보다 영향 확인이 더 필요함
  • 준비 방법은 npm 11.16.0 이상에서 경고를 먼저 보는 것임

    • 평소처럼 설치를 돌리면 어떤 스크립트가 차단될 예정인지 경고를 볼 수 있음
    • npm approve-scripts --allow-scripts-pending을 실행하면 허용 후보를 확인할 수 있음
    • 신뢰하는 패키지는 npm approve-scripts로 허용하고, 나머지는 npm deny-scripts로 막으면 됨
    • 결과 허용 목록은 package.json에 기록되므로 커밋해야 함
  • 두 번째 변화는 Git 의존성이 기본적으로 막힌다는 것임

    • npm 12에서 --allow-git 기본값은 none이 됨
    • 직접 의존성이든 전이 의존성이든 Git 저장소에서 패키지를 가져오려면 명시적으로 허용해야 함
    • 이 변경은 2026년 2월 18일에 이미 예고됐고, npm 11.10.0 이상에서 사용할 수 있음
  • Git 의존성을 막는 이유는 코드 실행 경로가 있었기 때문임

    • Git 의존성의 .npmrc가 Git 실행 파일을 바꿀 수 있는 문제가 있었음
    • 심지어 --ignore-scripts를 써도 이 경로가 완전히 닫히지 않았다는 게 포인트임
    • 그래서 npm은 스크립트 차단만으로 부족하다고 보고 Git 의존성 해석 자체를 opt-in으로 바꿈
  • 세 번째 변화는 원격 URL 의존성 차단임

    • npm 12에서 --allow-remote 기본값도 none이 됨
    • https tarball 같은 원격 URL 의존성은 직접이든 전이든 명시적으로 허용하지 않으면 해결되지 않음
    • 이 플래그는 npm 11.15.0 이상에서 이미 사용할 수 있음
    • 관련 플래그인 --allow-file, --allow-directory는 npm 12에서 기본값이 바뀌지 않음

💡

> 지금 할 일은 npm을 11.16.0 이상으로 올리고 평소 설치 루틴을 그대로 돌려보는 것임. 경고를 보고 허용할 패키지를 정리한 뒤 package.json 변경분을 커밋해두면 npm 12 업그레이드 충격을 줄일 수 있음.

  • 이 변화는 자바스크립트 생태계의 오래된 공급망 보안 문제를 정면으로 건드림

    • 지금까지는 패키지를 설치하는 것만으로 의존성의 임의 스크립트가 실행될 수 있었음
    • 빌드 편의성은 좋았지만, 악성 패키지나 탈취된 패키지에는 너무 좋은 공격 표면이었음
    • npm 12는 “자동 실행”을 줄이고 “프로젝트가 신뢰를 선언”하는 모델로 옮겨가는 셈임
  • 실무적으로는 CI, Docker 빌드, 온보딩 문서까지 같이 봐야 함

    • 로컬에서는 이미 캐시나 빌드 산출물이 있어서 괜찮아 보여도, 깨끗한 CI 환경에서 설치가 실패할 수 있음
    • 네이티브 모듈, Git 기반 사내 패키지, 원격 tarball을 쓰는 프로젝트는 특히 먼저 확인해야 함
    • 글로벌 설치나 npx 관련 설정은 allow-scripts 설정 문서를 같이 봐야 함

기술 맥락

  • npm 12의 선택은 설치 편의성보다 공급망 보안을 우선하겠다는 쪽이에요. 지금까지 npm은 패키지 설치 과정에서 필요한 빌드 스크립트를 자동으로 돌려줬는데, 이 자동 실행이 악성 패키지 입장에서는 가장 쉬운 진입로가 되거든요.

  • 특히 postinstall 같은 lifecycle script는 개발자가 앱 코드를 실행하기도 전에 돌아가요. 그래서 공격자는 사용자가 패키지를 설치하는 순간 토큰을 빼가거나 추가 코드를 내려받게 만들 수 있어요. npm이 허용 목록 방식으로 바꾸는 이유가 여기에 있어요.

  • node-gyp까지 포함된 점도 현실적인 변경이에요. 네이티브 애드온은 설치 시점에 빌드가 필요해서 자동 실행에 많이 기대왔거든요. 하지만 보안 모델 입장에서는 암묵적 node-gyp rebuild도 결국 로컬에서 코드를 실행하는 동작이라 별도로 신뢰를 확인해야 해요.

  • Git 의존성과 원격 tarball 차단은 패키지 레지스트리 바깥 경로를 줄이려는 조치예요. 레지스트리 패키지는 그래도 npm의 일반적인 검증과 추적 흐름 안에 있지만, Git이나 임의 URL은 프로젝트가 의도치 않게 더 넓은 실행 경로를 열 수 있어요.

  • 팀에서 해야 할 일은 단순히 npm 버전을 올리는 게 아니라, 어떤 의존성이 설치 중 코드를 실행해야 하는지 목록화하는 거예요. 허용 목록이 package.json에 남기 때문에 리뷰 가능한 정책 파일처럼 다룰 수 있고, 이게 npm 12 업그레이드의 실질적인 마이그레이션 포인트예요.

자바스크립트 공급망 보안에서 오래된 아픈 지점인 ‘설치만 했는데 코드가 실행됨’을 npm이 기본값 차원에서 막으려는 변화임. Node.js 프로젝트는 빌드가 깨진 뒤 대응하기보다 지금 npm 11.16.0 이상에서 경고를 확인해두는 게 낫다.

댓글

댓글

댓글을 불러오는 중...

devops

티베로와 오케스트로, 공공 AI 인프라 사업 같이 뛴다

티맥스티베로와 오케스트로 클라우드가 공공 AI·클라우드 시장을 겨냥해 전략적 업무협약을 맺었다. 티베로의 데이터베이스 기술과 오케스트로의 풀스택 AI 인프라 역량을 묶어 공공 시스템 구축, 매니지드 서비스, 기술검증과 성능검증까지 같이 추진하겠다는 내용이다.

devops

포항 AI 데이터센터, 300메가와트까지 키운다는데 환경 검토는 어디 갔나

포항환경운동연합이 네오AI클라우드 글로벌 AI 데이터센터의 환경영향 검토 결과를 공개하라고 요구했다. 1단계 40메가와트에서 장기적으로 300메가와트까지 확대되는 사업인데, 전력과 용수, 냉각 설비의 소음·진동·열배출에 대한 검토 근거가 시민에게 충분히 공개되지 않았다는 문제 제기다.

devops

티베로와 오케스트로, 공공 AI·클라우드 인프라 같이 판다

티맥스티베로와 오케스트로클라우드가 공공 부문 AI·클라우드 사업을 함께 추진하기로 했다. 티베로의 DBMS와 오케스트로의 클라우드 인프라 역량을 묶어 AI 워크로드용 데이터 플랫폼과 인프라를 패키지처럼 제안하겠다는 그림이다.

devops

SKT, AI 데이터센터 자회사 ‘SK하이퍼’ 만든다…2030년까지 7500억원 투입

SK텔레콤이 AI 데이터센터 사업개발 전문 자회사 SK하이퍼를 설립하고 2030년까지 7500억원을 출자하기로 했다. 2029년 5기가와트 규모 AI 데이터센터를 1단계로 열고, 2035년까지 총 15기가와트 규모로 확대하는 게 목표다.

devops

SKT, AI 데이터센터 전담 자회사 ‘SK하이퍼’ 만든다…2030년까지 7,500억 투입

SK텔레콤이 AI 데이터센터 사업개발 전담 자회사 SK하이퍼를 신설하고 2030년까지 7,500억 원을 출자하기로 했다. SK하이퍼는 부지 확보, 변전소 구축·운영, 고객 유치와 사업화를 맡고, 2029년 5GW를 시작으로 2035년 총 15GW 규모까지 확장하는 계획을 내놨다.