npm 복구 코드로 로그인하면 72시간 동안 배포가 멈춘다

npm은 2026년 9월 9일 복구 코드 로그인 뒤의 72시간 보안 보류를 고영향 계정에서 모든 계정으로 확대했다. GitHub의 공식 변경 공지 에 따르면 복구 코드로 로그인하는 데 성공하면 보류가 자동으로 시작되고, 패키지 배포와 접근 토큰 생성 등 보안에 민감한 쓰기 작업이 중단된다.
따라서 2026년 9월 9일 이후에는 npm에 정상적으로 로그인했더라도 복구 코드를 사용했다면 72시간 동안 배포할 수 없다. 로그인과 패키지 검색·조회·다운로드·설치는 계속 가능하며, 9월 11일 공개된 독립적인 운영 점검 도 전체 계정 적용, 배포 및 토큰 생성 제한, 자동 해제를 같은 범위로 확인했다.
모든 계정으로 넓어진 72시간 보류

이번 변경에서 달라진 것은 보류 시간보다 적용 범위다. npm은 2026년 6월 고영향 계정에 먼저 적용했던 보호 조치를 이제 패키지 규모나 영향력과 관계없이 모든 계정에 적용한다. 개인 유지관리자와 조직 소속 배포 담당자 모두 복구 코드로 로그인하면 같은 제한을 받는다.
복구 코드는 평소 사용하는 인증 앱이나 보안 키를 이용할 수 없을 때 계정 접근을 되찾기 위한 일회용 수단이다. 하지만 복구 코드로 로그인에 성공했다는 사실은 전체 권한이 즉시 복원됐다는 뜻이 아니다. 웹사이트에 들어가 패키지를 조회할 수 있는데도 npm publish가 거부되는 상태가 정책에 따른 정상 동작일 수 있다.
보류의 목적은 탈취된 복구 코드를 가진 공격자가 계정에 들어온 직후 악성 버전을 배포하거나 새 접근 토큰을 만드는 일을 늦추는 데 있다. 계정을 영구 정지하는 제재는 아니며, 민감한 변경만 일정 시간 지연해 실제 소유자가 의심스러운 접근을 발견하고 대응할 여지를 만드는 예방 조치다.
로그인과 설치는 가능하고 배포와 설정 변경은 막힌다

72시간 동안 npm 서비스 전체가 차단되는 것은 아니다. npm의 2FA 계정 복구 문서 는 보류 중 허용되는 작업과 제한되는 작업, 조기 해제가 불가능하다는 조건을 구체적으로 명시한다.
- 가능: 계정 로그인, 패키지 검색·조회·다운로드·설치, 비밀번호 변경, 새로운 2FA 수단 추가
- 불가능: 패키지 배포와 배포 취소, 접근 토큰 생성, 패키지 설정 또는 유지관리자 변경
- 불가능: 조직·팀 구성원 변경, 결제 정보나 계정 설정 변경, 기존 2FA 수단 변경
보류는 시작 시점부터 72시간이 지나면 별도 요청 없이 자동으로 끝난다. 기간 중 다른 복구 코드를 사용해도 종료 시각이 뒤로 밀리지 않지만, 지원팀을 통해 정상 사용자라는 사실을 설명하더라도 조기에 해제할 수는 없다. 예정된 릴리스가 있다는 이유로 대기 시간을 줄이는 예외도 공개돼 있지 않다.
이 구분은 장애 진단에도 중요하다. 로그인과 설치는 성공하지만 배포, 토큰 생성 또는 유지관리자 변경만 실패하고 최근 복구 코드 로그인 기록이 있다면 보안 보류를 먼저 확인할 수 있다. 반면 로그인 자체가 실패하거나 패키지 권한 오류가 표시된다면 네트워크, 자격 증명, 권한 설정 등 별도 원인을 함께 살펴야 한다.
기억나지 않는 복구 로그인은 침해 가능성을 뜻한다
예상하지 못한 배포 제한이 발생했다면 먼저 계정 소유자나 배포 담당자가 실제로 복구 코드를 사용했는지 확인해야 한다. 확인된 사용이라면 로그인 시각을 기준으로 보류 종료 시점을 계산하고 릴리스 계획을 조정할 수 있다. 아무도 사용하지 않았다면 단순한 배포 오류로 처리해서는 안 된다.
npm은 본인이 복구 코드를 사용하지 않았는데 배포가 차단됐다면 계정이 침해됐을 가능성이 있으므로 즉시 npm 지원팀에 연락하라고 안내한다. 보류는 악성 배포를 늦출 뿐 계정 통제권을 자동으로 되찾아 주지는 않는다. 비밀번호 변경과 새 2FA 수단 추가는 보류 중에도 가능하지만, 기존 2FA 수단이나 여러 계정·조직 설정의 변경은 제한된다.
조직은 정상적인 비상 로그인과 의심스러운 접근을 구별할 수 있도록 복구 로그인 시각, 사용한 담당자, 실패한 명령과 시각, 화면에 표시된 안내를 보존할 필요가 있다. 복구 코드 값이나 접근 토큰 같은 비밀 정보는 기록에 남기지 않는다. 이는 npm이 제공하는 별도 기능이 아니라 이번 제한을 사고 대응 절차에 연결하기 위한 운영상 권고다.
릴리스 직전에는 복구 코드 사용 여부부터 판단해야 한다

정상 사용자가 가장 직접적인 영향을 받는 때는 긴급 패치나 정기 릴리스 직전이다. 배포 담당자가 인증 기기를 사용할 수 없어 복구 코드로 로그인하면 코드와 빌드가 준비돼 있어도 그 계정의 배포 작업은 72시간 멈춘다. 반복해서 publish 명령을 실행하거나 새 토큰을 만들려 해도 보류 자체는 해결되지 않는다.
릴리스 절차에는 빌드 완료 후가 아니라 배포를 시작하기 전에 인증 상태를 점검하는 단계를 두는 편이 안전하다. 정책의 제약을 실제 운영에 반영하려면 다음 순서로 대응할 수 있다.
- 배포 담당자는 릴리스 전에 등록된 인증 앱이나 보안 키를 사용할 수 있는지 확인한다.
- 복구 코드가 필요해졌다면 사용 전에 예정된 배포와 72시간 보류 영향을 릴리스 책임자에게 알린다.
- 사용이 불가피하다면 로그인 시각, 예상 종료 시각과 연기되는 배포를 변경 기록에 남긴다.
- 배포가 거부되면 재시도 전에 복구 코드 보류, 패키지 권한과 레지스트리 상태를 각각 구분해 확인한다.
- 복구 코드를 쓴 담당자를 확인할 수 없다면 릴리스를 중단하고 계정 침해 대응과 npm 지원 문의를 시작한다.
대체 배포자를 운용하는 조직이라면 권한과 승인 조건을 평소에 정해 둬야 한다. 보류가 시작된 뒤 새 유지관리자나 조직 구성원을 추가해 우회하려는 방법은 해당 계정에서 관련 변경 자체가 제한되므로 즉석 대응책이 될 수 없다. 다른 계정의 권한을 이용할 때도 기존 승인 절차와 감사 기록을 건너뛰어서는 안 된다.
복구 코드는 계정 접근을 잃었을 때 필요한 비상 수단이지만 릴리스 담당자의 일상적인 인증 수단으로 쓰기에는 명확한 운영 비용이 생겼다. 각 코드는 한 번만 사용할 수 있고 새 코드 세트를 만들면 이전 세트가 무효가 되므로, 팀 기록에는 코드 자체가 아니라 보관 책임자와 접근·사용 절차를 남기는 것이 적절하다.
자동 해제는 되지만 공개된 우회 수단은 없다
현재 확인된 정책은 복구 코드로 로그인한 모든 npm 계정에 72시간 보류를 적용하고, 그동안 패키지 배포와 민감한 쓰기 작업을 제한하는 것이다. 기간이 끝나면 별도 확인이나 지원 요청 없이 전체 접근 권한이 자동으로 돌아오며, 같은 보류를 일찍 끝내는 공식 수단은 공개되지 않았다.
정상적인 복구 로그인이라면 종료 시각을 팀에 공유하고 릴리스 일정을 다시 잡아야 한다. 반대로 사용자를 확인할 수 없는 보류는 72시간이 지나기만 기다릴 사안이 아니다. npm은 조직별 예외나 별도의 조기 해제 절차를 발표하지 않았으므로, 당분간은 자동 보류를 전제로 릴리스를 운영하고 설명되지 않는 접근은 즉시 침해 가능성으로 처리해야 한다.
함께 읽기:
뉴스레터 구독
최신 Web3, AI, 암호화폐 뉴스를 이메일로 받아보세요.