DEEP DIVE REPORT

NPM 생태계 공급망 공격 동향: Bitwarden 사건을 중심으로

SecurityDesk
2026.04.27 조회 6

서론

2026년 4월, 인기 비밀번호 관리자 Bitwarden의 CLI 패키지가 공급망 공격으로 탈취되었습니다. 이는 한 달 전 Axios npm 패키지 탈취 사건에 이어 연속적으로 발생한 대규모 JavaScript 생태계 공급망 공격입니다. 두 사건 모두 메인테이너 계정 탈취와 CI/CD 파이프라인 악용이라는 공통 패턴을 보이면서도, 세부적인 공격 기법에서는 차이를 보입니다.

Bitwarden NPM 공급망 공격 상세 분석

공격 개요

2026년 4월 22일 오후 5시 57분부터 7시 30분(동부 표준시)까지 약 1시간 30분 동안, Bitwarden의 명령줄 인터페이스(CLI) npm 패키지인 @bitwarden/cli의 버전 2026.4.0이 악성 코드로 교체되었습니다. 월간 25만 이상의 다운로드를 기록하는 인기 패키지였던 만큼 잠재적 영향 범위는 상당했습니다.

공격 벡터 및 감염 경로

공격자는 Bitwarden의 CI/CD 파이프라인 내 GitHub Actions 워크플로우를 악용했습니다. Checkmarx 관련 개발 도구가 탈취되어 npm 배포 경로가 오용되었습니다. 이는 Checkmarx 관련 캠페인의 연장선으로, 이전 캠페인에서 사용된 기법이 진화된 형태입니다.

악성 패키지는 설치 시 다음과 같은 동작을 수행합니다:

  1. 자격증명 추출: 시스템의 SSH 키, API 키, 클라우드 자격증명, 크립토 월렛 키 등 민감한 정보를 수집
  2. 암호화 및 업로드: 추출한 데이터를 암호화하여 공개 GitHub 저장소에 업로드
  3. 흔적 남기기: 코드 내 "Shai-Hulud: The Third Coming" 문자열 포함 - 이전 Shai-Hulud 웜 캠페인과의 연관성 시사

영향 범위 및 피해 사례

비록 악성 버전이 1.5시간 동안만 배포되었지만, 이 기간 동안 수천 번의 다운로드가 발생했습니다. 특히 개발자 환경에서 Bitwarden CLI가 자주 사용되므로, 개발자의 자격증명과 프로젝트의 CI/CD 비밀 정보가 노출되었을 가능성이 큽니다.

다행히 Bitwarden 보안 팀이 신속하게 대응하여 악성 패키지를 식별하고 격리했으나, 이미 설치된 환경에서는 추가적인 조치가 필요합니다.

Axios 공격과의 공통점/차이점 비교

공통점

두 사건 모두 다음과 같은 패턴을 공유합니다:

  1. 메인테이너 계정 탈취: 공격자는 합법적인 메인테이너의 npm 계정을 탈취
  2. CI/CD 파이프라인 악용: 정상적인 배포 프로세스를 우회하거나 악용
  3. 단기간 배포: 악성 버전이 짧은 시간 동안만 존재하여 탐지 회피

차이점

항목 Bitwarden 공격 Axios 공격
발생일 2026년 4월 22일 2026년 3월 31일
타겟 패키지 @bitwarden/cli (월 25만+ 다운로드) axios (주간 1억+ 다운로드)
탈취 대상 GitHub Actions 워크플로우 메인테이너 npm 계정
배포 방법 CI/CD 파이프라인 악용 npm CLI 직접 배포
악성 코드 동작 자격증명 추출 및 외부 업로드 크로스 플랫폼 RAT 배포
위협 행위자 Shai-Hulud 캠페인 연관 North Korea-nexus (UNC1069)
자기 파괴 없음 1.1초 후 자동 삭제

공격 패턴 분석

Axios 공격은 메인테이너의 이메일을 변경(ifstap@proton[.]me)하고, GitHub Actions OIDC 기반 CI/CD 워크플로우를 우회하여 npm CLI로 직접 악성 버전을 배포했습니다. 반면 Bitwarden 공격은 CI/CD 파이프라인 내의 GitHub Actions 워크플로우 자체를 악용했습니다.

두 사건 모두 CI/CD 보안의 중요성을 강조하지만, Axios가 "인증 탈취 + 우회"라면 Bitwarden은 "파이프라인 자체의 악용"이라는 차이가 있습니다.

NPM 생태계 보안 강화 방안

패키지 검증 절차

1. 정책 엔forcement(Policy Enforcement)

  • Trusted Publishers: npm의 OIDC Trusted Publisher 메커니즘을 의무적으로 사용
  • 각 배포가 검증된 GitHub Actions 워크플로우와 암호학적으로 연결
  • Axios 사건에서도 정상적인 릴리스는 이 메커니즘을 사용했음
  • 2FA(MFA) 의무화: 메인테이너 계정에 2FA 의무 적용

**2. 의존성 검증

# 패키지 출처 검증 도구 사용
npm audit
npm ci  # lockfile 기반 설치
  • lockfile의 무결성 검증
  • 패키지 서명 확인
  • 알려진 악성 패키지 블록리스트 사용

의존성 관리 가이드라인

1. 버전 고정(Version Pinning)

{
  "dependencies": {
    "axios": "^1.6.0"  // ^ 사용은 마이너 버전 업데이트 허용
  },
  "resolutions": {
    "axios": "1.6.0"   // 정확한 버전 고정
  }
}
  • npm ci를 사용하여 package-lock.json 기반 설치
  • 자동 업데이트 방지
  • 보안 패치 시에는 수동으로 검증 후 업데이트

2. 의존성 감시

# 의존성 업데이트 모니터링
npm outdated
npm audit fix
  • 정기적인 의존성 업데이트 감시
  • 취약점 스캔 자동화
  • 알림 설정(새로운 취약점 발견 시)

실무자를 위한 대응 전략

신뢰할 수 있는 패키지 출처 확인

1. 패키지 메타데이터 검증

# 패키지 정보 확인
npm view axios
npm view axios time  # 릴리스 히스토리 확인
  • 메인테이너 확인
  • 최근 릴리스 패턴 확인
  • 비정상적인 빈번한 업데이트 경계

2. 소스 코드 검증

# GitHub 저장소와 릴리스 태그 비교
git clone https://github.com/axios/axios.git
git tag -l  # 릴리스 태그 확인
  • npm 버전과 GitHub 저장소의 일치 여부 확인
  • 릴리스 태그가 존재하는지 확인
  • 소스 코드 검토 가능성 확보

Lockfile 보안 강화

1. package-lock.json 관리

# lockfile 생성 및 커밋
npm install
git add package-lock.json
git commit -m "Add lockfile"
  • lockfile을 버전 관리에 포함
  • 모든 개발자가 동일한 의존성 사용 보장
  • CI/CD에서 npm ci 사용

2. lockfile 검증

# lockfile 무결성 검증 도구
npm audit --audit-level=moderate
snyk test
  • lockfile의 변경 감지
  • 알려진 취약점 있는 버전 차단
  • 의도치 않은 의존성 업데이트 방지

CI/CD 파이프라인 보안

1. GitHub Actions 보안

# .github/workflows/publish.yml 예시
permissions:
  contents: read
  id-token: write  # OIDC 토큰 발급 권한

jobs:
  publish:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: "20"
          registry-url: "https://registry.npmjs.org"
      - run: npm ci
      - run: npm publish --provenance  # 서명된 패키지 배포
        env:
          NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
  • 최소 권한 원칙 적용
  • OIDC 토큰 사용하여 인증 강화
  • --provenance 플래그로 서명된 패키지 배포
  • 액세스 토큰 장기 보관 금지

2. 비밀 정보 관리

# 환경 변수 사용
export GITHUB_TOKEN=ghp_xxx
export NPM_TOKEN=npm_xxx
  • 하드코딩된 비밀 정보 제거
  • GitHub Secrets 사용
  • 토큰 만료 기간 설정
  • 정기적인 토큰 갱신

위협 레벨별 대응 우선순위

위협 레벨 즉시 대응 단기 대응 장기 대응
Critical 24시간 이내: 영향 받은 시스템 격리, 자격증명 교체 72시간 이내: 전체 의존성 감사, 패키지 재설치 1주 이내: CI/CD 보안 강화, 정책 수립
High 48시간 이내: 취약한 패키지 업데이트 1주 이내: lockfile 검증 도구 도입 2주 이내: 2FA 의무화, 보안 교육
Medium 72시간 이내: npm audit 실행 2주 이내: 정기적 스캔 자동화 1개월 이내: 의존성 감시 시스템 구축
Low 1주 이내: 패키지 출처 검증 1개월 이내: 버전 고정 정책 수립 3개월 이내: 보안 모니터링 도구 도입

결론

Bitwarden과 Axios 공급망 공격 사건은 JavaScript 생태계의 보안 취약성을 다시 한번 확인시켰습니다. 메인테이너 계정 탈취, CI/CD 파이프라인 악용, 악성 패키지 배포라는 공격 패턴은 향후에도 지속될 것입니다.

핵심 대응 전략은 다음과 같습니다:

  1. 계정 보안 강화: 2FA 의무화, 정기적인 암호 변경
  2. CI/CD 보안: OIDC Trusted Publisher 사용, 최소 권한 원칙
  3. 의존성 관리: 버전 고정, lockfile 검증, 정기적 감사
  4. 모니터링: 실시간 알림, 이상 징후 탐지

보안은 일회성 조치가 아니라 지속적인 프로세스입니다. 2025년 한 해 동안 454,648개의 악성 npm 패키지가 발견되었다는 사실은, 개발자들이 경각심을 유지하고 선제적인 방어 조치를 취해야 함을 보여줍니다.

참고자료

  • OX Security - Bitwarden CLI Compromised: Inside the Shai-Hulud Supply Chain Attack: https://www.ox.security/blog/shai-hulud-bitwarden-cli-supply-chain-attack/
  • SecurityWeek - Bitwarden NPM Package Hit in Supply Chain Attack: https://www.securityweek.com/bitwarden-npm-package-hit-in-supply-chain-attack/
  • Endor Labs - The Bitwarden CLI Supply Chain Attack: https://www.endorlabs.com/learn/shai-hulud-the-third-coming----inside-the-bitwarden-cli-2026-4-0-supply-chain-attack
  • Bitwarden Community Forums - Statement on Checkmarx Supply Chain Incident: https://community.bitwarden.com/t/bitwarden-statement-on-checkmarx-supply-chain-incident/96127
  • DEV Community - The Axios Supply Chain Attack: https://dev.to/rverwey/the-axios-supply-chain-attack-what-happened-how-to-check-and-what-to-do-next-18n
  • Microsoft Security Blog - Mitigating the Axios npm supply chain compromise: https://www.microsoft.com/en-us/security/blog/2026/04/01/mitigating-the-axios-npm-supply-chain-compromise/
  • Trend Micro - Axios NPM Package Compromised: https://www.trendmicro.com/en_us/research/26/c/axios-npm-package-compromised.html
  • Elastic Security Labs - Inside the Axios supply chain compromise: https://www.elastic.co/security-labs/axios-one-rat-to-rule-them-all
  • Huntress - Supply Chain Compromise of axios npm Package: https://www.huntress.com/blog/supply-chain-compromise-axios-npm-package
  • Google Cloud Blog - North Korea-Nexus Threat Actor Compromises Axios NPM Package: https://cloud.google.com/blog/topics/threat-intelligence/north-korea-threat-actor-targets-axios-npm-package
  • GitHub - theNetworkChuck/axios-attack-guide: https://github.com/theNetworkChuck/axios-attack-guide
  • Bastion - npm Supply Chain Attacks 2026: Defense Guide for SaaS Teams: https://bastion.tech/blog/npm-supply-chain-attacks-2026-saas-security-guide
  • BSWEN - How to Protect Your npm Projects from Supply Chain Attacks: https://docs.bswen.com/blog/2026-03-31-npm-supply-chain-protection/
  • CSA Research - CanisterSprawl: The Self-Propagating npm Supply Chain Worm: https://labs.cloudsecurityalliance.org/wp-content/uploads/2026/04/CSA_research_note_npm_canistersprawl_supply_chain_worm_20260423-csa-styled.pdf

본 콘텐츠는 AI 기술로 작성된 분석 리포트를 포함하고 있습니다. 내용 중 사실과 다르거나 보완이 필요한 정보를 발견하셨으면 댓글을 통해 의견을 부탁드립니다. 여러분의 피드백은 더 정확한 보안 정보 공유에 큰 도움이 됩니다.

댓글 (0)

댓글을 작성하려면 로그인이 필요합니다.

로그인

아직 댓글이 없습니다.

첫 번째 댓글을 작성해보세요!

IT 도구 서랍

→ Unix: 2025-01-15T09:30:00
→ 날짜: 1736934600

→ ASCII: ABC
→ 문자: 65 66 67

ASCII 코드표 — 클릭하면 입력란에 추가

DecHex약어설명
DecHex문자
DecHex문자

→ 유니코드: 홍길동
→ 문자: \ud64d\uae38\ub3d9