Malicious code in leo-connector-elasticsearch (npm)
The leo-connector-elasticsearch npm package was compromised as part of the Miasma worm campaign targeting the LeoPlatform npm ecosystem. On June 24, 2026, 20 LeoPlatform packages were published within a 3-second window by a threat actor who had taken over the npm account czirker belonging to the LeoPlatform organization.
The malicious payload is triggered automatically during npm install via a binding.gyp file using node-gyp command expansion (<!(node index.js > /dev/null 2>&1 && echo stub.c)), which bypasses lifecycle script scanners. The replaced index.js (~5.2 MB, obfuscated with ROT-N + AES-128-GCM encryption) deploys a multi-stage worm with the following capabilities:
snapshot-<hex> branches with fake "Dependabot Updates" workflows to maintain access after initial compromise.Any system that installed this version should be considered fully compromised. Rotate all secrets immediately from a separate, clean machine. See the linked SafeDep report for full payload analysis, indicators of compromise, and remediation guidance.
-= Per source details. Do not edit below this line.=-
The package ships a binding.gyp containing GYP command-expansion syntax (<!(...)) at line 6 inside the targets/sources fields. npm implicitly runs node-gyp rebuild whenever a binding.gyp is present — even without any declared install or postinstall lifecycle script — and GYP evaluates <!(...) as a shell command during the configure step. This causes the embedded command to execute on the installer's machine on npm install, functionally equivalent to a lifecycle hook running arbitrary code. The binding.gyp embedding command substitution rather than a list of real native source files (.c/.cc/.cpp) indicates the file's purpose is to run that command at install time, not to build a legitimate native addon.
왜 이 VPI인가 (설명가능 · 실험적)
VPI 산정 기준
| 영향도(기본값(정보 없음)) | 55.00 |
| 악용 신호(추가 악용신호 없음) | ×1.00 |
| VPI | 55.00 |
VPI 공식 vpi-v1 기준