pile·
보안·인프랩 (인프런)인프런 (인프랩)·

소프트웨어 공급망 공격, pnpm으로 1차 방어선 구축하기

인프랩이 소프트웨어 공급망 공격(Supply-Chain Attack)에 대응하기 위해 pnpm 11의 보안 설정을 활용해 조직 전체의 1차 방어선을 구축한 과정을 다룬다. 2025년 3월 Axios npm 패키지가 탈취되어 악성 코드가 게시 후 6분 만에 배포된 사례를 출발점으로, pnpm 11의 기본 보안 옵션들이 이런 공격을 어떻게 원천 차단하는지 설명한다.

핵심 포인트
  • 공급망 공격은 서비스 인프라를 직접 공격하지 않고 외부 의존성(npm 패키지)을 먼저 침해해 내부망에 침투하는 고도의 우회 기법이다.
  • 2025년 3월 Axios 사건: npm 계정 탈취 후 악성 의존성 주입 → postinstall 스크립트로 .env·AWS 자격증명·SSH 키를 C2 서버로 전송, 6분 만에 정적 분석 도구가 탐지했다.
  • pnpm 11의 minimumReleaseAge(기본 1440분) 설정으로 신규 게시 버전 즉시 설치를 차단해 보안 커뮤니티 탐지 시간을 확보한다.
  • strictDepBuilds(기본 true)로 미승인 빌드 스크립트가 포함된 의존성 설치를 차단해 postinstall 류 공격을 원천 봉쇄한다.
  • 설치 시점 방어는 1차 방어선일 뿐 — import 시점·런타임·난독화 공격에 대한 다층 방어가 추가로 필요하다.
상세 정리
  • 공급망 공격 정의: 최종 타깃을 직접 공격하지 않고 개발 과정에서 신뢰하는 외부 자산(npm 패키지)을 먼저 침해한 뒤 징검다리로 삼아 내부망에 침투하는 기법이다.
  • Axios 사건 전개: 공격자가 npm 계정 탈취 → plain-crypto-js@4.2.1 악성 패키지를 의존성 트리에 강제 추가 → postinstall 스크립트로 setup.js 드로퍼 실행 → .env, AWS 자격증명, SSH 키를 C2 서버로 전송 → 깨끗한 패키지로 위장. 게시 후 6분 만에 탐지됐다.
  • lifecycle scripts 위험: npm install 시 preinstall → install → postinstall → prepare 등이 자동 실행돼 개발자가 코드를 실행하기 전에 악성 코드가 활성화될 수 있다.
  • pnpm 11 선택 이유: 인프랩 대부분의 저장소가 이미 pnpm을 사용 중이고, pnpm 11에서 보안 설정이 기본값으로 강화되며 Node.js 22 지원으로 안정성이 검증됐다.
  • minimumReleaseAge: 기본값 1440분(24시간). 게시된 지 24시간 이내 버전 설치를 차단해 캐럿 범위(^1.14.0)로도 안전한 버전만 설치된다.
  • strictDepBuilds: 기본값 true. 미승인 빌드 스크립트가 있는 의존성 설치 자체를 실패시켜 Axios 류 postinstall 공격을 원천 봉쇄한다.
  • allowBuilds 화이트리스트: 정상 동작에 필요한 패키지(esbuild, sharp 등)만 명시적으로 허용하고 최소한으로 유지한다.
  • blockExoticSubdeps: 간접 의존성이 npm 외 외부 소스(Git URL, HTTP tarball)에서 설치되는 것을 차단해 의존성 트리 무결성을 지킨다.
  • trustPolicy(no-downgrade): 이전 버전보다 신뢰 수준이 낮아지는 업그레이드(Trusted Publisher → None)를 차단한다.
  • verifyDepsBeforeRun: CI에서 error 설정 시 의존성이 불완전하면 스크립트 실행을 중단해 파이프라인 보안을 강화한다.
  • 마이그레이션 팁: 기존 pnpm 사용자는 한 메이저 버전씩(8→9→10→11) 단계적으로 업그레이드. npm/yarn 전환 시 pnpm import 명령으로 기존 락 파일을 pnpm-lock.yaml로 변환한다.
  • 한계 인정: 설치 시점 방어가 강화될수록 공격자는 import 시점, 런타임 실행, 난독화된 악성 로직으로 전환할 수 있어 다층 방어 전략이 필수다.
왜 읽나npm/pnpm을 사용하는 프론트엔드·풀스택 개발자와 DevSecOps 담당자에게 실제 공격 사례 기반의 의존성 보안 설정 레퍼런스.
인프랩 (인프런)
인프런 (인프랩) 블로그
원문은 여기서 이어서 읽을 수 있어요
원문 읽기
읽음 (0)

이 글과 비슷한

  1. 보안·gitlab-engGitLab Blog·

    Serena MCP 에이전트의 치명적 원격 코드 실행 취약점 분석

    GitLab 보안팀이 AI 코딩 에이전트 Serena(월 PyPI 다운로드 13.6만 건)에서 치명적 원격 코드 실행 취약점을 발견했다. Jinja2 비샌드박스 환경과 신뢰 모델의 미검사 경로가 결합해 개발자가 악의적 저장소를 열기만 해도 코드가 실행된다. serena-agent 1.7.0에서 SandboxedEnvironment 교체로 수정 완료됐다.

    요약 이어보기
    #mcp#security#rce+2