엔트리포인트 재배선(Rewiring)의 공포: @bitwarden/cli 하이재킹 사건 심층 분석

최근 소프트웨어 공급망 보안을 위협하는 정교한 공격 사례가 발견되어 개발자 커뮤니티에 경종을 울리고 있습니다. JFrog Security Research의 보고에 따르면, 유명한 비밀번호 관리 도구인 Bitwarden의 CLI(Command Line Interface)를 사칭한 npm 패키지 @bitward[.]rden/cli 버전 2026.4.0에서 악성 코드가 발견되었습니다.

엔트리포인트 재배선(Rewiring)의 공포: @bitwarden/cli 하이재킹 사건 심층 분석

최근 소프트웨어 공급망 보안을 위협하는 정교한 공격 사례가 발견되어 개발자 커뮤니티에 경종을 울리고 있습니다. JFrog Security Research의 보고에 따르면, 유명한 비밀번호 관리 도구인 Bitwarden의 CLI(Command Line Interface)를 사칭한 npm 패키지 @bitward[.]rden/cli 버전 2026.4.0에서 악성 코드가 발견되었습니다.

이번 사건이 더욱 충격적인 이유는 단순히 패키지 이름을 비슷하게 만든 '타이포스쿼팅(Typosquatting)' 수준을 넘어섰기 때문입니다. 공격자는 정상적인 Bitwarden의 메타데이터를 그대로 유지하면서, 패키지의 실행 경로인 '엔트리포인트'를 교묘하게 재배선(Rewiring)했습니다. 이는 개발자가 익숙한 도구를 업데이트하거나 설치할 때 자신도 모르게 악성 코드를 실행 환경에 들여오게 만드는 매우 정교한 공급망 공격(Supply Chain Attack)의 전형을 보여줍니다.

엔트리포인트 재배선: 보이지 않는 침투 메커니즘 분석

이번 공격의 핵심 기술은 패키지의 preinstall 스크립트와 bw 바이너리 실행 지점을 조작하는 '엔트리포인트 재배선'에 있습니다. JForg의 분석 결과, 공격자는 기존의 정상적인 CLI 대신 bw_setup.js라는 커스텀 로더(Loader)를 실행하도록 패키지 구성을 변경했습니다.

구체적으로 살펴보면, 악성 패키지는 package.json 내의 scripts 항목 중 preinstallnode bw_setup.js로 설정하고, bin 항목의 bw 명령어 역시 bw_setup.js를 가리키도록 수정했습니다. 이렇게 되면 사용자가 npm을 통해 패키지를 설치하는 순간(preinstall), 그리고 실제 도구를 사용하려고 명령어를 입력하는 순간(bw) 모두 악성 로더가 작동하게 됩니다.

이 로더의 동작 방식은 매우 치밀합니다. bw_setup.js는 먼저 시스템에 'Bun' 런타임이 설치되어 있는지 확인합니다. 만약 없다면, GitHub(공격자는 github.com/oven-sh/bun을 소스로 활용)에서 직접 Bun 런타임을 다운로드하여 실행 환경을 구축합니다. 그 후, 난독화된 대규모 JavaScript 페이로드를 실행합니다. 이러한 방식은 보안 솔루션의 탐지를 피하기 위해 정상적인 오픈소스 프로젝트(Bun)를 실행 환경 구축 도구로 악용하는 고도의 은닉 기법입니다.

광범위한 데이터 탈취와 이중 유출 전략

공격자가 노린 타겟은 단순히 개인정보에 그치지 않습니다. 난독화를 해제한 페이로드 분석 결과, 공격자는 개발자의 워크스테이션과 CI/뮬 환경에서 추출할 수 있는 거의 모든 핵심 자격 증명을 목표로 삼았습니다. 탈취 대상에는 GitHub 및 npm 토큰, SSH 키, 쉘 히스토리(Shell History)는 물론 AWS, GCP, Azure와 같은 클라우드 서비스의 비밀 정보와 GitHub Actions 시크릿, 심지어 AI 도구 설정 파일까지 포함되어 있었습니다.

데이터를 외부로 빼돌리는 과정에서도 이중 전략(Dual-channel strategy)을 사용했습니다.

  1. Primary 채널: 탈취된 데이터는 암호화된 테레메트리 형태로 audit.checkmarx.cx/v1/telemetry 서버로 전송됩니다. JFrog 연구팀은 이 서버가 공격자의 주요 수신처임을 확인했습니다.
  2. Fallback(백업) 채널: 만약 기본 채널이 차단될 경우를 대비해, 공격자는 GitHub을 백업 경로로 활용합니다. 공격자는 공개된 커밋 메시지에서 전달받은 데이터를 기반으로 피해자의 계정에 새로운 리포지토리를 생성한 뒤, 탈취한 데이터 덩어리(Encrypted blobs)를 해당 리포지토리에 업로드하는 방식을 취했습니다.

흥미로운 점은 이 과정에서 발견된 'Dune' 테마의 명명 규칙입니다. 공격자는 Shai-Hulud: The Third Coming이라는 리포지토리 설명과 함께 sardaukar, fremen, atreides, sandworm 등 소설 *듄(Dune)*에 등장하는 용어들을 무작위로 생성된 리포지토리 이름에 사용했습니다. 이는 이번 공격이 'TeamPCP' 캠페인이나 유사한 테마를 가진 기존 공격 그룹과 연관되었을 가능성을 시사합니다.

보안 전문가와 개발자를 위한 대응 방안

이번 @bitwarden/cli 하이재킹 사건은 우리가 신뢰해 온 패키지 관리 생태계가 얼마나 취약할 수 있는지를 여실히 보여줍니다. 단순한 버전 체크를 넘어, 실행 환경의 무결성을 검증하는 새로운 접근 방식이 필요합니다.

첫째, npm 스크립트 실행에 대한 경각심을 가져야 합니다. 패키지 설치 시 preinstall이나 postinstall 단계에서 외부 네트워크 연결이나 파일 다운로드가 발생하는 것은 매우 위험한 신호입니다. CI/CD 파이프라인에서는 가급적 이러한 스크립트의 자동 실행을 제한하거나, 의심스러운 동작을 모니터링하는 보안 정책을 적용해야 합니다.

둘째, 엔트리포인트 변조 모니터링이 필요합니다. 패키지의 메타데이터(버전, 작성자 등)가 정상이라 하더라도, bin 실행 경로가 기존과 달라졌는지 확인하는 정적 분석 프로세스를 도입해야 합니다. 특히 런타임 환경을 동적으로 구축하는 로더(Loader) 패턴은 강력한 탐지 대상이 되어야 합니다.

셋째, **최소 권한 원칙(Principle of Least Privilege)**의 철저한 준수입니다. 개발자의 워크스테이션과 CI/CD 환경에는 클라우드 자격 증명이나 높은 권한을 가진 토큰을 직접 저장하지 않아야 합니다. 탈취된 토큰이 즉시 인프라 전체의 침해로 이어지지 않도록, 단기 자격 증명(Short-lived credentials) 사용을 생활화해야 합니다.

결론적으로, 공급망 공격은 점점 더 '보이지 않는' 영역으로 진화하고 있습니다. 패키지의 외형이 아닌, 그 내부의 실행 흐름과 네트워크 동작을 감시하는 것이 미래 보안의 핵심이 될 것입니다.

근거 중심 요약

출처

  1. TeamPCP Campaign Spreads to npm via a Hijacked Bitwarden CLI - JFrog Security Research

관련 글

엔트리포인트 리와이어링(Entrypoint Rewiring): 악성 패키지가 바이너리 실행 흐름을 가로채는 기술적 메커니즘

최근 오픈소스 생태계를 겨냥한 공급망 공격(Supply Chain Attack)은 과거의 단순한 데이터 탈취 수준을 넘어, 소프트웨어의 실행 구조 자체를 재설계하는 '리와이어링(Rewiring)' 단계로 진화하고 있습니다. 단순히 사용자의 비밀번호를 훔치는 것을 넘어, 우리가 믿고 사용하는 도구의 동작 방식을 근본적으로 뒤바꾸는 정교한 공격이 등장한 것입니다.

공급망 공격npm 보안엔트리포인트 리와이어링패키지 악성코드+1
← 목록으로