Table of Contents
TL;DR
On May 27, 2026, two npm accounts published 164 (as of June 1, 183) malicious packages across five scoped namespaces targeting what appear to be a cloud platform provider and a financial services company. Every package is version 99.99.99 and carries a postinstall payload that downloads a second-stage script, spawns it as a detached process, and sends the victim’s full environment variables to hxxps://oob[.]moika[.]tech/report.
Update (May 29, 2026): A third npm account,
t-in-one(nath.dr4k3@gmail.com), published 12 more packages across three new scopes (@t-in-one,@capibar.chat,@sber-ecom-core) reusing the same C2 host and the same hardcodedX-Secretvalue. One member,@sber-ecom-core/sberpay-widget, impersonates Sberbank’s payment widget. Unlike the May 27 wave, this batch ships a three-layer-obfuscated payload and a functional install-time kill switch. Details in the Update section.
Update (June 1, 2026): A fourth npm account,
emcd-vue(emcd-vue@proton.me), published at least 3 packages across the@emcd-vuescope, impersonating EMCD (emcd.io), a real Russian cryptocurrency mining pool and exchange. The sameX-Secretvalue ties this wave to the prior three accounts. This is the campaign’s most technically advanced wave: WaCk/JScrambler obfuscation (811-element string array, custom base64 alphabet), payload written to~/.emcd-vue_init.jsin the home directory (not temp), a structured FUSION_ env-var handshake to the second stage, and a README kill switch deliberately mismatched from the one in code. Details in the EMCD Update section.
Impact:
- Full
process.envexfiltration on install: API keys, tokens, secrets, and any credentials present in the developer or CI environment - Second-stage payload executes as a detached process and persists after
npm installexits - Targets cloud platform and financial services namespaces — any developer or CI pipeline resolving packages from the public registry is at risk if scopes are not locked to a private registry
Indicators of Compromise:
- npm accounts:
mr.4nd3r50n,pik-libs,t-in-one(third account, May 29; emailnath.dr4k3@gmail.com),emcd-vue(fourth account, June 1; emailemcd-vue@proton.me) - C2 report endpoint:
hxxps://oob[.]moika[.]tech/report - Second-stage payload:
hxxps://oob[.]moika[.]tech/payload/{mac|win|linux}.js - Shared secret:
l95HdDaz3kQx1Zsg3WxH6HvKANf51RY1(sent asX-SecretHTTP header, identical across all three accounts) - Temp file created:
._cloudplatform-single-spa_init.js(May 27 wave) and._t-in-one_init.js(May 29 wave) in OS temp directory; run-once marker dir~/.cache/._t-in-one_init/ - Install-time kill switch env var:
T_IN_ONE_NO_TELEMETRY(May 29 wave) - Home-dir payload:
~/.emcd-vue_init.js(June 1 wave — written to home directory, not temp); home-dir cache~/.emcd-vue_init/ - Kill switch env var:
EMCD_VUE_NO_TELEMETRY(June 1 wave, functional in code; README advertisesEMCD_VUE_8D440FE1_NO_TELwhich is non-functional by design) - Internal-registry lure:
npm.t-in-one.io - Version
99.99.99in any of the five May 27 scopes; versions5.7.1,99.5.7,99.5.8in@t-in-one,@capibar.chat,@sber-ecom-core
The Campaign
SafeDep detected both publish events on May 27, 2026. Account mr.4nd3r50n began at 21:15 UTC, publishing 139 packages across two scopes. Account pik-libs followed 22 minutes later at 21:37 UTC, publishing 25 packages across three scopes. The 22-minute gap, identical payload code, and shared hardcoded secret all point to one actor operating both accounts.
Targeted Scopes
| Account | Scope | Packages | Target profile |
|---|---|---|---|
mr.4nd3r50n | @cloudplatform-single-spa | 122 | Cloud platform micro-frontend modules |
mr.4nd3r50n | @mlspace | 17 | ML platform / AI workspace modules |
pik-libs | @car-loans | 19 | Car loan application micro-frontends |
pik-libs | @fb-deposit | 4 | Banking deposit form modules |
pik-libs | @debit-ib | 2 | Debit and internet banking forms |
The package names are not generic squats. They mirror specific internal service names: @cloudplatform-single-spa/certificate-manager, @cloudplatform-single-spa/vpn, @cloudplatform-single-spa/ml-inference, @mlspace/experiments-monitoring, @car-loans/mobile-car-loans-application, @fb-deposit/form-deposit-auth. The specificity (billing, VPN, Kubernetes, ML inference, IAM, loan flows, deposit forms, debit card applications) indicates the actor profiled each organization’s internal package ecosystem before publishing.
All packages carry the same fabricated description: "Internal configuration loader with env, vault and remote config support".
The Bug Bounty Marker
Two packages from mr.4nd3r50n — @cloudplatform-single-spa/logaas and @mlspace/model-registry — carry no active payload. Their description reads "BugBounty testing by mr4nd3r50n". This pattern, placing inert probe packages alongside active stealers, appears in other campaigns where the actor tests whether internal names resolve to the public registry before deploying the payload. Whatever the intent, the remaining 162 packages executed real credential-stealing code on install.
Payload Analysis
Package Impersonation
The README for each package is crafted to pass casual inspection. Both samples follow an identical template — the package name, scope, and domain are swapped but the structure is verbatim:
Internal package — Platform Engineering TeamDocs: https://docs.car-loans.io/platform/application-affIssues: https://jira.car-loans.io/projects/PLATFORM
Internal configuration loader with env, vault and remote config support
Installation# Make sure .npmrc points to the internal registry:# registry=https://npm.car-loans.ioThe fabricated docs and Jira URLs (docs.car-loans.io, jira.car-loans.io) mirror what real internal tooling at these organizations looks like. The .npmrc comment does the most work: it tells developers to point to a private registry (the correct security practice), making the package read as a legitimate internal artifact already published to the right place.
The README also includes a fake version history showing 2.0.0 and 2.1.0 entries with plausible changelogs. The malicious 99.99.99 is listed simply as “Added ARM64 support / Improved error handling / Updated TypeScript types.”
The Telemetry Cover Story
The most deliberate social engineering in these packages is the “telemetry” framing:
TelemetryOn install, this package sends anonymous telemetry to telemetry.car-loans.iofor environment compatibility monitoring.
Disable: CAR_LOANS_NO_TELEMETRY=1 npm installThe cloud platform scope uses telemetry.cloudplatform-single-spa.io and CLOUDPLATFORM_SINGLE_SPA_NO_TELEMETRY=1. A developer who notices the outbound POST during install reads it as authorized internal telemetry. A security reviewer scanning for red flags finds a disclosure and an opt-out, both hallmarks of legitimate telemetry practice. The actual exfiltration goes to hxxps://oob[.]moika[.]tech/report, not the telemetry domain in the README, but the framing preempts suspicion before anyone looks that closely.
Execution Trigger
All active packages declare the payload through npm’s postinstall lifecycle hook in package.json:
The hook runs scripts/postinstall.js immediately after npm install completes, before control returns to the developer or CI runner.
Postinstall Flow
The payload executes in six steps:
- Delay — pauses for 3 seconds to evade automated sandboxes that time out short-lived processes
- OS detection — identifies the platform as
mac,win, orlinux - Second-stage download — fetches
hxxps://oob[.]moika[.]tech/payload/{mac|win|linux}.jsand writes it to the OS temp directory as._cloudplatform-single-spa_init.js - Detached spawn — launches the downloaded script as a separate Node.js process with
detached: true, so it continues running afternpm installexits - Exfiltration — POSTs to
hxxps://oob[.]moika[.]tech/reportwith the full contents ofprocess.envplus hostname, username, platform, architecture, current working directory, and Node.js version - Fallback beacon — if the second-stage download fails, sends the same system data directly without the second stage
Infrastructure Constants
Three values are hardcoded across all 162 active packages:
CALLBACK_URL = https://oob.moika.tech/reportPAYLOAD_BASE = https://oob.moika.tech/payloadSECRET = l95HdDaz3kQx1Zsg3WxH6HvKANf51RY1The SECRET value is sent as an X-Secret header on every outbound request. Its presence across both mr.4nd3r50n and pik-libs packages, spanning two organizations and two publishing sessions, is the clearest indicator that both campaigns share a single author.
What Gets Exfiltrated
process.env on a developer workstation or CI runner typically holds NPM_TOKEN, AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, GITHUB_TOKEN, database URLs, and any other credentials injected as environment variables. The payload sends the raw environment object with no key filtering. On a CI pipeline, this is effectively the full set of deployment secrets.
The 3-second delay and detached spawn mean credential theft and second-stage execution finish whether or not the developer notices the pause.
Scale and Comparison
164 packages across five namespaces in under 25 minutes. The sl4x0 campaign took nine months to publish 92 packages against 20-plus organizations. The Genoma UI campaign used three packages in April 2026.
Two things separate this campaign from most dependency confusion probes.
Most probes send DNS beacons with hostname and username — enough to confirm a hit, not enough to do damage. This payload sends raw process.env. An npm install on a CI runner with active cloud credentials is a full credential compromise.
Fetching a second stage at runtime keeps the initial package small and defers the actual capability. A registry scanner or developer reviewing the tarball sees the first stage only, and misses the real behavior. The Burp Collaborator dependency confusion technique Snyk researchers used in 2025 was single-stage; this campaign separates probe from execution.
Update: Third Account and an Obfuscated Variant
On May 29, 2026, a third npm account, t-in-one, published 12 more packages across three new scopes. The account email is nath.dr4k3@gmail.com. The registry metadata confirms the burst: the ten @t-in-one packages were published between 2026-05-29T09:01:56Z and 09:02:39Z, with the @capibar.chat and @sber-ecom-core republishes following minutes later.
| Scope | Packages | Version | Notes |
|---|---|---|---|
@t-in-one | 10 | 5.7.1 | Credential/token-themed names (see below) |
@capibar.chat | 1 | 99.5.7 | ui-kit (dependency confusion) |
@sber-ecom-core | 1 | 99.5.8 | sberpay-widget, impersonates Sberbank’s widget |
The ten @t-in-one package names are deliberately credential and token themed so they read as internal auth modules: add_application, add_app_middleware_token, get_application_hid, form_product_token, application_id_storage_key_token, only_difference_payload, prefill_credit_data_token, prefill_bundle_data_token, add_application_tid, and add_application_service_token.
Same actor, confirmed by the secret
The link to the May 27 campaign is not circumstantial. Every package in this wave carries the same postinstall hook, reports to the same oob.moika.tech host, and authenticates with the same hardcoded secret l95HdDaz3kQx1Zsg3WxH6HvKANf51RY1. That value had previously appeared only across the mr.4nd3r50n and pik-libs accounts. Its reuse on a third account ties all three to one operator.
The @t-in-one README reuses the campaign’s social-engineering template verbatim, pointing developers at a fabricated internal registry:
> Internal package — Platform Engineering Team> Docs: https://docs.t-in-one.io/platform/add_application> Issues: https://jira.t-in-one.io/projects/PLATFORM
# Make sure .npmrc points to the internal registry:# registry=https://npm.t-in-one.ioThe Sberbank target
@sber-ecom-core/sberpay-widget@99.5.8 is a textbook dependency confusion artifact aimed at a real bank: the scope and package name impersonate Sberbank’s internal SberPay payment widget. The May 27 campaign already carried a Russian-market signal (@cloudplatform-single-spa/marketplace-gigachat, named for Sber’s GigaChat LLM); this wave makes the financial-sector targeting explicit. Both @capibar.chat/ui-kit and @sber-ecom-core/sberpay-widget also carry earlier 99.0.7 versions published 2026-05-04, indicating the actor pre-staged these scopes weeks before the May 27 and May 29 bursts.
Three-layer obfuscation
Unlike the May 27 wave, where the C2 host, payload base, and secret sat in cleartext, this variant ships an obfuscated scripts/postinstall.js (about 13 KB). It is three layers: obfuscator.io output, a custom base64 alphabet, and an integer-shuffle string table. The string-table decoder is the standard obfuscator.io pattern:
'use strict';const a0_0x861202=a0_0x8d15;(function(_0x55b320,_0x2ab1fe){const _0x89f4a3=a0_0x8d15,_0x2aba03=_0x55b320();while(!![]){try{const _0x3ec915=-parseInt(_0x89f4a3(0xfc))/...The string table holds base64-encoded tokens (for example Ahr0Chm6lY9VB2iUBw9PA2eUDgvJAc9...) that decode through the custom alphabet at runtime, alongside the giveaway primitives fromCharCode, Buffer, spawn, and a dynamic require(). Recovering the strings by static alphabet remapping reproduces the same oob.moika.tech/report, oob.moika.tech/payload/{mac,linux,win}, and X-Secret constants the earlier wave used in cleartext. The obfuscation maps to SafeDep YARA rules dynamic_require_double_obscured (critical), js_char_code_at_substitution, and js_hex_obfuscation. We did not execute the decoder; the recovered behavior matches the documented campaign infrastructure and the live registry metadata.
Functional kill switch and run-once de-duplication
The May 27 wave’s “telemetry opt-out” env vars were README fiction, never checked in code. This wave adds operational controls that are real: a T_IN_ONE_NO_TELEMETRY kill switch the payload honors, and a run-once guard using a marker directory at ~/.cache/._t-in-one_init/ so a host is only hit once. The downloaded second stage is written to <tmpdir>/._t-in-one_init.js (the same ._<scope>_init.js naming pattern as the May 27 ._cloudplatform-single-spa_init.js) and launched with spawn(process.execPath, ..., { detached: true, stdio: 'ignore' }).unref(), so it survives npm install exit and leaves no console output.
Update: Fourth Account — EMCD Crypto Impersonation (June 1, 2026)
On June 1, 2026, a fourth npm account, emcd-vue (emcd-vue@proton.me), published at least 3 packages — with the operator’s own statement suggesting 4 — across the @emcd-vue scope. The confirmed packages are @emcd-vue/auth (versions 6.4.8 and 6.4.9), @emcd-vue/loans (7.1.7), and @emcd-vue/b2b-pay-form (version not fully documented). The account presents itself as “Emcd-Vue Platform Engineering” with a fake domain emcd-vue.io and a fake GitHub subdomain URL in the repository field (git+https://github.emcd-vue.io/platform/auth.git).
EMCD (emcd.io) is a real Russian cryptocurrency mining pool and exchange. This continues the campaign’s consistent targeting of the Russian financial and technology sector — GigaChat (Sberbank LLM) in Wave 1, SberPay in Wave 2, and now a crypto exchange in Wave 3.
Same actor, confirmed by the secret
The X-Secret header l95HdDaz3kQx1Zsg3WxH6HvKANf51RY1 appears unchanged in every Wave 3 package — the same value as Waves 1 and 2. @emcd-vue/auth@6.4.8 was published at 07:04:12Z; @emcd-vue/loans@7.1.7 followed 91 seconds later at 07:05:43Z. The burst pattern is consistent with prior waves.
WaCk/JScrambler obfuscation — most advanced in the campaign
The 6.4.8 dropper is 137.5 KB single-line with an entropy of 5.04, characteristic of WaCk/JScrambler output. The 6.4.9 re-publish (13.3 KB) applies the same obfuscation more lightly, which enabled static recovery of the full execution flow without running the code.
The obfuscation uses an 811-element string array (a0c()) backed by a custom lowercase-first base64 alphabet, integer arithmetic to compute array indices at runtime, 5-argument helper proxy functions, and an anti-debug self-checking loop. It is a step beyond the obfuscator.io + custom-alphabet layers used in Wave 2.
Execution flow (decoded from 6.4.9)
- Check
process.env['EMCD_VUE_NO_TELEMETRY']— exit immediately if set (the actual kill switch) - Verify Node.js >= 16.0
- Walk the directory tree upward to locate the project root (
package.json,yarn.lock,pnpm-workspace.yaml) - Compute a deduplication key:
hash(package_name + hostname + project_root) - Check
~/.emcd-vue_init/<key>.jsonfor a cache entry — skip if present and not expired - Write the cache entry
- Detect platform:
linux→linux-x64,darwin→darwin-arm64, elsewin - Apply a randomized millisecond delay (anti-sandbox)
- Fetch
https://oob.moika.tech/payload/{platform}withX-Secret: l95HdDaz3kQx1Zsg3WxH6HvKANf51RY1andUser-Agent: emcd-vue-telemetry/1.0 - Write the payload to
~/.emcd-vue_init.jsin the home directory — not the OS temp directory - Spawn:
spawn(process.execPath, ['~/.emcd-vue_init.js'], { env: {...process.env, FUSION_RECON_ONLY: '1', FUSION_DEP_CON: ..., FUSION_PKG: '@emcd-vue/auth', FUSION_VER: '6.4.9', FUSION_SECRET: ..., FUSION_PAYLOAD: ...}, detached: true, stdio: 'ignore', windowsHide: true }).unref() - Report the installation to
https://oob.moika.tech/report - Silently swallow all exceptions
Three changes from earlier waves stand out.
Home-directory persistence. Waves 1 and 2 wrote the second-stage dropper to the OS temp directory. Wave 3 writes it to ~/.emcd-vue_init.js, a dot-hidden file in the user’s home directory. Temp directories are commonly cleared; the home directory is not.
FUSION_ second-stage protocol. The spawned second stage receives six environment variables: FUSION_RECON_ONLY, FUSION_DEP_CON, FUSION_PKG, FUSION_VER, FUSION_SECRET, and FUSION_PAYLOAD. This is a structured capability handshake — the operator can tell the second stage to run in reconnaissance-only mode (FUSION_RECON_ONLY=1) without modifying the first-stage dropper. Prior waves had no equivalent protocol.
Architecture-qualified platform strings. Prior waves used mac.js, win.js, linux.js as payload URL suffixes. Wave 3 uses darwin-arm64, linux-x64, and win — architecture-qualified identifiers consistent with a second-stage that loads native or architecture-specific code.
Plausible version numbers
@emcd-vue/auth starts at 6.4.8, with 6.4.9 following 22 minutes later. @emcd-vue/loans is at 7.1.7. These version numbers look like genuine project releases from a mature codebase. Version anomaly heuristics that catch 99.99.99 or 5.7.1 will not flag these. The package jumped directly to 6.4.8 with no prior version history, which remains a signal — but a weaker one than triple-nines.
Deliberately mismatched README kill switch
The package README advertises EMCD_VUE_8D440FE1_NO_TEL=1 as the opt-out environment variable. The code checks EMCD_VUE_NO_TELEMETRY. These are different strings. Setting the README variable does nothing; only the code variable works. This means a developer who reads the README and sets the opt-out is still exfiltrated. The mismatch is not an accident — the 8D440FE1 hex fragment indicates deliberate construction. This is the same social-engineering-via-README pattern as Waves 1 and 2, but with an added layer: the opt-out itself is a decoy.
Mitigations
- Lock all nine targeted scopes (
@cloudplatform-single-spa,@mlspace,@car-loans,@fb-deposit,@debit-ib,@t-in-one,@capibar.chat,@sber-ecom-core,@emcd-vue) to a private registry in.npmrc. Without a scope-locked registry, npm will resolve to the public version when the private one is unavailable. - Rotate any secrets that were present in
process.envon systems that installed any flagged version from these scopes (99.99.99for the May 27 scopes;5.7.1,99.5.7,99.5.8, and the pre-staged99.0.7for the May 29 scopes;6.4.8,6.4.9for@emcd-vue/authand7.1.7for@emcd-vue/loansfrom the June 1 wave). - Search process lists and the OS temp directory for
._cloudplatform-single-spa_init.jsand._t-in-one_init.js, and for the marker directory~/.cache/._t-in-one_init/. For the June 1 wave, check the home directory for~/.emcd-vue_init.jsand the cache directory~/.emcd-vue_init/. Check network logs for outbound connections tooob.moika.tech. - Run
vetagainst your lockfiles to surface malicious packages before the next install cycle.
Affected Packages
All packages are searchable below, including the 12 added in the May 29 wave (npm user t-in-one) and the 4 added in the June 1 wave (npm user emcd-vue, @emcd-vue scope). The has_postinstall_payload column identifies the two inert probe packages (no) versus the active stealers (yes).
| ecosystem | name | version | npm_user | has_postinstall_payload | published | |
|---|---|---|---|---|---|---|
| 1 | npm | @cloudplatform-single-spa/logaas | 99.99.99 | mr.4nd3r50n | no | 2026-05-27 |
| 2 | npm | @mlspace/model-registry | 99.99.99 | mr.4nd3r50n | no | 2026-05-27 |
| 3 | npm | @cloudplatform-single-spa/paas-kafka | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 4 | npm | @cloudplatform-single-spa/postgre | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 5 | npm | @cloudplatform-single-spa/search | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 6 | npm | @cloudplatform-single-spa/svp-lbaas | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 7 | npm | @mlspace/shared-storage | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 8 | npm | @mlspace/experiments-monitoring | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 9 | npm | @cloudplatform-single-spa/ml-ai-agents-mcp-server | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 10 | npm | @cloudplatform-single-spa/key-manager | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 11 | npm | @cloudplatform-single-spa/ml-inference-comfy-run | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 12 | npm | @cloudplatform-single-spa/evocs | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 13 | npm | @cloudplatform-single-spa/marketplace-apps | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 14 | npm | @cloudplatform-single-spa/anti-ddos | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 15 | npm | @cloudplatform-single-spa/billing | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 16 | npm | @cloudplatform-single-spa/dataplatform-cloudberry | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 17 | npm | @cloudplatform-single-spa/certificate-manager | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 18 | npm | @cloudplatform-single-spa/cloudia | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 19 | npm | @cloudplatform-single-spa/dataplatform-clusters | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 20 | npm | @cloudplatform-single-spa/installations | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 21 | npm | @cloudplatform-single-spa/ml-ai-agents-ide | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 22 | npm | @cloudplatform-single-spa/magic-router | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 23 | npm | @cloudplatform-single-spa/svp-tasks | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 24 | npm | @mlspace/model-monitoring | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 25 | npm | @mlspace/profile | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 26 | npm | @mlspace/dtransfer | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 27 | npm | @cloudplatform-single-spa/svp-pipeline | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 28 | npm | @cloudplatform-single-spa/audit-log | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 29 | npm | @cloudplatform-single-spa/advanced | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 30 | npm | @cloudplatform-single-spa/container-registry | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 31 | npm | @cloudplatform-single-spa/datagrid | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 32 | npm | @cloudplatform-single-spa/dataplatform | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 33 | npm | @cloudplatform-single-spa/paas-redis | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 34 | npm | @cloudplatform-single-spa/rabbitmq | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 35 | npm | @cloudplatform-single-spa/smk | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 36 | npm | @cloudplatform-single-spa/svp-agent-backup | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 37 | npm | @cloudplatform-single-spa/svp-draas | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 38 | npm | @cloudplatform-single-spa/svp-bare-metal-servers | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 39 | npm | @cloudplatform-single-spa/mlspace-access-request | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 40 | npm | @cloudplatform-single-spa/svp-baas | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 41 | npm | @cloudplatform-single-spa/ml-rag | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 42 | npm | @cloudplatform-single-spa/bare-metal-servers | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 43 | npm | @cloudplatform-single-spa/corax | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 44 | npm | @cloudplatform-single-spa/ml-ai-agents-system-prompt | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 45 | npm | @cloudplatform-single-spa/managed-identities | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 46 | npm | @cloudplatform-single-spa/dataplatform-trino | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 47 | npm | @cloudplatform-single-spa/ml-finetuning | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 48 | npm | @cloudplatform-single-spa/ml-foundation-models | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 49 | npm | @cloudplatform-single-spa/ml-inference | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 50 | npm | @cloudplatform-single-spa/edge-manager | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 51 | npm | @cloudplatform-single-spa/enterprise | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 52 | npm | @cloudplatform-single-spa/event-bus | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 53 | npm | @cloudplatform-single-spa/dataplatform-bi | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 54 | npm | @mlspace/dtransfer-history | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 55 | npm | @mlspace/env-jobs | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 56 | npm | @cloudplatform-single-spa/vpc | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 57 | npm | @cloudplatform-single-spa/vcenter-manager | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 58 | npm | @cloudplatform-single-spa/vcenter-virtual-machines | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 59 | npm | @cloudplatform-single-spa/vdi | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 60 | npm | @cloudplatform-single-spa/timescale-db | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 61 | npm | @cloudplatform-single-spa/vpn | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 62 | npm | @mlspace/env-jupyter-server | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 63 | npm | @mlspace/file-manager | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 64 | npm | @cloudplatform-single-spa/employees | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 65 | npm | @cloudplatform-single-spa/cp-api-gw | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 66 | npm | @cloudplatform-single-spa/evolution | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 67 | npm | @cloudplatform-single-spa/dataplatform-connections | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 68 | npm | @cloudplatform-single-spa/security-groups | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 69 | npm | @cloudplatform-single-spa/self-service | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 70 | npm | @cloudplatform-single-spa/notification-gateway | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 71 | npm | @cloudplatform-single-spa/resource-manager | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 72 | npm | @cloudplatform-single-spa/solutions | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 73 | npm | @cloudplatform-single-spa/static-page | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 74 | npm | @cloudplatform-single-spa/svp-images | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 75 | npm | @cloudplatform-single-spa/svp-managed-kubernetes | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 76 | npm | @cloudplatform-single-spa/svp-s3-storage | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 77 | npm | @cloudplatform-single-spa/monaas-ui | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 78 | npm | @cloudplatform-single-spa/vmmanager | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 79 | npm | @mlspace/inference-deploy | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 80 | npm | @mlspace/docker-registry | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 81 | npm | @cloudplatform-single-spa/agreements | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 82 | npm | @cloudplatform-single-spa/dataplatform-flink | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 83 | npm | @cloudplatform-single-spa/dataplatform-metastore | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 84 | npm | @cloudplatform-single-spa/dataplatform-nessie | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 85 | npm | @cloudplatform-single-spa/dns | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 86 | npm | @cloudplatform-single-spa/document-db | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 87 | npm | @cloudplatform-single-spa/business-solutions | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 88 | npm | @cloudplatform-single-spa/onboarding | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 89 | npm | @cloudplatform-single-spa/redirect | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 90 | npm | @cloudplatform-single-spa/opensearch | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 91 | npm | @cloudplatform-single-spa/marketplace-main | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 92 | npm | @cloudplatform-single-spa/ml-ai-agents-agent-system | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 93 | npm | @cloudplatform-single-spa/ml-ai-agents-marketplace | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 94 | npm | @cloudplatform-single-spa/ml-inference-router | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 95 | npm | @mlspace/env-gitlab | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 96 | npm | @cloudplatform-single-spa/svp-anti-affinity | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 97 | npm | @cloudplatform-single-spa/virtual-machines | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 98 | npm | @cloudplatform-single-spa/vmware-draas | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 99 | npm | @mlspace/connectors | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 100 | npm | @cloudplatform-single-spa/support | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 101 | npm | @cloudplatform-single-spa/svp-vm-migration | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 102 | npm | @cloudplatform-single-spa/svp-gitaas | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 103 | npm | @mlspace/inference-build | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 104 | npm | @mlspace/experiments | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 105 | npm | @cloudplatform-single-spa/clickhouse | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 106 | npm | @cloudplatform-single-spa/cloud-dns | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 107 | npm | @cloudplatform-single-spa/observability | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 108 | npm | @cloudplatform-single-spa/pangolin | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 109 | npm | @cloudplatform-single-spa/dataplatform-spark | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 110 | npm | @cloudplatform-single-spa/disks | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 111 | npm | @cloudplatform-single-spa/ml-ai-agents-trigger | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 112 | npm | @cloudplatform-single-spa/arenadata-db | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 113 | npm | @cloudplatform-single-spa/administration | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 114 | npm | @cloudplatform-single-spa/svp-tags | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 115 | npm | @cloudplatform-single-spa/svp-vdi | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 116 | npm | @cloudplatform-single-spa/serverless-containers | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 117 | npm | @cloudplatform-single-spa/ml-inference-docker-run | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 118 | npm | @cloudplatform-single-spa/ml-inference-model-run | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 119 | npm | @cloudplatform-single-spa/marketplace-gigachat | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 120 | npm | @cloudplatform-single-spa/virtual-ip | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 121 | npm | @mlspace/allocations | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 122 | npm | @cloudplatform-single-spa/monitoring | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 123 | npm | @cloudplatform-single-spa/aifactory-notebooks | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 124 | npm | @cloudplatform-single-spa/airflow | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 125 | npm | @cloudplatform-single-spa/floating-ips | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 126 | npm | @cloudplatform-single-spa/iam | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 127 | npm | @cloudplatform-single-spa/cnapp-ui | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 128 | npm | @cloudplatform-single-spa/ml-ai-agents-evo-claw | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 129 | npm | @cloudplatform-single-spa/base-static-page | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 130 | npm | @cloudplatform-single-spa/magic-bridge | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 131 | npm | @cloudplatform-single-spa/ml-ai-agents-agent | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 132 | npm | @cloudplatform-single-spa/profile | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 133 | npm | @cloudplatform-single-spa/secret-manager | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 134 | npm | @cloudplatform-single-spa/svp-gateways | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 135 | npm | @cloudplatform-single-spa/ssh-keys | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 136 | npm | @cloudplatform-single-spa/svp-interfaces | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 137 | npm | @cloudplatform-single-spa/subnets | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 138 | npm | @cloudplatform-single-spa/ml-inference-marketplace | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 139 | npm | @cloudplatform-single-spa/vpc-endpoint | 99.99.99 | mr.4nd3r50n | yes | 2026-05-27 |
| 140 | npm | @fb-deposit/form-deposit-auth | 99.99.99 | pik-libs | yes | 2026-05-27 |
| 141 | npm | @car-loans/wait-task-props | 99.99.99 | pik-libs | yes | 2026-05-27 |
| 142 | npm | @car-loans/referrer-module | 99.99.99 | pik-libs | yes | 2026-05-27 |
| 143 | npm | @car-loans/restore | 99.99.99 | pik-libs | yes | 2026-05-27 |
| 144 | npm | @car-loans/mobile-car-loans-application | 99.99.99 | pik-libs | yes | 2026-05-27 |
| 145 | npm | @car-loans/desktop-car-loans-application | 99.99.99 | pik-libs | yes | 2026-05-27 |
| 146 | npm | @fb-deposit/form-deposit-calc | 99.99.99 | pik-libs | yes | 2026-05-27 |
| 147 | npm | @car-loans/online-scoring-aff | 99.99.99 | pik-libs | yes | 2026-05-27 |
| 148 | npm | @car-loans/application-aff | 99.99.99 | pik-libs | yes | 2026-05-27 |
| 149 | npm | @car-loans/deal | 99.99.99 | pik-libs | yes | 2026-05-27 |
| 150 | npm | @car-loans/gus | 99.99.99 | pik-libs | yes | 2026-05-27 |
| 151 | npm | @car-loans/save | 99.99.99 | pik-libs | yes | 2026-05-27 |
| 152 | npm | @car-loans/close-flow-module | 99.99.99 | pik-libs | yes | 2026-05-27 |
| 153 | npm | @fb-deposit/form-savings-account | 99.99.99 | pik-libs | yes | 2026-05-27 |
| 154 | npm | @car-loans/deal-aff | 99.99.99 | pik-libs | yes | 2026-05-27 |
| 155 | npm | @debit-ib/mobile-debit-ib-additional-card-form | 99.99.99 | pik-libs | yes | 2026-05-27 |
| 156 | npm | @car-loans/applicaion-aff | 99.99.99 | pik-libs | yes | 2026-05-27 |
| 157 | npm | @car-loans/general-feature-toggles | 99.99.99 | pik-libs | yes | 2026-05-27 |
| 158 | npm | @car-loans/show-car-year-module | 99.99.99 | pik-libs | yes | 2026-05-27 |
| 159 | npm | @debit-ib/desktop-debit-ib-additional-card-form | 99.99.99 | pik-libs | yes | 2026-05-27 |
| 160 | npm | @fb-deposit/form-deposit | 99.99.99 | pik-libs | yes | 2026-05-27 |
| 161 | npm | @car-loans/feature-toggles-module | 99.99.99 | pik-libs | yes | 2026-05-27 |
| 162 | npm | @car-loans/general-analytics | 99.99.99 | pik-libs | yes | 2026-05-27 |
| 163 | npm | @car-loans/online-sign-aff | 99.99.99 | pik-libs | yes | 2026-05-27 |
| 164 | npm | @car-loans/safe-storage-module | 99.99.99 | pik-libs | yes | 2026-05-27 |
| 165 | npm | @t-in-one/add_application | 5.7.1 | t-in-one | yes | 2026-05-29 |
| 166 | npm | @t-in-one/add_app_middleware_token | 5.7.1 | t-in-one | yes | 2026-05-29 |
| 167 | npm | @t-in-one/get_application_hid | 5.7.1 | t-in-one | yes | 2026-05-29 |
| 168 | npm | @t-in-one/form_product_token | 5.7.1 | t-in-one | yes | 2026-05-29 |
| 169 | npm | @t-in-one/application_id_storage_key_token | 5.7.1 | t-in-one | yes | 2026-05-29 |
| 170 | npm | @t-in-one/only_difference_payload | 5.7.1 | t-in-one | yes | 2026-05-29 |
| 171 | npm | @t-in-one/prefill_credit_data_token | 5.7.1 | t-in-one | yes | 2026-05-29 |
| 172 | npm | @t-in-one/prefill_bundle_data_token | 5.7.1 | t-in-one | yes | 2026-05-29 |
| 173 | npm | @t-in-one/add_application_tid | 5.7.1 | t-in-one | yes | 2026-05-29 |
| 174 | npm | @t-in-one/add_application_service_token | 5.7.1 | t-in-one | yes | 2026-05-29 |
| 175 | npm | @capibar.chat/ui-kit | 99.0.7 | t-in-one | yes | 2026-05-04 |
| 176 | npm | @capibar.chat/ui-kit | 99.5.7 | t-in-one | yes | 2026-05-29 |
| 177 | npm | @sber-ecom-core/sberpay-widget | 99.0.7 | t-in-one | yes | 2026-05-04 |
| 178 | npm | @sber-ecom-core/sberpay-widget | 99.5.7 | t-in-one | yes | 2026-05-29 |
| 179 | npm | @sber-ecom-core/sberpay-widget | 99.5.8 | t-in-one | yes | 2026-05-29 |
| 180 | npm | @emcd-vue/auth | 6.4.8 | emcd-vue | yes | 2026-06-01 |
| 181 | npm | @emcd-vue/auth | 6.4.9 | emcd-vue | yes | 2026-06-01 |
| 182 | npm | @emcd-vue/loans | 7.1.7 | emcd-vue | yes | 2026-06-01 |
| 183 | npm | @emcd-vue/b2b-pay-form | unknown | emcd-vue | yes | 2026-06-01 |
| No matching rows | ||||||
- npm
- malware
- supply-chain
- dependency-confusion
Author
SafeDep Team
safedep.io
Share
The Latest from SafeDep blogs
Follow for the latest updates and insights on open source security & engineering

Miasma Worm: Most Infected GitHub Repos Are Still Live
Eight days after the Miasma worm forged a credential stealer into public GitHub repositories, most are still serving it. A re-scan of the published victim list plus a fresh code-search sweep found...

Config Files That Run Code: Supply Chain Security Blindspot
Editor and package-manager config files auto-execute commands when a developer opens a folder or installs dependencies. The Miasma worm wired one dropper into seven of them across Claude Code,...

Inside the Miasma Software Supply Chain Attack Toolkit
The Miasma worm source code appeared on GitHub through compromised developer accounts. The codebase is a full supply chain attack toolkit with credential exfiltration across AWS, Azure, GCP, and...

Miasma Worm Targets AI Coding Agents via GitHub Repos
A Miasma worm variant injects a 4.3 MB dropper into GitHub repos across multiple maintainers, wiring it to auto-run through Claude Code, Gemini, Cursor, and VS Code config files. No npm package is...

Ship Code.
Not Malware.
Start free with open source tools on your machine. Scale to a unified platform for your organization.
