NPM 저장소에서 악성 패키지가 8만 6천 회 이상 다운로드되며 개발자들의 보안이 심각한 위험에 노출되었어요. 공격자들이 NPM의 원격 동적 의존성 기능을 악용해 126개의 악성 패키지를 유포했는데, 이들은 개발자의 민감한 정보를 탈취하고 있답니다.

NPM 원격 동적 의존성의 보안 허점
NPM의 원격 동적 의존성(Remote Dynamic Dependencies) 기능이 PhantomRaven 공격 캠페인의 주요 표적이 되었어요. 일반적으로 패키지 의존성은 개발자에게 명확히 표시되고 NPM의 신뢰할 수 있는 인프라에서 다운로드되는데, 원격 동적 의존성은 이와 다르게 작동해요.
이 기능은 패키지가 신뢰할 수 없는 웹사이트에서 의존성을 다운로드할 수 있도록 허용하며, 심지어 암호화되지 않은 HTTP 연결을 통해서도 가능합니다. 공격자들은 이러한 허점을 악용해 packages.storeartifact.com과 같은 악성 URL에서 의존성을 다운로드하도록 코드를 심어놨어요.

보이지 않는 악성 의존성의 위험성
가장 교묘한 점은 이러한 악성 의존성이 개발자와 보안 스캐너에게 완전히 “보이지 않는다”는 것이에요. 패키지를 설치할 때 “0 Dependencies”로 표시되지만, 실제로는 공격자의 서버에서 악성 코드를 자동으로 다운로드하고 설치합니다.
더욱 위험한 것은 이러한 의존성이 패키지를 설치할 때마다 공격자 서버에서 “새로운” 코드를 가져온다는 점이에요. 캐시되거나 버전 관리되지 않기 때문에, 공격자들은 다음과 같은 정교한 공격을 수행할 수 있어요:
- IP 주소를 확인해 VPN을 사용하는 보안 연구원에게는 무해한 코드 제공
- 기업 네트워크에는 악성 코드 전송
- 클라우드 환경에 특화된 맞춤형 페이로드 배포
- 몇 주간 깨끗한 코드를 제공하다가 갑자기 악성 버전으로 전환
AI 챗봇 환각 현상을 악용한 패키지명 선택
PhantomRaven 공격자들은 AI 챗봇의 “환각(hallucination)” 현상을 교묘하게 이용했어요. 개발자들이 AI 챗봇에게 필요한 의존성 이름을 문의할 때, 챗봇이 실제로는 존재하지 않는 패키지명을 제안하는 경우가 있는데, 공격자들은 이러한 환각된 패키지명을 수집해 악성 패키지의 이름으로 사용했습니다.
이는 개발자들이 AI의 추천을 신뢰하고 해당 패키지를 설치할 가능성이 높다는 점을 노린 매우 정교한 사회공학적 공격이에요. LLM 개발자들과 연구자들이 아직 환각 현상의 정확한 원인을 파악하지 못하고 있어, 이러한 공격 방식은 당분간 계속될 것으로 보입니다.

탈취되는 민감한 개발자 정보들
악성 패키지에 포함된 의존성들은 감염된 시스템을 철저히 스캔하며 다양한 민감 정보를 수집해요. 주요 탈취 대상은 다음과 같습니다:
개발자의 내부 시스템 구성과 정보를 보여주는 환경 변수들이 첫 번째 표적이에요. GitHub, Jenkins, NPM 자격 증명도 수집되는데, 이는 후속 공급망 공격에 활용될 수 있어 매우 위험합니다.
특히 CI/CD(지속적 통합 및 지속적 배포) 환경 전체가 탈취 대상인 점이 심각해요. CI/CD는 여러 개발자의 코드 변경사항을 하나의 코드베이스에 자동으로 통합하는 프로세스를 담당하므로, 이 정보가 유출되면 전체 개발 파이프라인이 위험에 노출됩니다.
편집증에 가까운 데이터 유출 방식
공격자들은 수집한 데이터를 유출할 때 “편집증에 가까울 정도로” 중복된 방식을 사용했어요. HTTP 요청, JSON 요청, 웹소켓 연결 등 여러 경로를 동시에 활용해 데이터 유출이 확실히 이뤄지도록 했습니다.
이러한 다중 경로 접근 방식은 하나의 통신 방법이 차단되더라도 다른 경로를 통해 정보를 빼낼 수 있도록 하는 정교한 백업 시스템이에요. 보안 도구들이 모든 통신 경로를 동시에 모니터링하기 어렵다는 점을 노린 전략입니다.

NPM 패키지 보안 강화 방안
이번 PhantomRaven 공격을 통해 드러난 NPM 패키지 보안 취약점을 해결하기 위해서는 여러 방면의 대응이 필요해요. 개발자들은 패키지 설치 전 의존성을 꼼꼼히 확인하고, 특히 “0 Dependencies”로 표시되는 패키지라도 실제 네트워크 활동을 모니터링해야 합니다.
조직 차원에서는 NPM 패키지 설치 시 네트워크 트래픽을 모니터링하고, 알려지지 않은 도메인으로의 연결을 차단하는 정책을 수립하는 것이 중요해요. 또한 AI 챗봇의 패키지 추천을 맹신하지 말고, 공식 NPM 저장소에서 패키지의 존재 여부와 평판을 직접 확인하는 습관을 기르는 것이 필요합니다.
NPM 플랫폼 자체적으로도 원격 동적 의존성 기능에 대한 보안 강화와 더 엄격한 검증 프로세스 도입이 시급한 상황이에요.
개발자 여러분도 NPM 패키지 보안에 더욱 주의를 기울여 안전한 개발 환경을 만들어가시길 바라요.
출처: https://arstechnica.com/security/2025/10/npm-flooded-with-malicious-packages-downloaded-more-than-86000-times/
같이 보면 좋은 글
#NPM패키지보안 #악성코드 #PhantomRaven #원격동적의존성 #개발자보안 #패키지관리 #사이버보안 #공급망공격 #정보보안 #웹개발보안 #JavaScript보안 #Node.js보안 #코드보안 #개발환경보안 #보안위협 #악성패키지 #데이터유출 #개발도구보안 #오픈소스보안 #소프트웨어보안 #보안취약점 #해킹방지 #보안강화 #개발자주의사항 #IT보안뉴스