매일 아침 인공지능 모델을 학습시키기 위해 라이브러리를 설치하는 개발자들의 터미널에 보이지 않는 위협이 침투했다. 딥러닝 프레임워크인 PyTorch Lightning(인공지능 모델 학습을 돕는 도구)의 공식 패키지인 lightning이 공급망 공격의 통로로 활용된 사실이 확인되었다. 지난 4월 30일 배포된 2.6.2와 2.6.3 버전에는 사용자의 개발 환경을 무력화하는 악성 페이로드가 포함되어 있었다.

PyPI 패키지 lightning의 악성 버전 유포

이번 공격은 PyPI(파이썬 패키지 저장소)를 통해 배포된 lightning 패키지의 특정 버전을 타깃으로 삼았다. 사용자가 단순히 pip install lightning 명령어를 실행하는 것만으로도 악성 코드가 활성화된다. 해당 버전 내부에는 _runtime 디렉토리가 숨겨져 있으며, 모듈을 불러오는 순간 난독화된 자바스크립트 페이로드가 자동으로 실행된다. 공격자는 이 코드를 통해 시스템 내의 인증 토큰, 환경 변수, 클라우드 비밀 키를 탈취하고 GitHub 저장소를 오염시킨다. 이번 사태는 이전의 미니 샤이-훌루드(Mini Shai-Hulud) 캠페인과 동일한 위협 행위자가 주도한 것으로 분석된다. 공격자는 듄(Dune) 시리즈를 연상시키는 EveryBoiWeBuildIsAWormyBoi라는 접두사를 커밋 메시지에 사용하며 자신들의 흔적을 남겼다.

기존 공격과 달라진 침투 경로와 확산 방식

예전에는 npm(자바스크립트 패키지 관리자) 생태계를 직접 노리는 방식이 주를 이뤘으나, 이제는 파이썬 환경인 PyPI를 거점으로 삼아 자바스크립트 기반의 웜을 확산시키는 교묘한 전략을 취한다. 악성 코드는 npm 게시 권한을 획득하면, 해당 토큰으로 접근 가능한 모든 패키지에 setup.mjs 드로퍼(악성 코드를 설치하는 도구)와 router_runtime.js를 주입한다. 이후 패키지의 버전을 강제로 올리고 재배포하여, 이를 내려받는 하위 개발자들의 환경까지 연쇄적으로 감염시킨다. 데이터 유출은 4개의 병렬 채널을 통해 이루어지며, HTTPS POST 요청을 통해 공격자가 제어하는 서버로 즉시 전송된다. 특히 GitHub 커밋 검색 API를 활용해 암호화된 토큰을 주고받는 방식은 정적 분석을 통한 탐지를 어렵게 만든다.

개발 도구의 설정 파일을 악용한 지속성 확보

개발자가 바로 체감하는 가장 치명적인 변화는 Claude Code(AI 기반 코딩 도구)와 VS Code(코드 편집기)의 설정 파일이 공격의 도구로 전락했다는 점이다. 악성 코드는 .claude/settings.json 파일에 SessionStart 훅을 삽입하여, 사용자가 Claude Code를 실행할 때마다 자동으로 악성 스크립트가 호출되도록 설계되었다. VS Code 역시 .vscode/tasks.json의 폴더 열기 작업을 통해 동일한 공격이 수행된다. 만약 시스템에 Bun(자바스크립트 실행 환경)이 설치되어 있지 않다면, 공격자는 GitHub 릴리스에서 bun-v1.3.13 버전을 자동으로 내려받아 실행 환경을 구축한다. 이는 단순한 정보 탈취를 넘어, 개발자의 작업 환경 자체를 공격자의 통제하에 두는 영구적인 백도어를 구축한 사례다.

현재 Semgrep(코드 보안 취약점 분석 도구)은 이번 공격을 탐지할 수 있는 규칙을 공개했다. Semgrep 권고 페이지를 통해 감염 여부를 즉시 확인해야 한다. 만약 감염이 확인되었다면, GitHub 토큰과 클라우드 자격 증명을 즉시 폐기하고 환경을 재구축하는 것만이 유일한 대응책이다.