본문으로 건너뛰기
피드

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

대웅그룹, 8개 법인 SAP를 클라우드로 옮기고 AI 자동화 기반까지 깔았다

대웅그룹 계열 IT 기업 idsTrust가 그룹 8개 법인의 SAP ERP를 클라우드 환경으로 이전했다. 제약·바이오 업종의 보안과 규제 요건을 고려해 SAP PCE를 적용했고, 클린 코어 전략으로 향후 업데이트와 AI 업무 자동화까지 염두에 둔 구조를 만들었다.

devops

엔디에스, 공공기관이 AWS를 더 쉽게 도입할 수 있는 조달 문턱 넘었다

엔디에스가 디지털서비스 이용지원시스템에 AWS 기반 서비스형 인프라 중개서비스 사업자로 등록됐다. 공공기관은 AWS의 클라우드 보안인증 하 등급 범위 안에서 공개 데이터와 관련 업무 시스템에 AWS 인프라를 더 빠르게 도입할 수 있게 됐다.

devops

우리금융, 남양주에 8천500억 원 규모 AI·IT 센터 짓는다

남양주시가 우리금융그룹의 ‘AI 디지털 유니버스’ 건축을 허가하면서 연내 착공이 가능해졌다. 우리은행은 2029년 완공을 목표로 8천500억 원을 투입해 전체면적 9만8천㎡ 규모의 통합 IT 센터를 만들 계획이다.

devops

애플 컨테이너에 ‘맥 안의 지속형 리눅스 머신’이 들어옴

애플의 container 도구에 컨테이너 머신이라는 개념이 추가돼, 맥에서 지속형 리눅스 환경을 빠르게 띄우고 쓸 수 있게 됨. 일반 컨테이너가 앱 단위라면, 컨테이너 머신은 init 시스템과 서비스, 홈 디렉터리 공유까지 포함한 리눅스 개발 환경에 가까움.

devops

시스코, AI 클라우드 제어 플랫폼으로 네트워크·보안·운영을 한판에 묶으려는 중

시스코가 Cisco Cloud Control, 확장된 FlexPod AI, 랜섬웨어 대응 플레이북 등 AI 중심 인프라와 보안 제품을 발표했다. 핵심은 네트워킹, 보안, 관측성, AI 에이전트 관리를 하나의 클라우드 제어면으로 묶어 대기업과 서비스 제공업체 운영을 단순화하려는 방향이다. 다만 AI 주문이 소수 하이퍼스케일러에 의존한다는 투자 리스크는 여전히 남아 있다.