JS frameworks, React/Vue/Svelte, and runtime updates Compiled for immediate developer deployment.
calendar_todaysummarizeWeek 15-2026bolt1 CRITICAL
article
npm의 axios 침해: 악성 버전이 Remote Access Trojan 배포
TAG: 공급망 보안
2026년 3월 30일, StepSecurity는 npm에 게시된 악성 axios 버전 두 가지(axios@1.14.1, axios@0.30.4)를 식별했습니다. 이는 공격자가 유지 관리자 계정을 탈취하고 이메일을 ProtonMail 주소로 변경한 뒤 게시한 것입니다. 두 릴리스 모두 phantom 의존성 plain-crypto-js@4.2.1을 주입하는데, 이 패키지는 axios 소스 코드에 전혀 임포트되지 않으면서 postinstall 훅을 통해 macOS, Windows, Linux를 대상으로 하는 크로스 플랫폼 RAT dropper를 실행합니다. npm install 후 2초 이내에 sfrclak.com:8000의 C2 서버에 접속하고, 플랫폼별 2단계 payload를 전달한 후 스스로 삭제하며 package.json을 깨끗한 버전 4.2.0으로 교체해 포렌식 탐지를 회피합니다. 주간 다운로드 1억 회 이상의 axios로서는 npm 역사상 가장 영향력이 큰 단일 패키지 침해 사건입니다. axios@1.14.0 또는 axios@0.30.3으로 다운그레이드하고 npm ci --ignore-scripts를 실행하시기 바랍니다.
Bun v1.3.12는 Bun.WebView를 도입합니다. 이는 WebKit(macOS, 외부 의존성 없음) 또는 Chrome DevTools Protocol을 백엔드로 사용하는 내장 헤드리스 브라우저 자동화 API로, OS 수준의 이벤트를 전달해 실제 사용자 입력과 구분할 수 없습니다. 또한 bun ./file.md 터미널 마크다운 렌더링, Bun.cron() 인-프로세스 스케줄링(중복 실행 없음, Disposable 지원), bunfig.toml의 minimumReleaseAge 설정도 추가됐습니다. JavaScriptCore 엔진은 1,650개 이상의 업스트림 커밋으로 업그레이드되어 using/await using 네이티브 지원, 빠른 Promise 처리, WASM SIMD 개선이 포함됩니다. 그 밖에 Linux의 Bun.serve()에 TCP_DEFER_ACCEPT 적용, HTTPS 프록시 CONNECT 터널 재사용, URLPattern 최대 2.3배 성능 향상, 대용량 UTF-16 입력에서 최대 11배 빠른Bun.stripANSI도 포함됩니다.
내부 이야기: StepSecurity가 사상 최대 npm 공급망 공격을 탐지하고 복구를 도운 방법
TAG: 공급망 보안
StepSecurity의 AI Package Analyst는 axios@1.14.1이 게시된 직후 이를 치명적인 위험으로 표시했습니다. 문서화되지 않은 plain-crypto-js 의존성과 OIDC 프로버넌스 증명 삭제 등 6가지 의심 신호를 감지한 것입니다. 공동 창업자 Ashish Kurmi가 GitHub에 경고 이슈를 작성하자, 탈취된 jasonsaayman 계정을 사용한 위협 행위자가 이를 삭제하는 과정이 약 20회 반복됐습니다. 공격자는 구글 위협 인텔리전스 그룹과 마이크로소프트에 의해 북한 그룹 UNC1069(Sapphire Sleet)로 귀속됐으며, 가짜 Slack 워크스페이스와 Microsoft Teams 통화를 통해 유지 관리자를 사회공학적으로 속여 RAT를 설치하게 하고 장기 npm 토큰을 탈취했습니다. StepSecurity Harden-Runner는 12,000개 이상의 공개 저장소에서 sfrclak.com으로의 C2 콜백을 독립적으로 확인했으며, 커뮤니티 웨비나에는 발표 24시간 만에 472명이 등록하고 200명이 실시간으로 참여했습니다.
TanStack Router, TanStack Start, TanStack Query가 이제 Solid 2.0 베타 지원을 제공하여 개발자들이 격리된 데모가 아닌 실제 애플리케이션에서 새 프레임워크를 시험해볼 수 있게 됐습니다. 업그레이드를 위해서는 @tanstack/solid-router@^2.0.0-beta.11, @tanstack/solid-start@^2.0.0-beta.12, solid-js@^2.0.0-beta.5, vite-plugin-solid@^3.0.0-next.4 설치가 필요하며, 데이터 페칭을 위해 @tanstack/solid-query@^6.0.0-beta.3을 선택적으로 추가할 수 있습니다. Solid 2.0은 비동기 렌더링, 파생 상태, SSR에 대한 주요 변경 사항을 도입했으며, 이는 라우팅과 서버 렌더링이 중요한 대규모 애플리케이션에서 특히 효과적입니다. TanStack 팀은 베타부터 RC, 안정화까지 Solid 코어를 밀착 추적하여 2.0 출시 내내 세 패키지 모두를 동기화할 계획입니다.
Christian Ekrem는 TypeScript에서 branded parser를 직접 구현하는 방식의 대안으로 ArkType을 살펴봅니다. ArkType의 문자열 DSL은 type({ email: "string.email", age: "0 <= number.integer <= 150" })처럼 작성하는 것만으로 컴파일 타임 타입과 런타임 유효성 검사기를 하나의 정의에서 생성하며, 객체 검증 벤치마크에서 Zod의 281ns 대비 14나노초를 기록합니다. Morph("string.numeric.parse" 같은 변환)는 입력 타입을 다른 출력 타입으로 단일 표현식에서 변환하여 컴파일-런타임 격차를 줄여줍니다. 유니온 판별도 자동으로 처리되어 Zod의 discriminatedUnion에서 필요한 명시적 판별 필드가 필요 없습니다. 솔직한 트레이드오프: ArkType 번들은 약 42KB(vs Zod ~13KB), 생태계 통합은 약 5개(Zod는 50개 이상), instanceof 기반 오류 검사는 neverthrow나 Effect 같은 Result 기반 FP 라이브러리와 조합할 때 마찰이 있습니다.
Webpack 5.106에서는 다섯 가지 주목할 만한 변경 사항이 있습니다. 새로운 compiler.hooks.validate 훅을 통해 플러그인 작성자가 전역 validate: false 플래그를 존중하는 스키마 유효성 검사 로직을 등록할 수 있습니다. CSS Modules는 exportType: "style" 지원으로 style-loader 없이 HTMLStyleElement를 통한 런타임 스타일 주입이 가능해졌습니다. CommonJS 구조 분해(const { add } = require('./math'))가 정적 분석되어 참조된 export만 트리 쉐이킹 후 남게 됩니다. TC39 Stage 3의 Source Phase Imports가 WebAssembly 모듈의 실험적 기능(experiments.sourceImport)으로 추가됐습니다. 또한 더 빠른 JavaScript 파싱 평가를 위해 개발/벤치마킹 환경에서 실험적 oxc-parser 통합을 사용할 수 있습니다. webpack-cli 생태계에서도 Node.js 20.9.0을 요구하고 dynamic import()를 통한 네이티브 TypeScript 설정을 지원하는 주요 v7 릴리스가 있었습니다.
Web Dev Simplified의 Kyle은 브라우저 외부 상태를 React로 동기화하는 올바른 훅으로서 useSyncExternalStore를 소개하며, 흔한 useEffect + useState 패턴을 대체하는 방법을 설명합니다. navigator.onLine 상태 추적과 dialog 엘리먼트의 열림 상태 동기화(useEffect가 놓치는 escape 키 닫힘 포함)라는 두 가지 실제 예시를 통해 개념을 설명합니다. 그런 다음 todoStore.ts에서 Set으로 구성된 리스너 subscribe 함수, 현재 배열을 반환하는 getSnapshot 함수, 리스너에게 알림을 보내는 변이 함수로 경량 전역 스토어를 직접 구축하는 방법을 보여줍니다. 이는 context나 Zustand의 대안이 됩니다. 이 훅의 선택적 세 번째 매개변수는 서버 안전한 기본 스냅샷을 제공해 서버 사이드 렌더링을 지원하는데, 이는 useEffect가 전혀 지원하지 못하는 기능입니다.
2026년 3월 30일, StepSecurity는 npm에 게시된 악성 axios 버전 두 가지(axios@1.14.1, axios@0.30.4)를 식별했습니다. 이는 공격자가 유지 관리자 계정을 탈취하고 이메일을 ProtonMail 주소로 변경한 뒤 게시한 것입니다. 두 릴리스 모두 phantom 의존성 plain-crypto-js@4.2.1을 주입하는데, 이 패키지는 axios 소스 코드에 전혀 임포트되지 않으면서 postinstall 훅을 통해 macOS, Windows, Linux를 대상으로 하는 크로스 플랫폼 RAT dropper를 실행합니다. npm install 후 2초 이내에 sfrclak.com:8000의 C2 서버에 접속하고, 플랫폼별 2단계 payload를 전달한 후 스스로 삭제하며 package.json을 깨끗한 버전 4.2.0으로 교체해 포렌식 탐지를 회피합니다. 주간 다운로드 1억 회 이상의 axios로서는 npm 역사상 가장 영향력이 큰 단일 패키지 침해 사건입니다. axios@1.14.0 또는 axios@0.30.3으로 다운그레이드하고 npm ci --ignore-scripts를 실행하시기 바랍니다.
Web Dev Simplified의 Kyle은 브라우저 외부 상태를 React로 동기화하는 올바른 훅으로서 useSyncExternalStore를 소개하며, 흔한 useEffect + useState 패턴을 대체하는 방법을 설명합니다. navigator.onLine 상태 추적과 dialog 엘리먼트의 열림 상태 동기화(useEffect가 놓치는 escape 키 닫힘 포함)라는 두 가지 실제 예시를 통해 개념을 설명합니다. 그런 다음 todoStore.ts에서 Set으로 구성된 리스너 subscribe 함수, 현재 배열을 반환하는 getSnapshot 함수, 리스너에게 알림을 보내는 변이 함수로 경량 전역 스토어를 직접 구축하는 방법을 보여줍니다. 이는 context나 Zustand의 대안이 됩니다. 이 훅의 선택적 세 번째 매개변수는 서버 안전한 기본 스냅샷을 제공해 서버 사이드 렌더링을 지원하는데, 이는 useEffect가 전혀 지원하지 못하는 기능입니다.
Bun v1.3.12는 Bun.WebView를 도입합니다. 이는 WebKit(macOS, 외부 의존성 없음) 또는 Chrome DevTools Protocol을 백엔드로 사용하는 내장 헤드리스 브라우저 자동화 API로, OS 수준의 이벤트를 전달해 실제 사용자 입력과 구분할 수 없습니다. 또한 bun ./file.md 터미널 마크다운 렌더링, Bun.cron() 인-프로세스 스케줄링(중복 실행 없음, Disposable 지원), bunfig.toml의 minimumReleaseAge 설정도 추가됐습니다. JavaScriptCore 엔진은 1,650개 이상의 업스트림 커밋으로 업그레이드되어 using/await using 네이티브 지원, 빠른 Promise 처리, WASM SIMD 개선이 포함됩니다. 그 밖에 Linux의 Bun.serve()에 TCP_DEFER_ACCEPT 적용, HTTPS 프록시 CONNECT 터널 재사용, URLPattern 최대 2.3배 성능 향상, 대용량 UTF-16 입력에서 최대 11배 빠른Bun.stripANSI도 포함됩니다.
내부 이야기: StepSecurity가 사상 최대 npm 공급망 공격을 탐지하고 복구를 도운 방법
StepSecurity의 AI Package Analyst는 axios@1.14.1이 게시된 직후 이를 치명적인 위험으로 표시했습니다. 문서화되지 않은 plain-crypto-js 의존성과 OIDC 프로버넌스 증명 삭제 등 6가지 의심 신호를 감지한 것입니다. 공동 창업자 Ashish Kurmi가 GitHub에 경고 이슈를 작성하자, 탈취된 jasonsaayman 계정을 사용한 위협 행위자가 이를 삭제하는 과정이 약 20회 반복됐습니다. 공격자는 구글 위협 인텔리전스 그룹과 마이크로소프트에 의해 북한 그룹 UNC1069(Sapphire Sleet)로 귀속됐으며, 가짜 Slack 워크스페이스와 Microsoft Teams 통화를 통해 유지 관리자를 사회공학적으로 속여 RAT를 설치하게 하고 장기 npm 토큰을 탈취했습니다. StepSecurity Harden-Runner는 12,000개 이상의 공개 저장소에서 sfrclak.com으로의 C2 콜백을 독립적으로 확인했으며, 커뮤니티 웨비나에는 발표 24시간 만에 472명이 등록하고 200명이 실시간으로 참여했습니다.
TanStack Router, TanStack Start, TanStack Query가 이제 Solid 2.0 베타 지원을 제공하여 개발자들이 격리된 데모가 아닌 실제 애플리케이션에서 새 프레임워크를 시험해볼 수 있게 됐습니다. 업그레이드를 위해서는 @tanstack/solid-router@^2.0.0-beta.11, @tanstack/solid-start@^2.0.0-beta.12, solid-js@^2.0.0-beta.5, vite-plugin-solid@^3.0.0-next.4 설치가 필요하며, 데이터 페칭을 위해 @tanstack/solid-query@^6.0.0-beta.3을 선택적으로 추가할 수 있습니다. Solid 2.0은 비동기 렌더링, 파생 상태, SSR에 대한 주요 변경 사항을 도입했으며, 이는 라우팅과 서버 렌더링이 중요한 대규모 애플리케이션에서 특히 효과적입니다. TanStack 팀은 베타부터 RC, 안정화까지 Solid 코어를 밀착 추적하여 2.0 출시 내내 세 패키지 모두를 동기화할 계획입니다.
Christian Ekrem는 TypeScript에서 branded parser를 직접 구현하는 방식의 대안으로 ArkType을 살펴봅니다. ArkType의 문자열 DSL은 type({ email: "string.email", age: "0 <= number.integer <= 150" })처럼 작성하는 것만으로 컴파일 타임 타입과 런타임 유효성 검사기를 하나의 정의에서 생성하며, 객체 검증 벤치마크에서 Zod의 281ns 대비 14나노초를 기록합니다. Morph("string.numeric.parse" 같은 변환)는 입력 타입을 다른 출력 타입으로 단일 표현식에서 변환하여 컴파일-런타임 격차를 줄여줍니다. 유니온 판별도 자동으로 처리되어 Zod의 discriminatedUnion에서 필요한 명시적 판별 필드가 필요 없습니다. 솔직한 트레이드오프: ArkType 번들은 약 42KB(vs Zod ~13KB), 생태계 통합은 약 5개(Zod는 50개 이상), instanceof 기반 오류 검사는 neverthrow나 Effect 같은 Result 기반 FP 라이브러리와 조합할 때 마찰이 있습니다.
Webpack 5.106에서는 다섯 가지 주목할 만한 변경 사항이 있습니다. 새로운 compiler.hooks.validate 훅을 통해 플러그인 작성자가 전역 validate: false 플래그를 존중하는 스키마 유효성 검사 로직을 등록할 수 있습니다. CSS Modules는 exportType: "style" 지원으로 style-loader 없이 HTMLStyleElement를 통한 런타임 스타일 주입이 가능해졌습니다. CommonJS 구조 분해(const { add } = require('./math'))가 정적 분석되어 참조된 export만 트리 쉐이킹 후 남게 됩니다. TC39 Stage 3의 Source Phase Imports가 WebAssembly 모듈의 실험적 기능(experiments.sourceImport)으로 추가됐습니다. 또한 더 빠른 JavaScript 파싱 평가를 위해 개발/벤치마킹 환경에서 실험적 oxc-parser 통합을 사용할 수 있습니다. webpack-cli 생태계에서도 Node.js 20.9.0을 요구하고 dynamic import()를 통한 네이티브 TypeScript 설정을 지원하는 주요 v7 릴리스가 있었습니다.
이번 주 최대 이슈는 npm 공급망 공격으로, HTTP 클라이언트 중 가장 많이 다운로드되는 axios가 표적이 되었습니다. 악성 버전 axios@1.14.1과 axios@0.30.4가 탈취된 메인테이너 계정을 통해 배포되었으며, 설치 후 2초 이내에 크로스 플랫폼 원격 접근 트로이목마를 실행하는 phantom 의존성 plain-crypto-js@4.2.1이 포함되었습니다. 이 공격은 북한 그룹 UNC1069(Sapphire Sleet)의 소행으로 귀속되었으며, npm 역사상 가장 영향이 큰 단일 패키지 침해 사건입니다. 즉각적인 조치로 axios@1.14.0 또는 axios@0.30.3으로 다운그레이드하고 npm ci --ignore-scripts를 실행해야 합니다.
런타임과 툴링 측면에서 Bun v1.3.12는 내장 헤드리스 브라우저 자동화를 위한 Bun.WebView, 인-프로세스 스케줄링을 위한 Bun.cron(), 그리고 using/await using 네이티브 지원을 포함한 1,650개 이상의 업스트림 커밋으로 업그레이드된 JavaScriptCore 엔진을 출시했습니다. Webpack 5.106은 CommonJS 구조 분해 트리 쉐이킹, CSS Modules exportType: "style" 지원, WebAssembly용 실험적 TC39 Stage 3 Source Phase Imports를 추가했습니다. webpack-cli도 Node.js 20.9.0을 요구하는 네이티브 TypeScript 설정을 지원하는 주요 v7 릴리스를 선보였습니다.
프레임워크 분야에서는 TanStack Router, Start, Query가 Solid 2.0 베타 지원을 추가했으며, solid-js@^2.0.0-beta.5와 vite-plugin-solid@^3.0.0-next.4가 필요합니다. ArkType은 객체 검증에서 Zod의 281 ns 대비 14 ns를 기록하는 강력한 Zod 대안으로 주목받고 있지만, 42 KB 번들과 제한된 에코시스템 통합이 트레이드오프입니다. useSyncExternalStore에 대한 심층 분석은 navigator.onLine 상태와 dialog 열림 상태 등 브라우저 외부 상태를 올바르게 처리하고, useEffect가 전혀 지원하지 않는 SSR 지원도 포함한다는 점을 보여주었습니다.
Key Takeaways
즉시 axios@1.14.0 또는 axios@0.30.3으로 다운그레이드하십시오. 버전 1.14.1과 0.30.4에는 북한 그룹 UNC1069가 배포한 공급망 RAT이 포함되어 있으며, npm ci --ignore-scripts를 반드시 실행하십시오.
Bun v1.3.12는 macOS에서 외부 의존성 없이 헤드리스 브라우저를 자동화하는 Bun.WebView와 중복 실행 없이 인-프로세스 스케줄링을 지원하는 Bun.cron()을 제공합니다.
ArkType은 단일 문자열 DSL 정의로 Zod의 281 ns 대비 14 ns의 객체 검증 속도를 달성하지만, 42 KB 번들과 약 5개의 에코시스템 통합(Zod는 50개 이상)은 대부분의 프로젝트에서 Zod가 더 안전한 기본 선택임을 의미합니다.