서론
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 관련 캠페인의 연장선으로, 이전 캠페인에서 사용된 기법이 진화된 형태입니다.
악성 패키지는 설치 시 다음과 같은 동작을 수행합니다:
- 자격증명 추출: 시스템의 SSH 키, API 키, 클라우드 자격증명, 크립토 월렛 키 등 민감한 정보를 수집
- 암호화 및 업로드: 추출한 데이터를 암호화하여 공개 GitHub 저장소에 업로드
- 흔적 남기기: 코드 내 "Shai-Hulud: The Third Coming" 문자열 포함 - 이전 Shai-Hulud 웜 캠페인과의 연관성 시사
영향 범위 및 피해 사례
비록 악성 버전이 1.5시간 동안만 배포되었지만, 이 기간 동안 수천 번의 다운로드가 발생했습니다. 특히 개발자 환경에서 Bitwarden CLI가 자주 사용되므로, 개발자의 자격증명과 프로젝트의 CI/CD 비밀 정보가 노출되었을 가능성이 큽니다.
다행히 Bitwarden 보안 팀이 신속하게 대응하여 악성 패키지를 식별하고 격리했으나, 이미 설치된 환경에서는 추가적인 조치가 필요합니다.
Axios 공격과의 공통점/차이점 비교
공통점
두 사건 모두 다음과 같은 패턴을 공유합니다:
- 메인테이너 계정 탈취: 공격자는 합법적인 메인테이너의 npm 계정을 탈취
- CI/CD 파이프라인 악용: 정상적인 배포 프로세스를 우회하거나 악용
- 단기간 배포: 악성 버전이 짧은 시간 동안만 존재하여 탐지 회피
차이점
| 항목 | 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 파이프라인 악용, 악성 패키지 배포라는 공격 패턴은 향후에도 지속될 것입니다.
핵심 대응 전략은 다음과 같습니다:
- 계정 보안 강화: 2FA 의무화, 정기적인 암호 변경
- CI/CD 보안: OIDC Trusted Publisher 사용, 최소 권한 원칙
- 의존성 관리: 버전 고정, lockfile 검증, 정기적 감사
- 모니터링: 실시간 알림, 이상 징후 탐지
보안은 일회성 조치가 아니라 지속적인 프로세스입니다. 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)
댓글을 작성하려면 로그인이 필요합니다.
로그인아직 댓글이 없습니다.
첫 번째 댓글을 작성해보세요!