keyv / cacheable family hijacked in Shai-Hulud "Here We Go Again" worm
On 2026-08-04 a compromised maintainer account pushed a preinstall credential stealer into the keyv / cacheable family and the worm spread via stolen npm tokens across ~2B monthly installs. Releases were cut from main, so npm signed them with valid provenance. Verified count as of the Wiz IOC feed: 443 npm packages across 2,235 versions; SafeDep's registry-backed telemetry puts the total at 1,684 versions across 420 names tied to nine orgs.
- Detected by
- Aikido Security · Wiz · Datadog Security Labs · SafeDep · Snyk · Socket
- Also known as
- Shai-Hulud: Here We Go Again · keyv/cacheable compromise
- Ecosystems
- npm
- Packages tracked
- 443
What happened
Refreshed 2026-08-17. The verified package list is now the full Wiz Research IOC feed (keyv-packages.csv): 443 npm packages spanning 2,235 versions across the compromised maintainers keyv/cacheable (11 pkgs), @ornikar/* (42), Qlik @nebula.js/*+@qlik/*+picasso.js/sn-listbox/etc. (58), OneReach @onereach/*+@or-sdk/* (152), ServiceTitan @servicetitan/*+verdaccio-*+folder-lint-style tooling (149), @hubsync/web-sdk-react (27 versions), @arv-bedrock/* (5), plus @adminide-stack/*, @picsart/*, @thiennq/*, @umacloud/*+umadev, @workbench-stack/*+workbench-browser-server, @deliveroo/*, frontend-orb, native-frontend-orb, babel-plugin-linaria-css-to-undefined, pob-test-*, rwc-client, server-hemera-mongo. SafeDep's independent registry-backed telemetry puts the total higher (1,684 versions across 420 names tied to 9 orgs); the Wiz CSV is used here because every row is a checked package@version pair. Datadog Security Labs' write-up, Snyk's "Inside the keyv npm Supply Chain Compromise" (03aug-preinstall-malware-trusted-provenance-ide-hooks), and Socket's tracking blog all corroborate the same worm.
On 2026-08-04 an attacker took over the GitHub account of the maintainer behind keyv and the wider cacheable family, then pushed malicious files directly to main and immediately cut releases. Because the releases were built by the project's own GitHub Actions workflow, npm published them with valid provenance attestations. This is the detail worth internalising: provenance attests where a build came from, not that the code is safe. Every automated check that trusts provenance as a proxy for integrity passed these packages.
Every affected package received two new files - setup.mjs and Math_Symbol.js - plus a "preinstall": "node setup.mjs" entry in package.json. setup.mjs is a heavily obfuscated dropper whose only job is to silently download the Bun runtime (v1.3.13) from github[.]com/oven-sh/bun/releases/download/bun-v1.3.13/ into /tmp/bun-dl-*/ and execute the real payload under it. Math_Symbol.js is a 728 KB obfuscated blob containing the credential stealers. Running with --ignore-scripts blocks it; a normal npm install does not.
The stealer harvests npm auth tokens from .npmrc, GitHub CLI tokens (classic PATs, session tokens, OIDC), AWS keys from ~/.aws/credentials, and Vault tokens from VAULT_TOKEN. Wiz additionally observed cloud and infrastructure secrets, AI tool configuration files, cryptocurrency wallets, CI/CD secret harvesting, build-runner identification, and cloud environment enumeration. Findings are encrypted and exfiltrated into public GitHub repositories created under compromised identities, carrying the description Shai-Hulud: Here We Go Again. Wiz also found the payload planting IDE persistence - setup.mjs written into .claude and .vscode directories - which survives a plain dependency cleanup.
The stolen npm tokens feed the worm. Registry timestamps show how fast it moved: keyv@6.0.0 landed at 09:35:00 UTC, the first onward hop (@thiennq/docs-viewer@1.6.2) at 09:38:13 - three minutes later. The rest of the cacheable family went out between 10:10 and 10:15, then 25 @ornikar/* packages were published in a single second at 10:19:10, and a Qlik cluster (@qlik/*, @nebula.js/nucleus, picasso*, http-metrics-middleware) at 10:46:36. By 11:37 UTC Aikido counted 868 packages across 1,381 versions with over 2 billion combined monthly installs. The package list below is the verified subset published by Aikido and Wiz, not the full 868.
Wiz assesses the payload as a descendant of the "Mini" Shai-Hulud family, sharing similarities with the TeamPCP TanStack burst and the @antv wave, and notes a new intimidation string in the initial commits: IfYouBlockThisAPIKeyItWillCrashTheLiveProductionServersOfAllThirdPartyClients. Attribution remains open - Wiz Research is still investigating and has not named an actor, so none is recorded here.
Verification notes
Every package@version below was checked against the live npm registry while compiling this entry. All ten packages in the maintainer's own family (keyv, cacheable, cache-manager, cacheable-request, flat-cache, file-entry-cache, @cacheable/*, ecto) had exactly one version published on 2026-08-04, and npm has since removed all ten. The worm-propagated versions were still live at time of writing and each independently confirmed to carry "preinstall": "node setup.mjs". Note that @or-sdk/invitations shipped three poisoned releases (1.4.8, 1.4.9, 1.4.10) - 1.4.10 at 11:55 UTC looks like a remediation attempt but still carries the hook. @picsart/ai-sdk@3.32.1 was checked and is clean; only 3.32.2 is affected.
Indicators of compromise
- Exfil domain:
npm-cache[.]com(104.21.35[.]216, Cloudflare) - ETH RPC endpoints:
eth-mainnet.nodereal[.]io,go.getblock[.]io,eth.llamarpc[.]com - File artifacts:
/tmp/bun-dl-*/,node_modules/keyv/Math_Symbol.js Math_Symbol.js/math_init.js- SHA135a672cf34b996b91f3e1c28cbf3a05a37e036e4setup.mjsin.claude- SHA1686aa40d0fc22c8d569494543a0f891f359f2f99setup.mjsin.vscode- SHA1f525d52ceb966516686b482d3dc0137028cc6a63- GitHub repo description:
Shai-Hulud: Here We Go Again
Affected packages (443)
- npm@adminide-stack/clock-tik-browser12.0.24
- npm@adminide-stack/yantra-mobile12.0.33
- npm@arv-bedrock/auth1.1.71.1.8
- npm@arv-bedrock/auth-admin1.0.21.0.3
- npm@arv-bedrock/auth-sso1.6.11.6.2
- npm@arv-bedrock/auth-sso-backend1.7.11.7.2
- npm@arv-bedrock/logger1.7.11.7.2
- npm@cacheable/memory2.2.1
- npm@cacheable/net2.1.1
- npm@cacheable/node-cache3.1.2
- npm@cacheable/utils2.5.1
- npm@deliveroo/determinator0.2.1
- npm@deliveroo/reevent1.0.1
- npm@hubsync/web-sdk-react6.3.76.3.86.3.96.3.106.3.116.3.126.3.136.3.146.3.156.3.166.3.176.3.186.3.196.3.206.3.216.3.226.3.236.3.246.3.256.3.266.3.276.3.286.3.296.3.306.3.316.3.326.3.33
- npm@nebula.js/cli7.1.2
- npm@nebula.js/cli-build7.1.2
- npm@nebula.js/cli-sense7.1.2
- npm@nebula.js/locale0.6.2
- npm@nebula.js/nucleus0.5.1
- npm@nebula.js/sn-action-button2.3.1
- npm@nebula.js/sn-animator2.13.1
- npm@nebula.js/sn-distributionplot1.0.7
- npm@nebula.js/sn-layout-container4.4.1
- npm@nebula.js/sn-line-chart2.7.1
- npm@nebula.js/sn-listbox0.19.3
- npm@nebula.js/sn-map0.12.7
- npm@nebula.js/sn-nav-menu0.14.2
- npm@nebula.js/sn-org-chart1.7.1
- npm@nebula.js/sn-shape1.5.1
- npm@nebula.js/sn-slider0.20.1
- npm@nebula.js/sn-tabbed-container2.4.1
- npm@nebula.js/snapshooter0.6.1
- npm@nebula.js/stardust7.1.2
- npm@nebula.js/test-utils0.6.1
- npm@nebula.js/theme0.6.1
- npm@onereach/authorizer-helper0.0.110.0.120.0.13
- npm@onereach/bandwidth-steps-voice-bxml0.1.10.1.20.1.3
- npm@onereach/billing-dto27.2.127.2.227.2.3
- npm@onereach/billing-shared27.2.127.2.227.2.3
- npm@onereach/cb-schema-translator1.3.11.3.21.3.3
- npm@onereach/channel-transformer0.0.660.0.670.0.68
- npm@onereach/channel-transformers0.0.50.0.60.0.7
- npm@onereach/ckeditor5-build-classic30.0.130.0.230.0.3
- npm@onereach/condition-builder1.0.81.0.91.0.10
- npm@onereach/content-builder0.0.180.0.190.0.20
- npm@onereach/content-builder-template-compiler0.0.30.0.40.0.5
- npm@onereach/expression-components9.1.19.1.29.1.3
- npm@onereach/font-icons27.0.227.0.327.0.4
- npm@onereach/get-version-data3.1.23.1.33.1.4
- npm@onereach/idw-apps0.1.30.1.40.1.5
- npm@onereach/idw-contracts0.1.20.1.30.1.4
- npm@onereach/idw-init-account-resources1.0.11.0.21.0.3
- npm@onereach/idw-sdk0.1.20.1.30.1.4
- npm@onereach/idw-ui-components0.1.20.1.30.1.4
- npm@onereach/lambda-invocation1.2.11.2.21.2.3
- npm@onereach/messengers-infobip-sdk0.1.10.1.20.1.3
- npm@onereach/or-browser0.0.480.0.490.0.50
- npm@onereach/or-browser-next0.0.110.0.120.0.13
- npm@onereach/or-content-builder-renderer0.0.20.0.30.0.4
- npm@onereach/or-file-uploader-next0.0.80.0.90.0.10
- npm@onereach/or-pro1.13.11.13.21.13.3
- npm@onereach/or-sdk-agent-cli0.0.60.0.70.0.8
- npm@onereach/orest-cli2.4.12.4.22.4.3
- npm@onereach/orest-input-cli1.18.11.18.21.18.3
- npm@onereach/orest-jest-presets0.0.30.0.40.0.5
- npm@onereach/orest-vue-demi-vue20.0.40.0.50.0.6
- npm@onereach/orest-vue-demi-vue30.0.40.0.50.0.6
- npm@onereach/orest-vue30.0.40.0.50.0.6
- npm@onereach/phonenumber-interpreter0.0.180.0.190.0.20
- npm@onereach/pnpm-audit-junit1.0.31.0.41.0.5
- npm@onereach/postcss-scoped-selector1.2.11.2.21.2.3
- npm@onereach/regex-helper0.5.160.5.170.5.18
- npm@onereach/regular-expressions0.5.230.5.240.5.25
- npm@onereach/regular-expressions-test0.0.40.0.50.0.6
- npm@onereach/rwc-client6.4.76.4.86.4.9
- npm@onereach/salesforce-miaw-client0.0.30.0.40.0.5
- npm@onereach/si-a-button0.0.30.0.40.0.5
- npm@onereach/si-alert0.4.110.4.120.4.13
- npm@onereach/si-checkbox0.6.50.6.60.6.7
- npm@onereach/si-checkbox-group0.3.50.3.60.3.7
- npm@onereach/si-code0.6.40.6.50.6.6
- npm@onereach/si-collapsible-group0.6.40.6.50.6.6
- npm@onereach/si-copyable-text0.4.110.4.120.4.13
- npm@onereach/si-datepicker0.4.50.4.60.4.7
- npm@onereach/si-divider0.4.110.4.120.4.13
- npm@onereach/si-dropdown-advanced0.4.50.4.60.4.7
- npm@onereach/si-dropdown-simple0.4.50.4.60.4.7
- npm@onereach/si-header0.4.110.4.120.4.130.4.14
- npm@onereach/si-list0.7.40.7.50.7.6
- npm@onereach/si-merge-tag-input0.4.50.4.60.4.7
- npm@onereach/si-radio-group0.3.50.3.60.3.7
- npm@onereach/si-root0.9.40.9.50.9.6
- npm@onereach/si-select0.1.30.1.40.1.5
- npm@onereach/si-step-chooser0.4.40.4.50.4.6
- npm@onereach/si-switch0.4.50.4.60.4.7
- npm@onereach/si-text-message0.4.50.4.60.4.7
- npm@onereach/si-textinput0.5.50.5.60.5.7
- npm@onereach/si-validated-timestring-input0.3.50.3.60.3.7
- npm@onereach/slack-helpers1.0.31.0.41.0.5
- npm@onereach/ssml-editor2.0.122.0.132.0.14
- npm@onereach/step-components0.1.370.1.380.1.39
- npm@onereach/step-conversation1.0.411.0.421.0.43
- npm@onereach/step-run-snowflake-query0.1.10.1.20.1.3
- npm@onereach/step-voice7.0.327.0.337.0.34
- npm@onereach/styles27.0.227.0.327.0.4
- npm@onereach/time-interpreter1.0.301.0.311.0.32
- npm@onereach/ts-memoize1.0.21.0.31.0.4
- npm@onereach/types-contacts-api9.0.89.0.99.0.10
- npm@onereach/ui-components27.0.227.0.327.0.4
- npm@onereach/ui-components-common27.0.227.0.327.0.4
- npm@onereach/ui-components-vue227.0.227.0.327.0.4
- npm@onereach/v-event-calendar0.1.220.1.230.1.24
- npm@onereach/webform0.3.130.3.140.3.15
- npm@or-sdk/account-settings1.3.61.3.71.3.8
- npm@or-sdk/accounts2.3.52.3.62.3.7
- npm@or-sdk/adapters0.3.60.3.70.3.8
- npm@or-sdk/agents4.21.34.21.44.21.5
- npm@or-sdk/api-tokens1.4.21.4.31.4.4
- npm@or-sdk/api-tokens-lambda1.4.21.4.31.4.4
- npm@or-sdk/apps1.2.61.2.71.2.8
- npm@or-sdk/auth0.38.10.38.20.38.3
- npm@or-sdk/authorizer0.26.70.26.80.26.9
- npm@or-sdk/base0.44.40.44.50.44.6
- npm@or-sdk/billing27.2.127.2.227.2.3
- npm@or-sdk/billing-internal27.2.127.2.227.2.3
- npm@or-sdk/bot-templates2.2.52.2.62.2.7
- npm@or-sdk/bots1.7.11.7.21.7.3
- npm@or-sdk/card-templates2.2.52.2.62.2.7
- npm@or-sdk/cards1.2.51.2.61.2.7
- npm@or-sdk/ccp10.15.410.15.510.15.6
- npm@or-sdk/chat0.3.10.3.20.3.3
- npm@or-sdk/contacts4.7.54.7.64.7.7
- npm@or-sdk/content-request0.2.60.2.70.2.8
- npm@or-sdk/data-hub0.26.50.26.60.26.7
- npm@or-sdk/data-hub-svc2.3.52.3.62.3.7
- npm@or-sdk/deployer1.7.51.7.61.7.7
- npm@or-sdk/deployments2.1.52.1.62.1.7
- npm@or-sdk/discovery1.12.11.12.21.12.3
- npm@or-sdk/druid1.4.71.4.81.4.9
- npm@or-sdk/event-manager1.1.51.1.61.1.7
- npm@or-sdk/files3.11.63.11.73.11.8
- npm@or-sdk/files-sync-node0.1.80.1.90.1.10
- npm@or-sdk/flow-templates2.1.52.1.62.1.7
- npm@or-sdk/flows2.7.82.7.92.7.10
- npm@or-sdk/graph1.10.51.10.61.10.7
- npm@or-sdk/hitl0.41.10.41.20.41.3
- npm@or-sdk/identifiers0.27.60.27.70.27.8
- npm@or-sdk/idw9.0.49.0.59.0.6
- npm@or-sdk/idw-public1.6.61.6.71.6.8
- npm@or-sdk/idw-skill1.4.11.4.21.4.3
- npm@or-sdk/invitations1.4.81.4.91.4.10
- npm@or-sdk/key-value-storage0.28.60.28.70.28.8
- npm@or-sdk/keys1.2.61.2.71.2.8
- npm@or-sdk/knowledge-models0.25.50.25.60.25.7
- npm@or-sdk/library0.5.60.5.70.5.8
- npm@or-sdk/library-categories0.2.60.2.70.2.8
- npm@or-sdk/library-source0.4.50.4.60.4.7
- npm@or-sdk/library-types-v19.0.19.0.29.0.3
- npm@or-sdk/library-types-v29.0.19.0.29.0.3
- npm@or-sdk/lookup1.25.11.25.21.25.3
- npm@or-sdk/markdowner0.5.10.5.20.5.3
- npm@or-sdk/mcp-tools0.5.20.5.30.5.4
- npm@or-sdk/notifications1.7.51.7.61.7.7
- npm@or-sdk/password1.3.61.3.71.3.8
- npm@or-sdk/payments3.2.53.2.63.2.7
- npm@or-sdk/permissions2.8.12.8.22.8.3
- npm@or-sdk/permissions-cli1.4.11.4.21.4.3
- npm@or-sdk/permissions-lambda2.5.12.5.22.5.3
- npm@or-sdk/pgsql1.5.11.5.21.5.3
- npm@or-sdk/providers0.3.60.3.70.3.8
- npm@or-sdk/qna3.4.23.4.33.4.4
- npm@or-sdk/queue-manager1.4.61.4.71.4.8
- npm@or-sdk/sdk-api0.29.20.29.30.29.4
- npm@or-sdk/settings0.25.60.25.70.25.8
- npm@or-sdk/sku-builder2.5.12.5.22.5.3
- npm@or-sdk/source2.1.52.1.62.1.7
- npm@or-sdk/source-api1.1.11.1.21.1.3
- npm@or-sdk/step-templates2.2.52.2.62.2.7
- npm@or-sdk/store2.1.52.1.62.1.7
- npm@or-sdk/tables0.28.50.28.60.28.7
- npm@or-sdk/tags1.1.51.1.61.1.7
- npm@or-sdk/tickets1.9.51.9.61.9.7
- npm@or-sdk/transcripts1.2.51.2.61.2.7
- npm@or-sdk/users3.8.13.8.23.8.3
- npm@or-sdk/view-templates2.2.52.2.62.2.7
- npm@or-sdk/views3.1.53.1.63.1.7
- npm@or-sdk/web-search0.6.10.6.20.6.3
- npm@ornikar/apollo-link-timeout1.4.21.4.31.4.41.4.51.4.61.4.71.4.81.4.91.4.101.4.11
- npm@ornikar/babel-preset-base6.0.36.0.46.0.56.0.66.0.76.0.86.0.96.0.106.0.116.0.126.0.136.0.14
- npm@ornikar/babel-preset-kitt-universal8.0.38.0.48.0.58.0.68.0.78.0.88.0.98.0.108.0.118.0.12
- npm@ornikar/babel-preset-react6.1.46.1.56.1.66.1.76.1.86.1.96.1.106.1.116.1.126.1.136.1.14
- npm@ornikar/browserslist-config8.0.38.0.48.0.58.0.68.0.78.0.88.0.98.0.108.0.11
- npm@ornikar/commitlint-config8.3.28.3.38.3.48.3.58.3.68.3.78.3.88.3.98.3.108.3.118.3.12
- npm@ornikar/eslint-config24.0.124.0.224.0.324.0.424.0.524.0.624.0.724.0.824.0.924.0.1024.0.1124.0.12
- npm@ornikar/eslint-config-babel24.0.124.0.224.0.324.0.424.0.524.0.624.0.724.0.824.0.924.0.1024.0.1124.0.12
- npm@ornikar/eslint-config-babel-use13.2.113.2.213.2.313.2.413.2.513.2.613.2.713.2.813.2.913.2.1013.2.1113.2.12
- npm@ornikar/eslint-config-formatjs24.0.124.0.224.0.324.0.424.0.524.0.624.0.724.0.824.0.924.0.10
- npm@ornikar/eslint-config-node12.2.112.2.212.2.312.2.412.2.512.2.612.2.712.2.812.2.912.2.10
- npm@ornikar/eslint-config-react24.0.124.0.224.0.324.0.424.0.524.0.624.0.724.0.824.0.924.0.1024.0.11
- npm@ornikar/eslint-config-typescript24.0.124.0.224.0.324.0.424.0.524.0.624.0.724.0.824.0.924.0.10
- npm@ornikar/eslint-config-typescript-nestjs24.0.124.0.224.0.324.0.424.0.524.0.624.0.724.0.824.0.924.0.1024.0.11
- npm@ornikar/eslint-config-typescript-react24.0.124.0.224.0.324.0.424.0.524.0.624.0.724.0.824.0.924.0.1024.0.11
- npm@ornikar/eslint-plugin-neverthrow1.3.11.3.21.3.31.3.41.3.51.3.61.3.71.3.81.3.91.3.101.3.111.3.12
- npm@ornikar/eslint-plugin-ornikar24.0.124.0.224.0.324.0.424.0.524.0.624.0.724.0.824.0.924.0.1024.0.11
- npm@ornikar/graphql-config1.1.11.1.21.1.31.1.41.1.51.1.61.1.71.1.81.1.91.1.101.1.11
- npm@ornikar/intl-config10.0.210.0.310.0.410.0.510.0.610.0.710.0.810.0.910.0.10
- npm@ornikar/jest-config13.0.313.0.413.0.513.0.613.0.713.0.813.0.913.0.1013.0.1113.0.1213.0.13
- npm@ornikar/jest-config-react18.0.218.0.318.0.418.0.518.0.618.0.718.0.818.0.918.0.1018.0.11
- npm@ornikar/jest-config-react-native17.0.217.0.317.0.417.0.517.0.617.0.717.0.817.0.917.0.1017.0.1117.0.12
- npm@ornikar/jest-config-react-native-web12.0.312.0.412.0.512.0.612.0.712.0.812.0.912.0.1012.0.1112.0.1212.0.13
- npm@ornikar/kitt21.0.11.0.21.0.31.0.41.0.51.0.61.0.71.0.81.0.91.0.101.0.11
- npm@ornikar/lerna-config11.0.111.0.211.0.311.0.411.0.511.0.611.0.711.0.811.0.911.0.1011.0.11
- npm@ornikar/monorepo-config14.3.214.3.314.3.414.3.514.3.614.3.714.3.814.3.914.3.1014.3.1114.3.1214.3.13
- npm@ornikar/postcss-config9.1.29.1.39.1.49.1.59.1.69.1.79.1.89.1.99.1.109.1.119.1.12
- npm@ornikar/prettier-config9.0.39.0.49.0.59.0.69.0.79.0.89.0.99.0.109.0.11
- npm@ornikar/prismic-components0.0.20.0.30.0.40.0.50.0.60.0.70.0.80.0.90.0.100.0.110.0.12
- npm@ornikar/react-modern-calendar-datepicker3.2.13.2.23.2.33.2.43.2.53.2.63.2.73.2.83.2.93.2.103.2.11
- npm@ornikar/react-native-svg-transformer1.0.61.0.71.0.81.0.91.0.101.0.111.0.121.0.13
- npm@ornikar/renovate-config9.0.29.0.39.0.49.0.59.0.69.0.79.0.89.0.99.0.109.0.119.0.129.0.13
- npm@ornikar/repo-config15.3.315.3.415.3.515.3.615.3.715.3.815.3.915.3.1015.3.1115.3.1215.3.13
- npm@ornikar/repo-config-react13.0.813.0.913.0.1013.0.1113.0.1213.0.1313.0.1413.0.1513.0.1613.0.1713.0.1813.0.19
- npm@ornikar/repo-config-react-legacy-css15.1.215.1.315.1.415.1.515.1.615.1.715.1.815.1.915.1.1015.1.1115.1.1215.1.13
- npm@ornikar/rollup-config11.1.211.1.311.1.411.1.511.1.611.1.711.1.811.1.911.1.1011.1.1111.1.1211.1.13
- npm@ornikar/rollup-plugin-postcss2.0.52.0.62.0.72.0.82.0.92.0.102.0.112.0.122.0.132.0.142.0.15
- npm@ornikar/slate-react-fork1.0.11.0.21.0.31.0.41.0.51.0.61.0.71.0.81.0.91.0.101.0.11
- npm@ornikar/storybook-config12.1.212.1.312.1.412.1.512.1.612.1.712.1.812.1.912.1.10
- npm@ornikar/stylelint-config14.0.314.0.414.0.514.0.614.0.714.0.814.0.914.0.1014.0.1114.0.1214.0.13
- npm@ornikar/typed-css-modules-loader0.8.20.8.30.8.40.8.50.8.60.8.70.8.80.8.90.8.100.8.110.8.12
- npm@ornikar/webpack-config12.0.212.0.312.0.412.0.512.0.612.0.712.0.812.0.912.0.1012.0.1112.0.12
- npm@picsart/ai-sdk3.32.2
- npm@picsart/gen-ai2.55.11
- npm@qlik/api2.14.2
- npm@qlik/browserslist-config3.0.2
- npm@qlik/carbon-core2.1.1
- npm@qlik/carboncopy1.1.6
- npm@qlik/design-tokens1.3.13
- npm@qlik/dts-bundler2.0.3
- npm@qlik/embed-react2.5.3
- npm@qlik/embed-runtime1.6.4
- npm@qlik/embed-svelte1.1.4
- npm@qlik/embed-web-components1.7.3
- npm@qlik/eslint-config2.0.20
- npm@qlik/eslint-config-base0.1.1
- npm@qlik/eslint-config-react0.1.1
- npm@qlik/eslint-config-svelte0.1.1
- npm@qlik/eslint-config-vue0.1.1
- npm@qlik/nebula-table-utils2.6.9
- npm@qlik/oxfmt-config0.1.6
- npm@qlik/oxlint-config0.7.2
- npm@qlik/prettier-config1.0.3
- npm@qlik/react-native-simple-grid1.5.5
- npm@qlik/runtime-module-loader1.5.1
- npm@qlik/sdk0.28.1
- npm@qlik/sprout-design-docs1.0.2
- npm@qlik/sprout-gesture0.0.13
- npm@qlik/sprout-icons0.12.3
- npm@qlik/sprout-react6.45.3
- npm@qlik/sprout-react-table0.16.7
- npm@qlik/tsconfig1.0.3
- npm@servicetitan/acquisition-functions5.22.15.22.25.22.35.22.45.22.55.22.65.22.7
- npm@servicetitan/admin-layout2.4.32.4.42.4.52.4.62.4.72.4.82.4.9
- npm@servicetitan/admin-sql-table1.0.141.0.151.0.161.0.171.0.181.0.191.0.20
- npm@servicetitan/ajax-handlers38.1.138.1.238.1.338.1.438.1.538.1.638.1.7
- npm@servicetitan/anvil-css-utilities14.5.414.5.514.5.614.5.714.5.814.5.914.5.10
- npm@servicetitan/anvil-fonts14.5.414.5.514.5.614.5.714.5.814.5.914.5.10
- npm@servicetitan/anvil-icon0.5.10.5.20.5.30.5.40.5.50.5.60.5.7
- npm@servicetitan/anvil-icons14.5.414.5.514.5.614.5.714.5.814.5.914.5.10
- npm@servicetitan/anvil-react0.11.30.11.40.11.50.11.60.11.70.11.80.11.9
- npm@servicetitan/anvil-themes14.5.414.5.514.5.614.5.714.5.814.5.914.5.10
- npm@servicetitan/anvil-token0.4.10.4.20.4.30.4.40.4.50.4.60.4.7
- npm@servicetitan/anvil23.9.13.9.23.9.33.9.43.9.53.9.63.9.7
- npm@servicetitan/anvil2-codemods0.11.20.11.30.11.40.11.50.11.60.11.70.11.8
- npm@servicetitan/anvil2-ext-atlas4.0.24.0.34.0.44.0.54.0.64.0.74.0.8
- npm@servicetitan/anvil2-ext-charts0.2.40.2.50.2.60.2.70.2.80.2.90.2.10
- npm@servicetitan/anvil2-ext-common0.7.10.7.20.7.30.7.40.7.50.7.60.7.7
- npm@servicetitan/anvil2-ext-mwv0.0.50.0.60.0.70.0.80.0.90.0.100.0.11
- npm@servicetitan/anvil2-illustrations1.0.21.0.31.0.41.0.51.0.61.0.71.0.8
- npm@servicetitan/anvil2-mcp0.0.90.0.100.0.110.0.120.0.130.0.140.0.15
- npm@servicetitan/assist-ui2.1.12.1.22.1.32.1.42.1.52.1.62.1.7
- npm@servicetitan/assist-utils1.1.21.1.31.1.41.1.51.1.61.1.71.1.8
- npm@servicetitan/carto-charts-core0.0.20.0.30.0.40.0.50.0.60.0.70.0.8
- npm@servicetitan/carto-charts-react0.0.20.0.30.0.40.0.50.0.60.0.70.0.8
- npm@servicetitan/carto-charts-rn0.0.20.0.30.0.40.0.50.0.60.0.70.0.8
- npm@servicetitan/carto-react-kit0.8.40.8.50.8.60.8.70.8.80.8.90.8.10
- npm@servicetitan/carto-rn-kit0.0.100.0.110.0.120.0.130.0.140.0.150.0.16
- npm@servicetitan/carto-tokens0.3.10.3.20.3.30.3.40.3.50.3.60.3.7
- npm@servicetitan/component-usage28.5.128.5.228.5.328.5.428.5.528.5.628.5.7
- npm@servicetitan/confirm41.3.141.3.241.3.341.3.441.3.541.3.641.3.7
- npm@servicetitan/confirm-navigation41.3.141.3.241.3.341.3.441.3.541.3.641.3.7
- npm@servicetitan/contentful0.0.30.0.40.0.50.0.60.0.70.0.80.0.9
- npm@servicetitan/contentful-proxy1.1.121.1.131.1.141.1.151.1.161.1.171.1.18
- npm@servicetitan/cp-api1.115.11.115.21.115.31.115.41.115.51.115.61.115.7
- npm@servicetitan/cp-mfe1.115.11.115.21.115.31.115.41.115.51.115.61.115.7
- npm@servicetitan/cp-mfe-dev1.115.11.115.21.115.31.115.41.115.51.115.61.115.7
- npm@servicetitan/cp-react-hooks1.115.11.115.21.115.31.115.41.115.51.115.61.115.7
- npm@servicetitan/cp-ui1.115.11.115.21.115.31.115.41.115.51.115.61.115.7
- npm@servicetitan/culture41.3.141.3.241.3.341.3.441.3.541.3.641.3.7
- npm@servicetitan/data-query41.3.141.3.241.3.341.3.441.3.541.3.641.3.7
- npm@servicetitan/datadog-rum38.1.138.1.238.1.338.1.438.1.538.1.638.1.7
- npm@servicetitan/datetime-utils41.3.141.3.241.3.341.3.441.3.541.3.641.3.7
- npm@servicetitan/design-system14.5.414.5.514.5.614.5.714.5.814.5.914.5.10
- npm@servicetitan/docs-anvil-uikit-contrib41.3.141.3.241.3.341.3.441.3.541.3.641.3.7
- npm@servicetitan/docs-uikit38.1.138.1.238.1.338.1.438.1.538.1.638.1.7
- npm@servicetitan/document-title2.4.12.4.22.4.32.4.42.4.52.4.62.4.7
- npm@servicetitan/dte-pdf-editor1.76.11.76.21.76.31.76.41.76.51.76.61.76.7
- npm@servicetitan/dte-unlayer0.150.10.150.20.150.30.150.40.150.50.150.60.150.7
- npm@servicetitan/eh-module-communication0.2.10.2.20.2.30.2.40.2.50.2.60.2.7
- npm@servicetitan/error-boundary38.1.138.1.238.1.338.1.438.1.538.1.638.1.7
- npm@servicetitan/eslint-config38.1.138.1.238.1.338.1.438.1.538.1.638.1.7
- npm@servicetitan/eslint-plugin38.1.138.1.238.1.338.1.438.1.538.1.638.1.7
- npm@servicetitan/eslint-plugin-decorators-declare12.8.1512.8.1612.8.1712.8.1812.8.1912.8.2012.8.21
- npm@servicetitan/eslint-plugin-folder-schema38.1.138.1.238.1.338.1.438.1.538.1.638.1.7
- npm@servicetitan/eslint-plugin-mobx-612.8.1512.8.1612.8.1712.8.1812.8.1912.8.20
- npm@servicetitan/eslint-plugin-processors-stub12.8.1512.8.1612.8.1712.8.1812.8.1912.8.2012.8.21
- npm@servicetitan/examples1.2.51.2.61.2.71.2.81.2.91.2.101.2.11
- npm@servicetitan/feature-spotlight3.9.13.9.23.9.33.9.43.9.53.9.63.9.7
- npm@servicetitan/folder-lint38.1.138.1.238.1.338.1.438.1.538.1.638.1.7
- npm@servicetitan/forge0.5.10.5.20.5.30.5.40.5.50.5.60.5.7
- npm@servicetitan/form41.3.141.3.241.3.341.3.441.3.541.3.641.3.7
- npm@servicetitan/form-state41.3.141.3.241.3.341.3.441.3.541.3.641.3.7
- npm@servicetitan/grid0.0.630.0.640.0.650.0.660.0.670.0.680.0.69
- npm@servicetitan/hammer-icon1.2.11.2.21.2.31.2.41.2.51.2.61.2.7
- npm@servicetitan/hammer-react1.42.21.42.31.42.41.42.51.42.61.42.71.42.8
- npm@servicetitan/hammer-token3.1.13.1.23.1.33.1.43.1.53.1.63.1.7
- npm@servicetitan/hash-browser-router38.1.138.1.238.1.338.1.438.1.538.1.638.1.7
- npm@servicetitan/help-center1.0.81.0.91.0.101.0.111.0.121.0.131.0.14
- npm@servicetitan/html-sketchapp4.2.84.2.94.2.104.2.114.2.124.2.134.2.14
- npm@servicetitan/install38.1.138.1.238.1.338.1.438.1.538.1.638.1.7
- npm@servicetitan/intl7.2.17.2.27.2.37.2.47.2.57.2.67.2.7
- npm@servicetitan/json-render-react0.4.60.4.70.4.80.4.90.4.100.4.110.4.12
- npm@servicetitan/kendo-theme0.0.270.0.280.0.290.0.300.0.310.0.320.0.33
- npm@servicetitan/ko-bridge38.1.138.1.238.1.338.1.438.1.538.1.638.1.7
- npm@servicetitan/launchdarkly-service38.1.138.1.238.1.338.1.438.1.538.1.638.1.7
- npm@servicetitan/lazy-module38.1.138.1.238.1.338.1.438.1.538.1.638.1.7
- npm@servicetitan/ld-type-generator0.2.10.2.20.2.30.2.40.2.50.2.60.2.7
- npm@servicetitan/line-item-editor1.5.11.5.21.5.31.5.41.5.51.5.61.5.7
- npm@servicetitan/link-item41.3.141.3.241.3.341.3.441.3.541.3.641.3.7
- npm@servicetitan/log-service38.1.138.1.238.1.338.1.438.1.538.1.638.1.7
- npm@servicetitan/marketing-direct-mail-components20.1.120.1.220.1.320.1.420.1.520.1.620.1.7
- npm@servicetitan/marketing-email-components20.2.320.2.420.2.520.2.620.2.720.2.820.2.9
- npm@servicetitan/marketing-form0.1.20.1.30.1.40.1.50.1.60.1.70.1.8
- npm@servicetitan/marketing-global-route1.14.11.14.21.14.31.14.41.14.51.14.61.14.7
- npm@servicetitan/marketing-integration-widgets1.0.401.0.411.0.421.0.431.0.441.0.451.0.46
- npm@servicetitan/marketing-route1.2.11.2.21.2.31.2.41.2.51.2.61.2.7
- npm@servicetitan/marketing-ui9.3.19.3.29.3.39.3.49.3.59.3.69.3.7
- npm@servicetitan/marketing-widgets1.0.11.0.21.0.31.0.41.0.51.0.61.0.7
- npm@servicetitan/measure-sheet-data2.6.12.6.22.6.32.6.42.6.52.6.62.6.7
- npm@servicetitan/mfe-quick-actions0.5.490.5.500.5.510.5.520.5.530.5.540.5.55
- npm@servicetitan/micro-frontend0.0.40.0.50.0.60.0.70.0.80.0.90.0.10
- npm@servicetitan/microfront0.0.20.0.30.0.40.0.50.0.60.0.70.0.8
- npm@servicetitan/microfront-auth0.0.50.0.60.0.70.0.80.0.90.0.100.0.11
- npm@servicetitan/microfront-tests0.0.110.0.120.0.130.0.140.0.150.0.160.0.17
- npm@servicetitan/microfront-utils1.4.11.4.21.4.31.4.41.4.51.4.61.4.7
- npm@servicetitan/modularpayments-webfields1.0.531.0.541.0.551.0.561.0.571.0.581.0.59
- npm@servicetitan/moneyout-api-client1.29.11.29.21.29.31.29.41.29.51.29.61.29.7
- npm@servicetitan/mpa-components2.5.12.5.22.5.32.5.42.5.52.5.62.5.7
- npm@servicetitan/navigation14.1.114.1.214.1.314.1.414.1.514.1.614.1.7
- npm@servicetitan/notifications41.3.141.3.241.3.341.3.441.3.541.3.641.3.7
- npm@servicetitan/onboarding-ui18.5.118.5.218.5.318.5.418.5.518.5.618.5.7
- npm@servicetitan/quick-actions1.15.21.15.31.15.41.15.51.15.61.15.71.15.8
- npm@servicetitan/react-hooks7.7.17.7.27.7.37.7.47.7.57.7.67.7.7
- npm@servicetitan/react-ioc38.1.138.1.238.1.338.1.438.1.538.1.638.1.7
- npm@servicetitan/responsive6.1.16.1.26.1.36.1.46.1.56.1.66.1.7
- npm@servicetitan/restrict-imports38.1.138.1.238.1.338.1.438.1.538.1.638.1.7
- npm@servicetitan/schema-comparison0.1.30.1.40.1.50.1.60.1.70.1.80.1.9
- npm@servicetitan/skeleton9.2.49.2.59.2.69.2.79.2.89.2.99.2.10
- npm@servicetitan/standalone-core-feature-gates1.11.41.11.51.11.61.11.71.11.81.11.91.11.10
- npm@servicetitan/standalone-feature-flags2.3.22.3.32.3.42.3.52.3.62.3.72.3.8
- npm@servicetitan/standalone-root1.11.31.11.41.11.51.11.61.11.71.11.81.11.9
- npm@servicetitan/standalone-tm-api1.1.11.1.21.1.31.1.41.1.51.1.61.1.7
- npm@servicetitan/standalone-ui2.2.42.2.52.2.62.2.72.2.82.2.92.2.10
- npm@servicetitan/startup38.1.138.1.238.1.338.1.438.1.538.1.638.1.7
- npm@servicetitan/startup-jest2.2.12.2.22.2.32.2.42.2.52.2.62.2.7
- npm@servicetitan/startup-mfe-compat0.5.10.5.20.5.30.5.40.5.50.5.60.5.7
- npm@servicetitan/startup-utils38.1.138.1.238.1.338.1.438.1.538.1.638.1.7
- npm@servicetitan/stylelint-config38.1.138.1.238.1.338.1.438.1.538.1.638.1.7
- npm@servicetitan/suppress-warnings38.1.138.1.238.1.338.1.438.1.538.1.638.1.7
- npm@servicetitan/table41.3.141.3.241.3.341.3.441.3.541.3.641.3.7
- npm@servicetitan/tanstack-query-mobx6.2.16.2.26.2.36.2.46.2.56.2.66.2.7
- npm@servicetitan/temporal-lite3.4.13.4.23.4.33.4.43.4.53.4.63.4.7
- npm@servicetitan/testing-library6.6.16.6.26.6.36.6.46.6.56.6.66.6.7
- npm@servicetitan/thoughtspot-theme1.7.11.7.21.7.31.7.41.7.51.7.61.7.7
- npm@servicetitan/time-zones3.8.13.8.23.8.33.8.43.8.53.8.63.8.7
- npm@servicetitan/titan-chat-ui7.1.37.1.47.1.57.1.67.1.77.1.87.1.9
- npm@servicetitan/titan-chat-ui-anvil29.0.19.0.29.0.39.0.49.0.59.0.69.0.7
- npm@servicetitan/titan-chat-ui-common9.0.19.0.29.0.39.0.49.0.59.0.69.0.7
- npm@servicetitan/titan-chat-ui-cypress2.1.32.1.42.1.52.1.62.1.72.1.82.1.9
- npm@servicetitan/titan-chatbot-api9.0.19.0.29.0.39.0.49.0.59.0.69.0.7
- npm@servicetitan/titan-chatbot-client2.1.32.1.42.1.52.1.62.1.72.1.82.1.9
- npm@servicetitan/titan-chatbot-ui7.1.37.1.47.1.57.1.67.1.77.1.87.1.9
- npm@servicetitan/titan-chatbot-ui-anvil29.0.19.0.29.0.39.0.49.0.59.0.69.0.7
- npm@servicetitan/titan-chatbot-ui-cypress9.0.19.0.29.0.39.0.49.0.59.0.69.0.7
- npm@servicetitan/tokens12.9.112.9.212.9.312.9.412.9.512.9.612.9.7
- npm@servicetitan/toolbelt-shared-registry1.14.11.14.21.14.31.14.41.14.51.14.61.14.7
- npm@servicetitan/uikit-docs22.11.122.11.222.11.322.11.422.11.522.11.622.11.7
- npm@servicetitan/unit-tests0.0.20.0.30.0.40.0.50.0.60.0.70.0.8
- npm@servicetitan/va-mfe-loader1.1.11.1.21.1.31.1.41.1.51.1.61.1.7
- npm@servicetitan/web-components38.1.138.1.238.1.338.1.438.1.538.1.638.1.7
- npm@servicetitan/widget-platform5.6.15.6.25.6.35.6.45.6.55.6.65.6.7
- npm@servicetitan/widget-platform-monolith5.6.15.6.25.6.35.6.45.6.55.6.65.6.7
- npm@thiennq/docs-viewer1.6.21.6.31.6.4
- npm@umacloud/cli-darwin-arm641.0.74
- npm@umacloud/cli-darwin-x641.0.74
- npm@umacloud/cli-linux-arm641.0.74
- npm@umacloud/cli-linux-musl-arm641.0.74
- npm@umacloud/cli-linux-musl-x641.0.74
- npm@umacloud/cli-linux-x641.0.74
- npm@umacloud/cli-win32-x641.0.74
- npm@umacloud/knowledge1.0.74
- npm@workbench-stack/core3.9.8
- npmbabel-plugin-linaria-css-to-undefined0.3.10.3.20.3.30.3.40.3.50.3.60.3.70.3.80.3.90.3.100.3.110.3.120.3.130.3.140.3.150.3.160.3.17
- npmcache-manager7.2.10
- npmcacheable2.5.1
- npmcacheable-request13.0.20
- npmconv-context-next1.0.11.0.21.0.31.0.41.0.51.0.61.0.71.0.81.0.91.0.10
- npmecto5.0.1
- npmeditable-contracts0.0.120.0.130.0.140.0.150.0.160.0.170.0.180.0.190.0.200.0.210.0.220.0.230.0.240.0.250.0.260.0.27
- npmeslint-plugin-folder-schema1.0.61.0.71.0.81.0.91.0.101.0.111.0.121.0.131.0.141.0.151.0.161.0.171.0.181.0.191.0.201.0.21
- npmexample-js-project1.0.21.0.31.0.41.0.51.0.61.0.71.0.81.0.91.0.101.0.11
- npmfile-entry-cache11.1.6
- npmflat-cache6.1.24
- npmfolder-lint1.0.61.0.71.0.81.0.91.0.101.0.111.0.121.0.131.0.141.0.151.0.161.0.171.0.181.0.191.0.201.0.21
- npmfrontend-orb4.4.14.4.24.4.34.4.44.4.54.4.64.4.74.4.84.4.94.4.104.4.114.4.124.4.134.4.144.4.154.4.164.4.174.4.18
- npmhamus.js0.4.1
- npmhttp-metrics-middleware2.2.2
- npmkeyv6.0.0
- npmnative-frontend-orb1.1.41.1.51.1.61.1.71.1.81.1.91.1.101.1.111.1.121.1.131.1.141.1.151.1.161.1.171.1.181.1.19
- npmpicasso-plugin-hammer2.11.6
- npmpicasso-plugin-q2.11.6
- npmpicasso.js2.11.6
- npmpob-test-package-in-monorepo5.2.15.2.25.2.35.2.45.2.55.2.65.2.75.2.85.2.95.2.105.2.115.2.125.2.135.2.145.2.155.2.16
- npmpob-test-typescript-package-in-monorepo4.2.14.2.24.2.34.2.44.2.54.2.64.2.74.2.84.2.94.2.104.2.114.2.124.2.134.2.144.2.154.2.164.2.17
- npmqlik-chart-modules1.1.1
- npmqlik-modifiers0.10.1
- npmqlik-object-conversion0.17.2
- npmrwc-client0.29.100.29.110.29.120.29.130.29.140.29.150.29.160.29.170.29.180.29.19
- npmserver-hemera-mongo0.0.12
- npmsn-listbox0.3.3
- npmtslint-folder-schema1.0.61.0.71.0.81.0.91.0.101.0.111.0.121.0.131.0.141.0.151.0.161.0.171.0.181.0.191.0.201.0.21
- npmumadev1.0.74
- npmverdaccio-okta-oauth38.1.138.1.238.1.338.1.438.1.538.1.638.1.738.1.838.1.938.1.1038.1.1138.1.1238.1.1338.1.1438.1.1538.1.16
- npmverdaccio-tarball-local-storage38.1.138.1.238.1.338.1.438.1.538.1.638.1.738.1.838.1.938.1.1038.1.1138.1.1238.1.1338.1.1438.1.1538.1.16
- npmworkbench-browser-server0.0.2
These are usually pulled in as transitive dependencies rather than installed directly. Check your whole tree at once - it runs in your browser and nothing is uploaded.
Impact
- npm registry auth tokens harvested from
.npmrc- used to publish the worm onward - GitHub CLI tokens: classic PATs, session tokens, and OIDC tokens
- AWS access keys and session tokens from
~/.aws/credentials - HashiCorp Vault client tokens from
VAULT_TOKEN, with an HTTP fallback fetch - Cloud/infra secrets, AI tool configuration files, and cryptocurrency wallets
- CI/CD secrets, build-runner identification, and cloud environment enumeration
- IDE persistence:
setup.mjsdropped into.claudeand.vscodeso the payload re-runs after cleanup - Exfiltration to attacker-created public GitHub repos described
Shai-Hulud: Here We Go Again
What to do
- 1Pin away from every version listed below and reinstall with
--ignore-scripts; the hook ispreinstall, so it fires before install completes - 2Audit lockfiles for the exact versions -
keyv@6.0.0,flat-cache@6.1.24,file-entry-cache@11.1.6are the highest-blast-radius entries - 3Treat any machine or runner that installed an affected version as compromised and rebuild it
- 4Rotate npm tokens, GitHub PATs/OIDC trust, AWS keys, Vault tokens, SSH keys, Kubernetes and Terraform credentials
- 5Audit your own npm publish history - stolen tokens were used to push the worm under unrelated maintainers
- 6Delete stray
setup.mjs/Math_Symbol.js/math_init.jsfrom repos and from.claudeand.vscodedirectories - 7Search for exfil repos under your GitHub org with the description
Shai-Hulud: Here We Go Againand revoke their creating tokens - 8Do not treat npm provenance as a safety signal here - these builds were genuinely signed by GitHub Actions
References
- Aikido SecurityKeyv and friends compromised in active Shai-Hulud supply chain attackaikido.dev
- Wizkeyv and cacheable npm package hijacked in supply chain attackwiz.io
- Wiz Researchwiz-research-iocs: keyv-packages.csv (affected package/version list, 443 packages / 2,235 versions)github.com
- Datadog Security LabsWorm compromises hundreds of popular npm packagessecuritylabs.datadoghq.com