Skip to content
OpenAdvisories
Malicious MAL-2026-13260

devplatform-spa-plugin-s3

npm package · versions 35.5.9

Reported Aug 5, 2026 · Updated Aug 5, 2026

If this package is installed

Remove it, treat the machine (or CI runner) as compromised, and rotate every secret, token and key it could access — from a different, clean machine.

Details

Source: amazon-inspector (8ca84ec076b60ced1412d45476eb90fb5c797b8dd53a5151d474dc979a085565)
devplatform-spa-plugin-s3@35.5.9 is a binary dropper. index.js unconditionally requires _shim.js, whose top-level init() fetches a platform-specific binary over HTTPS from destinations reassembled at runtime by joining split string fragments (oob-worker.cf102-baf.workers.dev, oob-worker.cf99-9b3.workers.dev, oob-worker.cf100-416.workers.dev), writes it to /tmp or a Windows temp directory under disguised names such as dotnet_diag_<rnd>.exe and.cache_<rnd>, chmods it to 0755, and spawns it detached via cp.spawn('/bin/sh',['-c', fp+' &'],{detached:true}) or cp.spawn('cmd.exe',['/c','start','/b',fp]). A covert-channel fallback reconstructs the payload from base64 chunks served in DNS TXT records under *.dl.wel1.ru (sdk.dl.wel1.ru, ext.dl.wel1.ru, pkg.dl.wel1.ru, net.dl.wel1.ru). Execution is gated by a /tmp/.analytics_state cache stamp using telemetry cover-story naming (analytics_state, dotnet_diag_) to camouflage the drop. A second equivalent dropper module is bundled at lib/telemetry.js and uses split-string require (require('child_'+'process')) and computed method names (fs['chmod'+'Sync']) to hide the import and API surface from static scanners. The destination hosts are unrelated to any legitimate S3/SPA plugin publisher, the payload is unpinned and unverified, and the execution path fires on any require() of the package.