메뉴
HN
Hacker News 58일 전

Axios NPM 공급망 해킹 사고 전말(Post Mortem)

IMP
9/10
핵심 요약

가장 널리 쓰이는 JavaScript HTTP 클라이언트 라이브러리 중 하나인 axios의 주요 관리자 계정이 탈취되어 악성 버전(1.14.1, 0.30.4)이 3시간가량 npm에 배포되는 공급망 공격이 발생했습니다. 공격자는 윈도우, macOS, 리눅스용 원격 접속 트로이목마(RAT)를 설치하는 악의적인 의존성을 주입했습니다. 개발자들은 해당 버전을 사용 중인지 즉시 확인하고, 감염된 환경의 모든 비밀키를 교체하는 등 비상 조치를 취해야 합니다.

번역된 본문

저장소: axios / axios (Public)

포크(Fork): 11.6k 스타(Star): 109k

[이슈] Post Mortem: axios npm supply chain compromise #10636

  • 담당자(Assignees):
  • 라벨(Labels): type::security (보안과 관련된 변경사항으로 주로 CVE로부터 비롯됨)

설명 jasonsaayman이 2026년 4월 2일에 열음

본문

Post Mortem: axios npm 공급망 해킹 사고

  • 날짜: 2026년 3월 31일
  • 작성자: Jason Saayman
  • 상태: 복구 진행 중

2026년 3월 31일, 탈취된 계정을 통해 npm 레지스트리에 두 개의 악성 axios 버전(1.14.1 및 0.30.4)이 게시되었습니다. 두 버전 모두 plain-crypto-js@4.2.1이라는 의존성을 주입하여 macOS, Windows, Linux에 원격 접속 트로이 목마(RAT)를 설치했습니다. 해당 악성 버전은 삭제되기 전까지 약 3시간 동안 배포된 상태로 유지되었습니다.

영향을 받으셨나요?

lockfile(잠금 파일)을 확인하세요: grep -E " axios@(1\.14\.1|0\.30\.4)|plain-crypto-js " package-lock.json yarn.lock 2> /dev/null

만약 결과가 출력된다면, 해당 머신은 해킹된 것으로 간주해야 합니다:

  • axios@1.14.0(0.x 사용자의 경우 0.30.3)으로 다운그레이드하세요.
  • node_modules/plain-crypto-js/ 디렉토리를 삭제하세요.
  • 해당 머신의 모든 시크릿(secret), 토큰 및 자격 증명을 교체(rotate)하세요.
  • 네트워크 로그에서 sfrclak[.]com 또는 142.11.206.73의 8000번 포트로의 연결 기록이 있는지 확인하세요.
  • 이 문제가 CI Runner에서 발생한 경우, 영향을 받은 빌드 동안 주입된 모든 시크릿을 교체하세요.

만약 이미 깨끗한 버전으로 고정(pinned)되어 있었고, 3월 31일 00:21 UTC부터 03:15 UTC 사이에 새로 설치를 실행하지 않았다면 안전합니다.

CI/CD 관련 단계를 포함한 자세한 복구 가이드는 다음을 참조하세요:

  • StepSecurity: 전체 기술 분석 및 복구
  • Snyk: 권고사항 및 스캐닝 가이드
  • Socket: npm의 악성 종속성을 끌어오는 Axios 공급망 공격

무슨 일이 일어났나요 공격자는 표적화된 사회공학적 캠페인과 RAT(원격 접속 트로이 목마) 악성코드를 통해 수석 관리자의 PC에 대한 접근 권한을 획득했습니다. 이를 통해 그들은 npm 계정 자격 증명에 접근할 수 있었고, 이를 사용하여 악성 버전을 게시했습니다. 이번 공격은 오픈소스 관리자를 표적으로 삼은 유사한 캠페인에서 기록된 패턴을 따랐습니다.

해결 방안 수석 관리자의 모든 기기를 완전히 초기화(wipe)하고 모든 자격 증명을 재설정했습니다. 여기에는 개인 계정 및 기타 모든 목적의 계정과 상관없이 모든 플랫폼의 계정이 포함됩니다.

변경되는 사항 재발 방지를 위해 다음과 같은 변경 사항을 적용하고 있습니다:

  • 조치 유형: 모든 기기 및 자격 증명 재설정 (예방)
  • 변경 불가능한(Immutable) 릴리스 설정 (예방)
  • 게시를 위한 OIDC(OpenID Connect) 흐름의 적절한 도입 (예방)
  • 전반적인 보안 태세 개선 (예방)
  • 모든 GitHub Actions를 업데이트하여 모범 사례 채택 (예방)

이 목록이 끝이 아닙니다. 우리는 이러한 항목을 넘어 보안을 개선하기 위해 계속해서 적극적으로 노력할 것입니다.

공격 타임라인 초기 해킹이 발생한 정확한 시기에 대한 타임라인은 알 수 없지만, 패키지 자체의 이벤트 순서는 다음과 같습니다:

  • 3월 31일 약 2주 전: 수석 관리자를 대상으로 한 사회공학적 캠페인 시작
  • 3월 30일 05:57 UTC: plain-crypto-js@4.2.0이 npm에 게시됨
  • 3월 31일 00:21 UTC: plain-crypto-js@4.2.1이 주입된 axios@1.14.1이 게시됨
  • 3월 31일 약 01:00 UTC: 동일한 페이로드가 주입된 axios@0.30.4가 게시됨
  • 3월 31일 약 01:00 UTC: 최초의 외부 탐지 발생
  • 3월 31일 약 01:00 UTC: 커뮤니티 멤버들이 해킹을 보고하는 이슈를 제기함. 공격자는 탈취한 계정을 사용해 해당 이슈들을 삭제함.
  • 3월 31일 01:38 UTC: axios 협력자 DigitalBrainJS가 손상된 버전을 지원 중단(deprecate) 처리하기 위한 PR chore(ci): add deprecate action; #10591을 열고, 삭제된 이슈를 커뮤니티에 알리며 npm에 직접 연락함
  • 3월 31일 03:15 UTC: npm에서 악성 버전 제거 완료
  • 3월 31일 03:29 UTC: npm에서 plain-crypto-js 제거 완료

자세한 기술적 타임라인은 다음을 참조하세요:

  • StepSecurity: 포렌식 타임라인
  • Datadog Security Labs: 전체 공격 흐름 및 대응 분석
원문 보기
원문 보기 (영어)
axios / axios Public Uh oh! There was an error while loading. Please reload this page . Notifications You must be signed in to change notification settings Fork 11.6k Star 109k Post Mortem: axios npm supply chain compromise #10636 New issue Copy link New issue Copy link Open Open Post Mortem: axios npm supply chain compromise #10636 Copy link Assignees Labels type::security The PR is a secuirty related changed normally from a CVE The PR is a secuirty related changed normally from a CVE Description jasonsaayman opened on Apr 2, 2026 Issue body actions Post Mortem: axios npm supply chain compromise Date: March 31, 2026 Author: Jason Saayman Status: Remediation in progress On March 31, 2026, two malicious versions of axios (1.14.1 and 0.30.4) were published to the npm registry through my compromised account. Both versions injected a dependency called plain-crypto-js@4.2.1 that installed a remote access trojan on macOS, Windows, and Linux. The malicious versions were live for about 3 hours before being removed. Are you affected? Check your lockfile: grep -E " axios@(1\.14\.1|0\.30\.4)|plain-crypto-js " package-lock.json yarn.lock 2> /dev/null If anything comes back, treat that machine as compromised: Downgrade to axios@1.14.0 (or 0.30.3 for 0.x users) Delete node_modules/plain-crypto-js/ Rotate every secret, token, and credential on that machine Check your network logs for connections to sfrclak[.]com or 142.11.206.73 on port 8000 If this happened on a CI runner, rotate any secrets that were injected during the affected build If you were already pinned to a clean version and didn't run a fresh install between 00:21 and 03:15 UTC on March 31, you're fine. For detailed remediation guidance, including CI/CD-specific steps, see: StepSecurity: full technical analysis and remediation Snyk: advisory and scanning guidance Socket: Supply Chain Attack on Axios Pulls Malicious Dependency from npm What happened The attacker gained access to the lead maintainer's PC through a targeted social engineering campaign and RAT malware. This gave them access to the npm account credentials, which they used to publish the malicious versions. The attack followed patterns documented in similar campaigns targeting open source maintainers. Resolution Complete wipe of all lead maintainer devices as well as resetting of all credentials. This includes all accounts irrespective of platform, both personal and all other capacities. What's changing To prevent this from happening again, these are the changes being made: Action Type Reset of all devices and credentials Prevention Immutable release setup Prevention Proper adoption of OIDC flow for publishing Prevention Improvement of overall security posture Prevention Updating of all GitHub actions to adopt best practices Prevention This list is not the end. We will continue actively working on improving security beyond these items. Attack Timeline I don't have an exact timeline for when the initial compromise occurred, but this is the sequence of events for the package itself: About 2 weeks before March 31: social engineering campaign initiated against the lead maintainer March 30, 05:57 UTC: plain-crypto-js@4.2.0 published to npm March 31, 00:21 UTC: axios@1.14.1 published with plain-crypto-js@4.2.1 injected March 31, around 01:00 UTC: axios@0.30.4 published with the same payload March 31, around 01:00 UTC: first external detections March 31, around 01:00 UTC: community members file issues reporting the compromise. The attacker deletes them using the compromised account. March 31, 01:38 UTC: axios collaborator DigitalBrainJS opens PR chore(ci): add deprecate action; #10591 to deprecate the compromised versions, flags the deleted issues to the community, and contacts npm directly March 31, 03:15 UTC: malicious versions removed from npm March 31, 03:29 UTC: plain-crypto-js removed from npm For detailed technical timelines: StepSecurity: forensic timeline Datadog Security Labs: full attack flow and response analysis Lessons learned We are actively investigating how unauthorized access was obtained and reviewing all aspects of our security posture and access controls. While we do not have confirmed details to share at this time, this incident reinforces the need for continuous monitoring, strong account protections, and vigilance across both project infrastructure and individual maintainer environments. We will continue to strengthen our practices in alignment with industry best practices and in collaboration with groups such as the OpenJS Security Working Group. Security posture should be continuously monitored and improved. Specifically from this incident: Publishing directly from a personal account was a risk that could have been avoided. The OIDC flow and immutable release setup we are now adopting should have been in place before this happened. There was no automated way to detect an unauthorized publish. Detection depended entirely on the community noticing. Open source maintainers with high-impact packages are active targets for sophisticated social engineering. Hyper vigilance is needed both on the registry and in a personal capacity. Summary for broarder audience We can confirm that two compromised versions of Axios were briefly made available through a widely used software download system due to unauthorized access to the lead maintainer's account, not a change to the underlying code. We are working with the companies that operate this system, along with security experts, to investigate and contain the issue. Organizations that installed these versions should remove them immediately and treat affected systems as potentially compromised, including rotating any sensitive credentials. This was the result of a compromised lead maintainer's account, and we are actively investigating how access was obtained. We do not have confirmed details to share at this time. Acknowledgments Thanks to @DigitalBrainJS for acting fast when the compromised account had higher permissions than his own and for getting npm to take action. Thanks to Open Source Community and the npm security team for their fast response. The malicious versions have been removed from npm and are no longer infecting users. The immediate incident is resolved. We are actively working on the security improvements listed above to prevent this from happening again. I'll update this as the investigation progresses. Questions welcome in this thread. Reactions are currently unavailable Metadata Metadata Assignees jasonsaayman Labels type::security The PR is a secuirty related changed normally from a CVE The PR is a secuirty related changed normally from a CVE Type No type Projects No projects Milestone No milestone Relationships None yet Development No branches or pull requests Issue actions