2026-08-06HIGHexploitedA self-propagating npm worm reaches packages totalling 1.3 billion monthly downloads, and its C2 address lives on-chain
npm
product · product:npm single-source
Coverage
3
first 2026-07-23 → last 2026-10-11
Latest activity
2026-10-11
A self-propagating npm worm reaches packages totalling 1.3 billion monthly downloads, and its C2 address…
Peak priority
high
1 high · 2 notable
Targets
technology
sectors: technology, public-sector, finance
Sources cited
9
8 hosts
Action items (4)
Do-now tasks recorded on the entries about npm, newest first. Check the date before acting on an older one.
- Audit every npm publish token your organisation and its maintainers hold and revoke any that can publish without two-factor authentication, that exact token property, not package popularity, is what decides whether the worm spreads from a compromised developer to your packages.2026-08-06A self-propagating npm worm reaches packages…
- On any developer workstation or build agent that installed a package from the keyv family since 2026-08-04, or tensorlake@0.5.144 since 2026-10-08, treat the AI-assistant, cloud, GitHub, Vault, SSH and Kubernetes credentials present on that host as disclosed and rotate them; the collector sweeps over 300 credential patterns in one pass, so partial rotation leaves the operator a working set. Isolate the host before revoking its GitHub token, because OX Security reports a switch that wipes the machine when the token is revoked; on a host that ran tensorlake@0.5.144, Socket and OX Security also name the gh-token-monitor persistence (a systemd user unit on Linux, a LaunchAgent on macOS, a scheduled task on Windows), which has to be removed before the token is revoked.2026-08-06A self-propagating npm worm reaches packages…
- Stop treating a valid npm provenance attestation as evidence a package is clean; where release pipelines gate on provenance, change the check to pin on the workflow identity inside the Fulcio certificate and the Rekor log index, which is what Unit 42 says still discriminates.2026-08-06A self-propagating npm worm reaches packages…
- Pull the affected package list from Sonatype's tracking record for this campaign, sonatype-2026-005660, then search build logs, lockfiles, dependency caches, container layers and internal npm mirrors for any install of one, and treat a host that installed one as compromised rather than cleaned.2026-08-07An npm campaign built for attrition, throwaway…
Defender insights
What each entry about npm tells a defender to do, newest first.
Latest update · triage
Triage
Triage
Story timeline
- 2026-08-07Flooding Dropper: 846 npm packages published from disposable accounts, with a dropper that falls back to DNS TXT records when its download hosts are blocked
- 2026-08-06CHAINDROP, the Shai-Hulud npm worm returns through the keyv maintainer, backdoors 400+ packages, and resolves its exfiltration endpoint from an Ethereum smart contract
- 2026-07-23SANDWORM_MODE, an npm supply-chain worm that 'lives off the AI toolchain', poisoning MCP servers in AI coding assistants to steal developer credentials
Hunting pivots
Releases covered
npm ×3
ATT&CK techniques (24 across 12 tactics)
24 techniques observed across 3 entries about this entity, derived from entry metadata and body evidence, never asserted without a published entry behind it · pinned to MITRE ATT&CK v20.0 · compare on the matrix · Navigator layer (JSON)
- Initial AccessSupply Chain Compromise: Compromise Software Dependencies and Development Tools · Supply Chain Compromise: Compromise Software Supply Chain
- ExecutionScheduled Task/Job: Scheduled Task · Command and Scripting Interpreter: JavaScript
- PersistenceScheduled Task/Job: Scheduled Task · Create or Modify System Process: Launch Agent · Create or Modify System Process: Systemd Service · Event Triggered Execution · Boot or Logon Autostart Execution: Registry Run Keys / Startup Folder
- Privilege EscalationScheduled Task/Job: Scheduled Task · Create or Modify System Process: Launch Agent · Create or Modify System Process: Systemd Service · Event Triggered Execution · Boot or Logon Autostart Execution: Registry Run Keys / Startup Folder
- StealthObfuscated Files or Information · Virtualization/Sandbox Evasion · Virtualization/Sandbox Evasion: System Checks · Reflective Code Loading
- Defense ImpairmentDisable or Modify Tools
- Credential AccessSteal Application Access Token · Unsecured Credentials · Unsecured Credentials: Credentials In Files · Unsecured Credentials: Cloud Instance Metadata API
- DiscoveryVirtualization/Sandbox Evasion · Virtualization/Sandbox Evasion: System Checks
- CollectionAutomated Collection
- Command and ControlApplication Layer Protocol: DNS · Web Service: Dead Drop Resolver · Ingress Tool Transfer · Dynamic Resolution
- ExfiltrationExfiltration Over Web Service: Exfiltration to Code Repository
- ImpactData Destruction
Initial Access TA0001
T1195.001Supply Chain Compromise: Compromise Software Dependencies and Development Tools×1
Adversaries may manipulate software dependencies and development tools prior to receipt by a final consumer for the purpose of data or system compromise. Applications often depend on external software to function properly. Popular open source projects that are used as dependencies in many applications, such as pip and NPM packages, may be targeted as a means to add malicious code to users of the dependency. This may also include abandoned packages, which in some cases could be re-registered by threat actors after being removed by adversaries. Adversaries may also employ "typosquatting" or name-confusion by choosing names similar to existing popular libraries or packages in order to deceive a user.
Evidence: 2026-08-06/chaindrop-shai-hulud-npm-worm-onchain-c2-resolver · ATT&CK page ↗
T1195.002Supply Chain Compromise: Compromise Software Supply Chain×3
Adversaries may manipulate application software prior to receipt by a final consumer for the purpose of data or system compromise. Supply chain compromise of software can take place in a number of ways, including manipulation of the application source code, manipulation of the update/distribution mechanism for that software, or replacing compiled releases with a modified version.
Evidence: 2026-08-07/flooding-dropper-npm-846-packages-dns-txt-fallback · 2026-08-06/chaindrop-shai-hulud-npm-worm-onchain-c2-resolver · 2026-07-23/sandworm-mode-npm-ai-toolchain-supply-chain-worm-mcp · ATT&CK page ↗
Execution TA0002
T1053.005Scheduled Task/Job: Scheduled Task×2
Adversaries may abuse the Windows Task Scheduler to perform task scheduling for initial or recurring execution of malicious code. There are multiple ways to access the Task Scheduler in Windows. The schtasks utility can be run directly on the command line, or the Task Scheduler can be opened through the GUI within the Administrator Tools section of the Control Panel. In some cases, adversaries have used a .NET wrapper for the Windows Task Scheduler, and alternatively, adversaries have used the Windows netapi32 library and Windows Management Instrumentation (WMI) to create a scheduled task. Adversaries may also utilize the Powershell Cmdlet `Invoke-CimMethod`, which leverages WMI class `PS_ScheduledTask` to create a scheduled task via an XML path.
Evidence: 2026-08-07/flooding-dropper-npm-846-packages-dns-txt-fallback · 2026-08-06/chaindrop-shai-hulud-npm-worm-onchain-c2-resolver · ATT&CK page ↗
T1059.007Command and Scripting Interpreter: JavaScript×2
Adversaries may abuse various implementations of JavaScript for execution. JavaScript (JS) is a platform-independent scripting language (compiled just-in-time at runtime) commonly associated with scripts in webpages, though JS can be executed in runtime environments outside the browser.
Evidence: 2026-08-07/flooding-dropper-npm-846-packages-dns-txt-fallback · 2026-08-06/chaindrop-shai-hulud-npm-worm-onchain-c2-resolver · ATT&CK page ↗
Persistence TA0003
T1053.005Scheduled Task/Job: Scheduled Task×2
Adversaries may abuse the Windows Task Scheduler to perform task scheduling for initial or recurring execution of malicious code. There are multiple ways to access the Task Scheduler in Windows. The schtasks utility can be run directly on the command line, or the Task Scheduler can be opened through the GUI within the Administrator Tools section of the Control Panel. In some cases, adversaries have used a .NET wrapper for the Windows Task Scheduler, and alternatively, adversaries have used the Windows netapi32 library and Windows Management Instrumentation (WMI) to create a scheduled task. Adversaries may also utilize the Powershell Cmdlet `Invoke-CimMethod`, which leverages WMI class `PS_ScheduledTask` to create a scheduled task via an XML path.
Evidence: 2026-08-07/flooding-dropper-npm-846-packages-dns-txt-fallback · 2026-08-06/chaindrop-shai-hulud-npm-worm-onchain-c2-resolver · ATT&CK page ↗
T1543.001Create or Modify System Process: Launch Agent×1
Adversaries may create or modify launch agents to repeatedly execute malicious payloads as part of persistence. When a user logs in, a per-user launchd process is started which loads the parameters for each launch-on-demand user agent from the property list (.plist) file found in <code>/System/Library/LaunchAgents</code>, <code>/Library/LaunchAgents</code>, and <code>~/Library/LaunchAgents</code>. Property list files use the <code>Label</code>, <code>ProgramArguments </code>, and <code>RunAtLoad</code> keys to identify the Launch Agent's name, executable location, and execution time. Launch Agents are often installed to perform updates to programs, launch user specified programs at login, or to conduct other developer tasks.
Evidence: 2026-08-06/chaindrop-shai-hulud-npm-worm-onchain-c2-resolver · ATT&CK page ↗
T1543.002Create or Modify System Process: Systemd Service×1
Adversaries may create or modify systemd services to repeatedly execute malicious payloads as part of persistence. Systemd is a system and service manager commonly used for managing background daemon processes (also known as services) and other system resources. Systemd is the default initialization (init) system on many Linux distributions replacing legacy init systems, including SysVinit and Upstart, while remaining backwards compatible.
Evidence: 2026-08-06/chaindrop-shai-hulud-npm-worm-onchain-c2-resolver · ATT&CK page ↗
T1546Event Triggered Execution×2
Adversaries may establish persistence and/or elevate privileges using system mechanisms that trigger execution based on specific events. Various operating systems have means to monitor and subscribe to events such as logons or other user activity such as running specific applications/binaries. Cloud environments may also support various functions and services that monitor and can be invoked in response to specific cloud events.
Evidence: 2026-08-06/chaindrop-shai-hulud-npm-worm-onchain-c2-resolver · 2026-07-23/sandworm-mode-npm-ai-toolchain-supply-chain-worm-mcp · ATT&CK page ↗
T1547.001Boot or Logon Autostart Execution: Registry Run Keys / Startup Folder×1
Adversaries may achieve persistence by adding a program to a startup folder or referencing it with a Registry run key. Adding an entry to the "run keys" in the Registry or startup folder will cause the program referenced to be executed when a user logs in. These programs will be executed under the context of the user and will have the account's associated permissions level.
Evidence: 2026-08-07/flooding-dropper-npm-846-packages-dns-txt-fallback · ATT&CK page ↗
Privilege Escalation TA0004
T1053.005Scheduled Task/Job: Scheduled Task×2
Adversaries may abuse the Windows Task Scheduler to perform task scheduling for initial or recurring execution of malicious code. There are multiple ways to access the Task Scheduler in Windows. The schtasks utility can be run directly on the command line, or the Task Scheduler can be opened through the GUI within the Administrator Tools section of the Control Panel. In some cases, adversaries have used a .NET wrapper for the Windows Task Scheduler, and alternatively, adversaries have used the Windows netapi32 library and Windows Management Instrumentation (WMI) to create a scheduled task. Adversaries may also utilize the Powershell Cmdlet `Invoke-CimMethod`, which leverages WMI class `PS_ScheduledTask` to create a scheduled task via an XML path.
Evidence: 2026-08-07/flooding-dropper-npm-846-packages-dns-txt-fallback · 2026-08-06/chaindrop-shai-hulud-npm-worm-onchain-c2-resolver · ATT&CK page ↗
T1543.001Create or Modify System Process: Launch Agent×1
Adversaries may create or modify launch agents to repeatedly execute malicious payloads as part of persistence. When a user logs in, a per-user launchd process is started which loads the parameters for each launch-on-demand user agent from the property list (.plist) file found in <code>/System/Library/LaunchAgents</code>, <code>/Library/LaunchAgents</code>, and <code>~/Library/LaunchAgents</code>. Property list files use the <code>Label</code>, <code>ProgramArguments </code>, and <code>RunAtLoad</code> keys to identify the Launch Agent's name, executable location, and execution time. Launch Agents are often installed to perform updates to programs, launch user specified programs at login, or to conduct other developer tasks.
Evidence: 2026-08-06/chaindrop-shai-hulud-npm-worm-onchain-c2-resolver · ATT&CK page ↗
T1543.002Create or Modify System Process: Systemd Service×1
Adversaries may create or modify systemd services to repeatedly execute malicious payloads as part of persistence. Systemd is a system and service manager commonly used for managing background daemon processes (also known as services) and other system resources. Systemd is the default initialization (init) system on many Linux distributions replacing legacy init systems, including SysVinit and Upstart, while remaining backwards compatible.
Evidence: 2026-08-06/chaindrop-shai-hulud-npm-worm-onchain-c2-resolver · ATT&CK page ↗
T1546Event Triggered Execution×2
Adversaries may establish persistence and/or elevate privileges using system mechanisms that trigger execution based on specific events. Various operating systems have means to monitor and subscribe to events such as logons or other user activity such as running specific applications/binaries. Cloud environments may also support various functions and services that monitor and can be invoked in response to specific cloud events.
Evidence: 2026-08-06/chaindrop-shai-hulud-npm-worm-onchain-c2-resolver · 2026-07-23/sandworm-mode-npm-ai-toolchain-supply-chain-worm-mcp · ATT&CK page ↗
T1547.001Boot or Logon Autostart Execution: Registry Run Keys / Startup Folder×1
Adversaries may achieve persistence by adding a program to a startup folder or referencing it with a Registry run key. Adding an entry to the "run keys" in the Registry or startup folder will cause the program referenced to be executed when a user logs in. These programs will be executed under the context of the user and will have the account's associated permissions level.
Evidence: 2026-08-07/flooding-dropper-npm-846-packages-dns-txt-fallback · ATT&CK page ↗
Stealth TA0005
T1027Obfuscated Files or Information×2
Adversaries may attempt to make an executable or file difficult to discover or analyze by encrypting, encoding, or otherwise obfuscating its contents on the system or in transit. This is common behavior that can be used across different platforms and the network to evade defenses.
Evidence: 2026-08-07/flooding-dropper-npm-846-packages-dns-txt-fallback · 2026-08-06/chaindrop-shai-hulud-npm-worm-onchain-c2-resolver · ATT&CK page ↗
T1497Virtualization/Sandbox Evasion×1
Adversaries may employ various means to detect and avoid virtualization and analysis environments. This may include changing behaviors based on the results of checks for the presence of artifacts indicative of a virtual machine environment (VME) or sandbox. If the adversary detects a VME, they may alter their malware to disengage from the victim or conceal the core functions of the implant. They may also search for VME artifacts before dropping secondary or additional payloads. Adversaries may use the information learned from Virtualization/Sandbox Evasion during automated discovery to shape follow-on behaviors.
Evidence: 2026-07-23/sandworm-mode-npm-ai-toolchain-supply-chain-worm-mcp · ATT&CK page ↗
T1497.001Virtualization/Sandbox Evasion: System Checks×1
Adversaries may employ various system checks to detect and avoid virtualization and analysis environments. This may include changing behaviors based on the results of checks for the presence of artifacts indicative of a virtual machine environment (VME) or sandbox. If the adversary detects a VME, they may alter their malware to disengage from the victim or conceal the core functions of the implant. They may also search for VME artifacts before dropping secondary or additional payloads. Adversaries may use the information learned from Virtualization/Sandbox Evasion during automated discovery to shape follow-on behaviors.
Evidence: 2026-08-07/flooding-dropper-npm-846-packages-dns-txt-fallback · ATT&CK page ↗
T1620Reflective Code Loading×1
Adversaries may reflectively load code into a process in order to conceal the execution of malicious payloads. Reflective loading involves allocating then executing payloads directly within the memory of the process, vice creating a thread or process backed by a file path on disk (e.g., Shared Modules).
Evidence: 2026-08-07/flooding-dropper-npm-846-packages-dns-txt-fallback · ATT&CK page ↗
Defense Impairment TA0112
T1685Disable or Modify Tools×1
Adversaries may disable, degrade, or tamper with security tools or applications (e.g., endpoint detection and response (EDR) tools, intrusion detection systems (IDS), antivirus, logging agents, sensors, etc.) to impair or reduce visibility of defensive capabilities. This may include stopping specific services, killing processes, modifying or deleting tool configuration files and Registry keys, or preventing tools from updating. This may also include impairing defenses more broadly by disrupting preventative, detection, and response mechanisms across host, network, and cloud environments.
Evidence: 2026-08-07/flooding-dropper-npm-846-packages-dns-txt-fallback · ATT&CK page ↗
Credential Access TA0006
T1528Steal Application Access Token×1
Adversaries can steal application access tokens as a means of acquiring credentials to access remote systems and resources.
Evidence: 2026-08-06/chaindrop-shai-hulud-npm-worm-onchain-c2-resolver · ATT&CK page ↗
T1552Unsecured Credentials×1
Adversaries may search compromised systems to find and obtain insecurely stored credentials. These credentials can be stored and/or misplaced in many locations on a system, including plaintext files (e.g. Shell History), operating system or application-specific repositories (e.g. Credentials in Registry), or other specialized files/artifacts (e.g. Private Keys).
Evidence: 2026-08-06/chaindrop-shai-hulud-npm-worm-onchain-c2-resolver · ATT&CK page ↗
T1552.001Unsecured Credentials: Credentials In Files×2
Adversaries may search local file systems and remote file shares for files containing insecurely stored credentials. These can be files created by users to store their own credentials, shared credential stores for a group of individuals, configuration files containing passwords for a system or service, or source code/binary files containing embedded passwords.
Evidence: 2026-08-06/chaindrop-shai-hulud-npm-worm-onchain-c2-resolver · 2026-07-23/sandworm-mode-npm-ai-toolchain-supply-chain-worm-mcp · ATT&CK page ↗
T1552.005Unsecured Credentials: Cloud Instance Metadata API×1
Adversaries may attempt to access the Cloud Instance Metadata API to collect credentials and other sensitive data.
Evidence: 2026-08-06/chaindrop-shai-hulud-npm-worm-onchain-c2-resolver · ATT&CK page ↗
Discovery TA0007
T1497Virtualization/Sandbox Evasion×1
Adversaries may employ various means to detect and avoid virtualization and analysis environments. This may include changing behaviors based on the results of checks for the presence of artifacts indicative of a virtual machine environment (VME) or sandbox. If the adversary detects a VME, they may alter their malware to disengage from the victim or conceal the core functions of the implant. They may also search for VME artifacts before dropping secondary or additional payloads. Adversaries may use the information learned from Virtualization/Sandbox Evasion during automated discovery to shape follow-on behaviors.
Evidence: 2026-07-23/sandworm-mode-npm-ai-toolchain-supply-chain-worm-mcp · ATT&CK page ↗
T1497.001Virtualization/Sandbox Evasion: System Checks×1
Adversaries may employ various system checks to detect and avoid virtualization and analysis environments. This may include changing behaviors based on the results of checks for the presence of artifacts indicative of a virtual machine environment (VME) or sandbox. If the adversary detects a VME, they may alter their malware to disengage from the victim or conceal the core functions of the implant. They may also search for VME artifacts before dropping secondary or additional payloads. Adversaries may use the information learned from Virtualization/Sandbox Evasion during automated discovery to shape follow-on behaviors.
Evidence: 2026-08-07/flooding-dropper-npm-846-packages-dns-txt-fallback · ATT&CK page ↗
Collection TA0009
T1119Automated Collection×1
Once established within a system or network, an adversary may use automated techniques for collecting internal data. Methods for performing this technique could include use of a Command and Scripting Interpreter to search for and copy information fitting set criteria such as file type, location, or name at specific time intervals.
Evidence: 2026-08-06/chaindrop-shai-hulud-npm-worm-onchain-c2-resolver · ATT&CK page ↗
Command and Control TA0011
T1071.004Application Layer Protocol: DNS×2
Adversaries may communicate using the Domain Name System (DNS) application layer protocol to avoid detection/network filtering by blending in with existing traffic. Commands to the remote system, and often the results of those commands, will be embedded within the protocol traffic between the client and server.
Evidence: 2026-08-07/flooding-dropper-npm-846-packages-dns-txt-fallback · 2026-07-23/sandworm-mode-npm-ai-toolchain-supply-chain-worm-mcp · ATT&CK page ↗
T1102.001Web Service: Dead Drop Resolver×1
Adversaries may use an existing, legitimate external Web service to host information that points to additional command and control (C2) infrastructure. Adversaries may post content, known as a dead drop resolver, on Web services with embedded (and often obfuscated/encoded) domains or IP addresses. Once infected, victims will reach out to and be redirected by these resolvers.
Evidence: 2026-08-06/chaindrop-shai-hulud-npm-worm-onchain-c2-resolver · ATT&CK page ↗
T1105Ingress Tool Transfer×1
Adversaries may transfer tools or other files from an external system into a compromised environment. Tools or files may be copied from an external adversary-controlled system to the victim network through the command and control channel or through alternate protocols such as ftp. Once present, adversaries may also transfer/spread tools between victim devices within a compromised environment (i.e. Lateral Tool Transfer).
Evidence: 2026-08-07/flooding-dropper-npm-846-packages-dns-txt-fallback · ATT&CK page ↗
T1568Dynamic Resolution×1
Adversaries may dynamically establish connections to command and control infrastructure to evade common detections and remediations. This may be achieved by using malware that shares a common algorithm with the infrastructure the adversary uses to receive the malware's communications. These calculations can be used to dynamically adjust parameters such as the domain name, IP address, or port number the malware uses for command and control.
Evidence: 2026-08-06/chaindrop-shai-hulud-npm-worm-onchain-c2-resolver · ATT&CK page ↗
Exfiltration TA0010
T1567.001Exfiltration Over Web Service: Exfiltration to Code Repository×1
Adversaries may exfiltrate data to a code repository rather than over their primary command and control channel. Code repositories are often accessible via an API (ex: https://api.github.com). Access to these APIs are often over HTTPS, which gives the adversary an additional level of protection.
Evidence: 2026-08-06/chaindrop-shai-hulud-npm-worm-onchain-c2-resolver · ATT&CK page ↗
Impact TA0040
T1485Data Destruction×1
Adversaries may destroy data and files on specific systems or in large numbers on a network to interrupt availability to systems, services, and network resources. Data destruction is likely to render stored data irrecoverable by forensic techniques through overwriting files or data on local and remote drives. Common operating system file deletion commands such as <code>del</code> and <code>rm</code> often only remove pointers to files without wiping the contents of the files themselves, making the files recoverable by proper forensic methodology. This behavior is distinct from Disk Content Wipe and Disk Structure Wipe because individual files are destroyed rather than sections of a storage disk or the disk's logical structure.
Evidence: 2026-08-06/chaindrop-shai-hulud-npm-worm-onchain-c2-resolver · ATT&CK page ↗
Entries about npm (3)
Co-occurring entities
Derived: referenced by the same focused operational entries (weekly summaries and report roundups don't count); ×N counts the shared entries.
- Claude Desktop×1
- Cursor×1
- Flooding Dropper×1
- GitHub Actions×1
- Model Context Protocol (MCP)×1
- SANDWORM_MODE×1
- Shai-Hulud CHAINDROP wave×1
- Visual Studio Code×1
Where this entity is cited
Source distribution
- ox.security2 (22%)
- crowdstrike.com1 (11%)
- elastic.co1 (11%)
- endorlabs.com1 (11%)
- securitybrief.com.au1 (11%)
- socket.dev1 (11%)
- sonatype.com1 (11%)
- unit42.paloaltonetworks.com1 (11%)
All cited sources (9)
- crowdstrike.comCrowdStrikehttps://www.crowdstrike.com/en-us/blog/denying-the-worm-sandworm-mode-and-ai-toolchain-supply-chain-attacks/
- elastic.coElastic Security Labshttps://www.elastic.co/security-labs/shai-hulud-chaindrop-npm-supply-chain
- endorlabs.comEndor Labshttps://www.endorlabs.com/learn/tensorlake-npm-package-compromised-by-shai-hulud-in-latest-software-supply-chain-attack
- ox.securityOX Securityhttps://www.ox.security/blog/a-new-infostealer-worm-hits-npm-affecting-keyv-and-cacheable/
- ox.securityOX Securityhttps://www.ox.security/blog/shai-hulud-here-we-go-again-tensorlake-npm-package-hit-with-malware/
- securitybrief.com.auSecurityBriefhttps://securitybrief.com.au/story/crowdstrike-warns-of-malware-targeting-ai-coding-tools
- socket.devSockethttps://www.socket.dev/blog/tensorlake-compromise
- sonatype.comSonatype Research Labshttps://www.sonatype.com/blog/flooding-dropper-hits-npm-with-850-malicious-packages
- unit42.paloaltonetworks.comPalo Alto Networks Unit 42https://unit42.paloaltonetworks.com/chaindrop-npm-worm-analysis/