- 2개의 하이재킹된 npm 패키지와 1개의 Go 패키지 클러스터가 VS Code의 Tasks 기능을 악용해 Python 기반 정보탈취형 멀웨어를 드롭함
- npm lifecycle 스크립트 외 보조 자동화 경로를 활용해 사용자가 인지하지 못한 상태에서 페이로드가 실행되도록 설계됨
- Windows·Linux·macOS 등 멀티 플랫폼에서 동일 코드베이스로 동작해 개발자 워크스테이션 광범위 침투 위험이 존재함
패키지 생태계와 코드 에디터 자동화 기능의 결합 지점이 새로운 공급망 침투 표면으로 부상하고 있습니다.
2026년 6월 29일자 보안 보고서에 따르면 npm과 Go 패키지 생태계에서 하이재킹된 구성 요소가 Visual Studio Code의 Tasks 기능을 자동화 트리거로 활용하는 공급망 공격이 확인됐습니다. 공격자는 일반적인 npm lifecycle 스크립트 실행 흐름을 우회하면서도 개발자 워크스테이션에서 지속성을 확보한 것으로 분석됩니다. 본 글에서는 침투 경로, 페이로드 동작, 멀티 OS 영향, 점검 절차 순으로 사례를 정리합니다.
공격 개요와 침투 경로
하이재킹된 패키지의 침투 흐름
보고서 기준 공격은 2개의 npm 패키지와 한 클러스터의 Go 패키지로 구성된 하이재킹 노드를 출발점으로 삼습니다. 정상 배포로 위장한 패키지가 설치되면 저장소 내부에 포함된 자동화 설정이 VS Code 워크스페이스를 통해 트리거되고, 이후 페이로드 다운로드 단계를 거쳐 최종적으로 Python 기반 인포스틸러가 실행되는 다단계 흐름으로 구성된 것으로 보입니다.
VS Code 태스크 악용 메커니즘
VS Code의 Tasks는 .vscode/tasks.json 등 워크스페이스 설정에 등록된 명령을 빌드·테스트·실행 시점에 자동 호출하는 기능입니다. 공격자는 이 기능을 워크스페이스 신뢰 이벤트 이후 단계로 활용했으며, 사용자가 의도적으로 빌드를 시작하지 않아도 정의된 명령 체인이 동작하도록 구성한 것으로 분석됩니다. 즉, 에디터 자동화 기능이 침투의 지속성 트리거 역할을 한 것으로 해석됩니다.
악성 페이로드 동작 방식
Python 인포스틸러 핵심 기능
최종 단계에서 드롭되는 페이로드는 Python 기반 정보탈취형 멀웨어로 분류됩니다. 보고서는 해당 정보탈취형 멀웨어가 브라우저 저장 자격 증명, 암호화폐 지갑 데이터, 세션 토큰 등 민감 정보를 수집해 외부 인프라로 송신하는 동작을 포함한다고 설명합니다. 동일 코드베이스로 다중 운영체제를 커버하도록 설계돼 개발자 PC의 광범위한 데이터가 단일 캠페인으로 유출될 위험이 있습니다.
npm lifecycle 스크립트 우회 기법
기존 npm 공급망 공격은 preinstall, postinstall 같은 lifecycle 스크립트 훅을 악용해 왔습니다. 이번 사례는 워크스페이스 자동화 단계를 함께 이용해 lifecycle 단계에서 직접 실행되지 않는 명령 체인을 구성한 것으로 분석됩니다. 결과적으로 preinstall·install 시점의 검사만으로는 악성 행위를 탐지하기 어려운 회피 경로가 추가로 확보된 셈입니다.
운영체제별 확산과 영향
Windows·Linux·macOS 동시 감염 범위
보고서는 영향 범위를 Windows, Linux, macOS로 명시했습니다. 멀티 플랫폼 동작은 Python 스크립트가 표준 라이브러리 위주로 구성되고 셸 호출이 OS별 분기를 포함하기 때문일 것으로 추정됩니다. 동일 패키지에서 서로 다른 OS 사용자가 동시 노출된다는 점에서 기업 내 개발 조직의 잠재 침해 면적이 크게 확대됩니다.
개발자 워크스테이션과 암호화폐 탈취 위험
공격 표적이 빌드와 테스트가 빈번한 개발자 PC라는 점에서 코드 저장소 접근 토큰, 클라우드 자격 증명, DevOps 비밀 값이 주요 유출 대상이 됩니다. 브라우저 확장 지갑과 로컬 키스토어 파일을 수집하는 정보탈취형 멀웨어의 성격상, 암호화폐 자산 탈취로 이어질 가능성이 분석됩니다.
| 구분 | 내용 |
|---|---|
| 악용 저장소 | npm, Go 패키지 생태계 |
| 자동화 트리거 | Visual Studio Code Tasks (.vscode/tasks.json) |
| 최종 페이로드 | Python 기반 인포스틸러 |
| 영향 OS | Windows, Linux, macOS |
| 주요 탈취 대상 | 자격 증명, 세션 토큰, 암호화폐 지갑 |
대응 및 권고사항
의존성 잠금(lockfile) 및 패키지 출처 검증
npm과 Go 모듈에서 lockfile 기반 재현 빌드를 강제하고, package-lock.json, go.sum 해시 일치를 CI 단계에서 검증해야 합니다. 내부 레지스트리 미러를 운영할 경우 업스트림 패키지의 작성자 메타데이터 변동과 배포 타임스탬프를 주기적으로 비교해 무단 교체 여부를 점검하는 절차가 효과적입니다.
VS Code tasks.json 및 워크스페이스 신뢰 정책 점검
신규 클론 저장소를 처음 열 때 VS Code는 워크스페이스 신뢰 모드 선택을 요구합니다. 조직 정책으로 신뢰된 폴더 목록을 사전 정의하고, .vscode/tasks.json 등 워크스페이스 설정 파일에 등록된 command, args, label 항목을 코드 리뷰 항목에 포함시키는 것이 바람직합니다. 빌드 자동 실행이 필요한 경우에도 최소 명령 집합으로 제한하고, 외부 다운로드 명령은 금지 목록으로 관리합니다.
조직 단위 패키지 모니터링 및 SBOM 도입
SBOM(Software Bill of Materials)을 빌드 파이프라인에서 자동 생성해 의존성 변경을 추적하고, 취약점 데이터베이스와 매칭해야 합니다. 패키지 하이재킹은 정상 버전과 동일 메이저 버전으로 위장하는 사례가 있으므로 작성자 메일·서명키 같은 2차 식별자도 함께 검증해야 합니다.
- npm, Go 의존성에 대해 lockfile 해시 및 작성자 메타데이터를 CI에서 검증
- 워크스페이스 신뢰 모드 정책과 tasks.json 명령 감사 절차 수립
- SBOM 자동 생성 및 외부 다운로드 명령 화이트리스트 적용
- 개발자 워크스테이션에서 브라우저 지갑 및 키스토어 분리 보관
참고 자료: The Hacker News 원문, Visual Studio Code Tasks 공식 문서
핵심 정리
- 하이재킹된 npm과 Go 패키지가 VS Code Tasks를 통해 Python 인포스틸러를 드롭하는 다단계 침투 경로가 확인됨
- lifecycle 스크립트 외 보조 자동화 경로가 사용돼 패키지 설치 직후의 단순 검사만으로는 탐지가 어려움
- 동일 코드베이스로 Windows, Linux, macOS가 동시에 영향 받으며 암호화폐 지갑과 자격 증명이 주요 탈취 대상
- lockfile 해시 검증, 워크스페이스 신뢰 정책, SBOM 기반 모니터링을 결합한 공급망 점검 체계가 필요함