devplatform-vite-plugin-preserve-css-modules@35.6.8
Malicious code in devplatform-vite-plugin-preserve-css-modules (npm)
Analysis
A vite-plugin-named package that is actually a multi-stage binary dropper. On require, package/index.js loads _loader.js, which downloads a platform-specific second-stage binary over HTTPS from Cloudflare Workers hosts (oob-worker[.]cf100-416[.]workers[.]dev, oob-worker[.]cf103-070[.]workers[.]dev, oob-worker[.]cf99-9b3[.]workers[.]dev) at paths /pkg/package, /pkg/package-arm64, /pkg/loader_mac, /pkg/package.exe. If the HTTPS download fails, it falls back to reconstructing the payload from DNS TXT records under the wel1[.]ru domain (c[.]sdk[.]dl[.]wel1[.]ru, sdk[.]dl[.]wel1[.]ru, ext[.]dl[.]wel1[.]ru, pkg[.]dl[.]wel1[.]ru, net[.]dl[.]wel1[.]ru). The downloaded binary is written to a hidden temp path (/var/tmp/.cache_<hex> on Unix, dotnet_diag_<hex>.exe in %TEMP% on Windows) and executed detached (cmd.exe /c start /b on Windows, /bin/sh -c "<path> &" on Unix), outliving the parent process. A marker file (.analytics_state) throttles re-downloads. The package's declared purpose (a CSS-modules vite plugin) is unrelated to this behaviour.
- analyzed by
- Leitwacht
- first seen
- Aug 5, 2026, 01:40 PM
- analyzed
- Aug 5, 2026, 04:41 PM
Related advisories
- dolyame-boxy-independent-bnpl-tiles@35.7.4
- dolyame-boxy-independent-bnpl-table@35.3.4
- bnpl-blocks-atom-bnpl-navigation-arrow@35.2.6
- bnpl-blocks-atom-bnpl-search-input@35.9.7
- bnpl-blocks-atom-bnpl-popup@35.4.7
- bnpl-blocks-atom-bnpl-skeleton@35.6.3
- devplatform-nx-ts@35.1.3
- bnpl-blocks-mobile-bnpl-separator@35.5.2
Independently detected by the Leitwacht supply-chain probe. IOCs are defanged. Published CC0. Think this is a mistake? See the dispute policy.