Malicious code in vite-plugin-compress-js (npm)
-= Per source details. Do not edit below this line.=-
On module load, the package's initPlugin() function performs an HTTP GET to https://www.jsonkeeper.com/b/OTOAQ (an anonymous public JSON-paste host) and passes the response body's .data field to new Function.constructor('require',...)(require), executing attacker-controlled JavaScript with full Node require access on the developer/build machine. The ESM entry invokes initPlugin() at top level; the CJS entry spawns a worker_threads Worker on __filename so the same fetch-and-exec runs in the worker. Evidence is in dist/index.cjs lines 148-156. The package name vite-plugin-compress-js mimics the legitimate vite-plugin-compress / vite-plugin-compression packages and copies their description (Use gzip or brotli to compress resources.) and surface API (gzip/brotli on closeBundle) as cover for the dropper. Runtime dependencies (express, request, sqlite3) are inconsistent with a compression plugin; request is the transport used by the dropper. Any project that adds this plugin to its Vite config triggers remote code execution at build time.
왜 이 VPI인가 (설명가능 · 실험적)
VPI 산정 기준
| 영향도(기본값(정보 없음)) | 55.00 |
| 악용 신호(추가 악용신호 없음) | ×1.00 |
| VPI | 55.00 |
VPI 공식 vpi-v1 기준