지난달 오픈소스 보안 리서치 회사 Socket이 npm 레지스트리에서 이상한 패키지 하나를 잡아냈다. 이름은 @common-stack/generate-plugin. 주간 다운로드 1,100회의 평범한 유틸리티였지만, 알파 버전 하나가 조용히 바뀌어 있었다. 개발자가 npm install을 실행하는 순간 노트북에서 클라우드 API 키와 CI/CD 토큰을 훔쳐 북한이 운영하는 서버로 실어 나르는 코드가 심어져 있었다.
이 패키지 하나만이 아니었다. 2026년 7월 4일, The Hacker News가 전체 그림을 공개했다.
지난 7개월 동안 북한이 npm·Go·Packagist·Chrome 네 개 생태계에 걸쳐 108개 악성 패키지를 심어 놓았다. 캠페인 이름은 PolinRider. 미국·유럽 개발자와 함께 한국 개발자도 표적 안에 있다.
정체: 취업 미끼에서 공급망 침투로 진화한 북한 위협 조직
PolinRider는 새로 등장한 조직이 아니다. MITRE ATT&CK 그룹 G1052로 등록된 Contagious Interview(별칭 DeceptiveDevelopment, Famous Chollima)의 연장선이다. Contagious Interview는 2023년 11월 Palo Alto Networks Unit 42가 처음 명명한 캠페인으로, 초기 전술은 단순했다. 링크드인에서 개발자에게 접근해 "코딩 인터뷰"라며 GitHub 링크를 보내고, 지원자가 저장소를 클론해 실행하면 그 순간 감염됐다.
지난 2년 사이 캠페인은 훨씬 더 조용해졌다. 이제 표적을 유인할 필요조차 없다. 개발자가 평소 신뢰하는 npm, Go, PyPI 같은 공식 패키지 저장소에 악성 코드를 직접 심는다. 개발자가 익숙한 라이브러리를 설치하는 것만으로도 감염이 시작된다.
MITRE는 이 확장된 활동을 상위 조직 Lazarus Group(G0032)의 하부 클러스터로 분류한다. Lazarus는 북한 정찰총국 산하 사이버 부대로 알려져 있으며, 2014년 소니픽처스 침해부터 2022년 로닌 브릿지 암호화폐 6억 2천만 달러 탈취까지 이어지는 조직이다. PolinRider의 최종 목표도 결국 같은 지점을 향한다. 자금 확보와 정보 수집이다.
공격 전개: 개발자의 신뢰가 침입 경로가 된다
Socket과 Sonatype 리서처들이 재구성한 감염 흐름은 다음과 같다.
특이한 점은 두 번째 페이로드를 저장하는 위치다. 공격자들은 이 페이로드를 자기들 서버가 아니라 공용 블록체인(TRON, BNB Smart Chain, Aptos)의 스마트 컨트랙트에 넣어 뒀다.
블록체인은 지워지지 않는다. 방어자가 C2 서버를 차단해도 페이로드는 그대로 살아 있고, 감염된 스크립트는 다음 실행 때 다시 꺼낸다. 조직화된 위협 그룹이 오픈소스 공급망을 이렇게까지 창의적으로 이용한 사례는 흔치 않다.
훔쳐 가는 것도 구체적이다. Socket이 분석한 페이로드에서 확인된 표적은 다음과 같다.
AWS·GCP·Azure 로컬 자격증명 파일(~/.aws/credentials, gcloud/config 등)
GitHub Actions·GitLab CI에서 사용되는 개인 액세스 토큰
브라우저에 저장된 세션 쿠키와 저장 암호
암호화폐 지갑 파일(MetaMask 로컬 저장소, Ledger Live 설정)
VS Code 워크스페이스 설정 파일(.tasks.json)
VS Code 설정 파일을 노렸다는 사실은 특히 흥미롭다. 이 파일에는 개발자가 자주 쓰는 명령·환경 변수·프로젝트 경로가 담기는데, 공격자는 이걸 정찰용 자료로 사용한다. 이 개발자가 어떤 회사 프로젝트를 만지는지, 사내 어떤 인프라를 쓰는지 지도가 그려진다.
규모: 5주 만에 2.9배로 늘어난 오염된 저장소
숫자가 잘 말해 준다. OpenSourceMalware 리서치 팀이 공개한 추적 결과를 보면 상황이 얼마나 빠르게 나빠지고 있는지 알 수 있다.
2026년 3월 8일: 오염이 확인된 GitHub 저장소 675개
2026년 4월 11일: 1,951개(5주 만에 2.9배)
저장소 소유자: 1,047명(개인 개발자와 조직 계정 혼합)
108개 패키지의 분포도 이 캠페인이 단발성이 아니라는 것을 보여 준다.
생태계
패키지 수
대표 표적
Go 모듈
61
백엔드 서비스 개발자
npm
19
JavaScript·프런트엔드
Packagist(PHP)
10
웹 애플리케이션
Chrome 확장
1
브라우저 세션
Go 생태계 61개가 가장 많다는 사실이 눈에 띈다. Go는 클라우드 네이티브 도구·인프라 관리 스크립트에 많이 쓰이는 언어다. 즉 공격자는 클라우드 인프라를 다루는 개발자를 정확히 표적으로 삼고 있다. 훔친 자격증명이 개인 프로젝트가 아니라 회사 인프라 접근권으로 이어질 확률이 그만큼 높다.
패키지가 심어진 뒤 감염되기까지의 통로도 넓다. 첫 번째는 하이재킹이다. 이미 신뢰받는 패키지의 새 버전에 악성 코드를 밀어 넣는 방식이다. 두 번째는 오타 스쿼팅이다. tailwindcss-style-animate 같은 이름으로 정상 라이브러리를 흉내 내는 방식이다.
한국 관점: 노출은 있지만 대응 채널은 아직 조용하다
한국 개발자와 기업에 대한 직접 피해 통계는 아직 공개되지 않았다. 하지만 노출 규모 자체는 결코 작지 않다.
국내 npm·PyPI·Go 사용자는 정부와 대기업 개발자 대부분을 포함한다. 삼성전자·네이버·카카오 같은 대형 기업의 오픈소스 활용률은 90%를 훌쩍 넘고, 스타트업은 사실상 100%다.
Lazarus의 상위 캠페인들이 한국을 타겟한 이력은 이미 여러 건 있다. AhnLab ASEC은 2026년 5월 보고서에서 Lazarus가 국내 소프트웨어 개발사의 Git Hooks와 Jenkins CI 파이프라인을 노린 사례를 공개했다.
한국 정부는 2026년 SBOM(Software Bill of Materials) 구축 사업에 40억 원을 배정했다. 방향은 맞지만 개별 캠페인 대응 속도와는 별개 문제다.
문제는 대응 창구다. 2026년 7월 6일 기준 KISA와 개인정보위는 PolinRider에 대한 별도 권고나 IOC 목록을 발표하지 않았다. Socket과 OpenSourceMalware가 공개한 완전한 IOC 목록은 한국어로 번역·전파되지 않은 상태다. 오픈소스 공급망 공격은 기업 SOC가 잡기 어려운 축이라, 개별 개발자 팀이 알아서 확인해야 하는데 정보 격차가 그대로 남는다.
왜 이 캠페인이 중요한가: 신뢰 모델이 흔들리는 순간
PolinRider가 앞서 있었던 공급망 사건들과 다른 점은 세 가지다.
첫째, 광범위성이다. 2024년 XZ Utils 백도어()는 단일 패키지 하나였다. 2025년 rand-user-agent 사건도 마찬가지였다. 108개 패키지가 4개 생태계에 동시에 심어진 사례는 이번이 처음이다.
둘째, 인프라의 회복력이다. 블록체인에 페이로드를 저장한다는 발상은 지금까지 익명 코인 사기 정도에서만 관찰됐다. 국가 후원 위협 조직이 정상 개발자 도구를 뚫는 데 이 방식을 쓴 첫 대규모 사례가 PolinRider다. 방어자가 페이로드를 지울 수단이 사실상 없다.
셋째, 표적의 이동이다. 과거 공급망 공격은 최종 사용자, 즉 웹사이트 방문자나 앱 사용자를 노렸다. PolinRider의 표적은 개발자 본인이다. 개발자 노트북 하나가 뚫리면 그 회사의 클라우드 인프라 전체가 위험해진다. 침해의 파급이 개별 사용자 손실이 아니라 조직 인프라 붕괴로 튀는 구조라는 의미다.
Contagious Interview 캠페인은 2023년 말 처음 알려질 당시만 해도 "링크드인에서 이상한 코딩 테스트 오면 조심하라"는 개인 위생 이야기였다. 3년이 지난 지금, 같은 조직은 개발자가 매일 여는 패키지 저장소 자체를 무기화했다. 신뢰 모델이 바뀌는 순간이다. 오픈소스에 대한 우리의 기본 가정, 즉 "널리 쓰이는 패키지는 안전할 것"이라는 가정 자체가 더 이상 유효하지 않다.