
최근 개발자들이 신뢰하는 보안 도구 두 가지가 잇달아 공격자의 의해 침해되었습니다.
첫 번째는 코드형 인프라(IaC) 취약점을 스캔하는 보안 도구 Checkmarx KICS의 공식 Docker 이미지와 VS Code 확장 프로그램이 악성 코드로 교체된 사건입니다.
두 번째는 같은 공격 캠페인의 연장선에서 전 세계 1천만 명 이상이 사용하는 오픈소스 비밀번호 관리자 Bitwarden CLI의 npm 패키지가 오염된 사건입니다.
두 공격 모두 배포 채널 자체를 장악하는 공급망 공격(Supply Chain Attack) 방식으로 이루어졌으며, 단순한 자격증명 탈취를 넘어 피해자의 시스템을 거점으로 삼아 추가 공격을 자동으로 전파하는 웜(Worm) 형태로 설계된 것이 특징입니다.
💡 참고하세요
IaC(Infrastructure as Code, 코드형 인프라): 서버, 네트워크 등 인프라 환경을 코드 파일로 정의하고 관리하는 방식입니다. Terraform, CloudFormation, Kubernetes 설정 파일 등이 대표적이며, 이 파일들에는 클라우드 접속 정보나 API 키 같은 민감한 자격증명이 포함되는 경우가 많습니다.
1.Checkmarx KICS 공급망 공격
KICS(Keeping Infrastructure as Code Secure)는 Checkmarx가 개발한 오픈소스 IaC 보안 스캐너로, 개발자와 보안 담당자가 인프라 설정 파일의 취약점을 자동으로 점검하는 데 널리 사용됩니다.
해외 보안 기업의 분석에 따르면 공격 그룹 TeamPCP가 KICS의 공식 Docker Hub 저장소(checkmarx/kics)에 접근해 기존 이미지 태그를 악성 버전으로 교체했습니다. 영향을 받은 태그는 v2.1.20, v2.1.20-debian, alpine, debian, latest이며, 존재하지 않는 신규 버전인 v2.1.21도 새로 등록되었습니다.
감염된 이미지에는 원래 KICS 바이너리 대신 자격증명을 수집·암호화하여 외부 서버로 전송하는 악성 바이너리가 포함되어 있었습니다. 즉, 취약점을 찾아주는 도구가 오히려 시스템 내 민감 정보를 빼내는 도구로 둔갑한 것입니다.
Docker 이미지 공격과 병행하여, VS Code 및 Open VSX용 Checkmarx 확장 프로그램(cx-dev-assist 1.17.0·1.19.0, ast-results 2.63.0·2.66.0)에도 악성 코드가 삽입되었습니다.
해당 버전의 확장 프로그램이 활성화되면, Checkmarx의 공식 GitHub 저장소에 2022년으로 날짜를 위조하여 삽입된 고아 커밋(orphaned commit)에서 약 10MB 크기의 악성 자바스크립트 파일(mcpAddon.js)을 다운로드하여 Bun 런타임으로 실행합니다.

💡 참고하세요
Bun: 자바스크립트(JavaScript) 실행 환경의 하나입니다. Node.js처럼 서버나 개발 환경에서 자바스크립트 코드를 실행할 수 있으며, 속도가 빠른 것이 특징입니다.
고아 커밋(Orphaned Commit): 특정 브랜치나 릴리스와 연결되지 않은 채 저장소 히스토리에만 존재하는 커밋입니다. 자동화된 코드 분석 도구가 주요 브랜치를 대상으로 스캔하기 때문에, 고아 커밋은 탐지망을 피하기 유리합니다.
2. Bitwarden CLI 패키지 오염 - Checkmarx 침해가 불러온 연쇄 피해
같은 캠페인의 연장선에서, Bitwarden CLI의 npm 패키지(@bitwarden/cli 2026.4.0)도 침해된 사실이 확인되었습니다.
두 사건은 단순히 같은 공격자의 소행이라는 것 이상의 직접적인 인과관계가 있습니다.
Bitwarden의 clients 저장소는 Pull Request가 생성될 때마다 Checkmarx 스캐너를 자동으로 실행하는 CI/CD 워크플로우를 운영하고 있었습니다. 이 워크플로우는 Azure Key Vault에 저장된 Checkmarx API 자격증명을 가져와 스캐너를 실행하는 구조였으며, GitHub OIDC 토큰을 요청할 수 있는 id-token: write 권한도 보유하고 있었습니다.
KICS Docker 이미지가 오염된 상태에서 이 워크플로우가 실행되자, 악성 스캐너는 Bitwarden의 GitHub 인증 토큰과 Azure 자격증명을 그대로 탈취했습니다. 공격자는 탈취한 자격증명으로 실제 Bitwarden 개발자를 사칭한 미서명 커밋을 publish-cli.yml 배포 워크플로우에 푸시했습니다. 해당 커밋에는 npm 배포 토큰을 CI 로그에 이중 base64 인코딩으로 노출시키는 코드가 삽입되어 있었고, 공격자는 이를 통해 npm 토큰을 확보한 뒤 악성 패키지를 (@bitwarden/cli@2026.4.0) npm에 등록했습니다.
요약하면 Checkmarx KICS → GitHub 토큰 탈취 → 배포 워크플로우 변조 → npm 토큰 탈취 → 악성 패키지 배포, 이렇게 연결되는 구조입니다.
즉, Checkmarx KICS 침해는 단독 사건이 아니라, Bitwarden CLI 패키지 오염으로 이어지는 다단계 공급망 공격의 1단계로 볼 수 있습니다.
Bitwarden CLI는 오픈소스 비밀번호 관리자 Bitwarden의 커맨드라인 도구로, 개발자와 기업 환경에서 비밀번호·시크릿 관리를 자동화하는 데 활용됩니다. 전 세계 1천만 명 이상의 사용자와 5만 개 이상의 기업이 사용하는 만큼, 이 패키지를 오염시키면 파급력이 매우 큽니다.
공격자는 Bitwarden의 CI/CD 파이프라인에 사용되는 GitHub Actions를 변조하는 방식으로 패키지 빌드 및 배포 과정에 악성 파일(bw1.js)을 주입했습니다. 해당 파일은 Checkmarx 공격에 사용된 mcpAddon.js 파일과 동일한 C2 서버를 사용하며, 거의 동일한 탈취·전파 기능을 갖추고 있어 같은 공격 캠페인의 일환임이 확인되었습니다.
※ 이번 감염은 CLI npm 패키지에만 국한되었으며, Bitwarden의 Chrome 확장 프로그램, MCP 서버, 기타 배포본은 영향을 받지 않은 것으로 확인되었습니다.
1. 신뢰할 수 있는 공식 채널 자체를 침해
두 공격 모두 공식 배포 채널을 직접 장악했다는 점이 가장 위협적입니다.
| 공격 대상 | 침해된 채널 |
| Checkmarx KICS | 공식 Docker Hub 저장소 (checkmarx/kics) |
| Checkmarx VS Code 확장 | Open VSX / VS Code Marketplace |
| Bitwarden CLI | npm 공식 저장소 (@bitwarden/cli) |
개발자가 docker pull checkmarx/kics나 npm install @bitwarden/cli 명령어를 실행하는 것만으로 악성 코드가 설치됩니다. 별도의 피싱 링크나 사회공학적 속임수 없이, 정상적인 업무 프로세스만으로 감염이 이루어진다는 점에서 일반적인 악성코드 유포와 근본적으로 다릅니다.
2. 광범위한 자격증명 수집
두 공격에 사용된 악성파일인 mcpAddon.js와 bw1.js 파일은 실행 즉시 피해 시스템에서 다음의 자격증명을 수집합니다.
수집된 데이터는 압축 및 암호화되어 audit.checkmarx[.]cx/v1/telemetry 라는 외부 서버로 전송됩니다. 서버 주소를 Checkmarx의 공식 텔레메트리 엔드포인트처럼 위장한 점도 주목할 부분입니다.
3. 자가 전파: 피해자를 새로운 공격 거점으로
이번 공격의 가장 위험한 특징은 탈취한 자격증명을 이용해 자동으로 추가 공격을 전파하는 웜 구조를 갖추고 있다는 점입니다.
① GitHub Actions 워크플로우 인젝션
탈취한 GitHub 토큰을 이용해 피해자가 권한을 가진 저장소를 탐색하고, 그 중 GitHub Actions 시크릿이 설정된 저장소를 우선 표적으로 삼습니다. 이후 임시 브랜치를 생성하여 악성 워크플로우 파일(.github/workflows/format-check.yml)을 커밋하면, GitHub Actions가 이를 자동 실행하여 해당 저장소의 모든 시크릿을 아티팩트로 추출합니다.
② npm 패키지 재배포를 통한 확산
탈취한 npm 토큰으로 피해자가 배포 권한을 보유한 패키지 목록을 조회한 뒤, 해당 패키지에 악성 코드를 심어 재배포합니다. 피해자가 관리하는 패키지를 사용하는 또 다른 개발자들이 2차 피해를 입는 구조입니다.
③ 공개 저장소를 탈취 데이터 중간 경유지로 활용
탈취된 데이터는 피해자 GitHub 계정에 새로 생성된 공개 저장소에도 업로드됩니다. 저장소 이름은 gesserit-melange-813, atreides-thumper-424처럼 소설 ‘듄(Dune)’ 의 세계관 용어를 조합한 패턴을 따르며, 커밋 메시지에 LongLiveTheResistanceAgainstMachines:<토큰값> 형식으로 탈취 토큰이 직접 노출됩니다.
4. 러시아어 환경 실행 회피 (킬 스위치)
Bitwarden CLI 악성 코드(bw1.js)에는 특이한 킬 스위치가 포함되어 있습니다. 시스템 로케일이 러시아어(ru)로 설정된 경우 악성 동작 없이 조용히 종료하도록 설계되어 있습니다. 이는 공격자가 특정 국가를 의도적으로 공격 범위에서 제외하려 했음을 시사합니다.
5. 다층 난독화로 탐지 회피
mcpAddon.js 파일은 약 10MB에 달하는 단일 파일로, 내부에는 다음과 같은 탐지 회피 기법이 적용되어 있습니다.
1. 영향받는 버전 확인 및 제거
| 제품 | 영향 받는 버전 | 조치 사항 |
| checkmarx/kics Docker 이미지 | v2.1.20, v2.1.21, alpine, debian, latest | 즉시 삭제, 안전한 버전으로 재설치 |
| Checkmarx VS Code 확장 (cx-dev-assist) | 1.17.0, 1.19.0 | 즉시 삭제 |
| Checkmarx VS Code 확장 (ast-results) | 2.63.0, 2.66.0 | 즉시 삭제 |
| Bitwarden CLI (@bitwarden/cli) | 2026.4.0 | 즉시 삭제 |
2. 자격증명 전면 교체
영향받는 버전을 사용한 적이 있다면, 해당 환경에 존재하는 아래 자격증명을 즉시 폐기하고 재발급해야 합니다.
3. GitHub 저장소 이상 징후 점검
4. npm 패키지 무결성 점검
5. 악성 C2 서버 네트워크 차단
아래 주소로의 모든 트래픽을 방화벽 및 네트워크 수준에서 차단하고 통신 시도를 모니터링 합니다.
6. Bitwarden CLI 감염 흔적 점검 (Linux/macOS)
영향을 받은 환경의 복구 이후에도 유사한 공급망 위협이 재발하지 않도록 다음과 같은 보안 조치를 권고드립니다.
이번 공격은 DevSecOps 환경에서 보안 담당자가 신뢰해 온 도구들, 즉 취약점을 찾아주는 스캐너와 자격증명을 안전하게 보관해 주는 비밀번호 관리자가 공격자에게 역이용된 사례입니다. 보안 도구라는 이유로 검증 없이 신뢰하면, 그 신뢰 자체가 가장 취약한 지점이 될 수 있음을 보여줍니다.
또한 단순한 정보 탈취에 그치지 않고, 피해자의 개발 생태계 전반으로 스스로를 전파하는 웜 구조는 피해 범위를 가늠하기 어렵게 만듭니다. 영향받는 환경을 직접 사용한 개발자뿐 아니라, 그 개발자가 관리하는 패키지의 다운스트림 사용자까지 잠재적 피해자가 될 수 있습니다.
소프트웨어 공급망 보안은 더 이상 대형 기업만의 문제가 아닙니다. 패키지 하나, 이미지 태그 하나를 신중하게 검토하는 습관이 조직 전체를 보호하는 첫걸음이 될 수 있습니다.
[참고]
https://socket.dev/blog/checkmarx-supply-chain-compromise
https://socket.dev/blog/bitwarden-cli-compromised
https://www.mend.io/blog/compromised-bitwarden-cli-npm-worm-ai-poisoning/
| 기업뱅킹 전자금융 소프트웨어(WGear) 취약점 관련 대응 안내 (0) | 2026.04.14 |
|---|---|
| Adobe Reader 제로데이 취약점을 이용한 악성 PDF 공격 주의! (0) | 2026.04.10 |
| PyPI에 등록된 가짜 AI 프록시 패키지, 사용자 프롬프트 탈취 (1) | 2026.04.08 |
| Axios NPM 패키지 공급망 공격 발생 (0) | 2026.04.01 |
| Windows 메모장 원격 코드 실행(RCE) 취약점 업데이트 권고(CVE-2026-20841) (0) | 2026.02.13 |
댓글 영역