In a stark reminder of the evolving threat landscape, the maintainer of the popular Axios npm package recently confirmed a supply chain compromise stemming from a highly-targeted social engineering campaign. Threat actors tracked as UNC1069 (linked to North Korean state-sponsored operations) successfully manipulated a maintainer into publishing malicious versions of the library. This incident underscores a critical reality for defenders: the software supply chain is a primary battleground, and trust in open-source ecosystems is being weaponized.
The Incident Explained
The attack did not exploit a traditional software vulnerability. Instead, it exploited human psychology. The attackers approached the maintainer, Jason Saayman, posing as the founder of a legitimate project. By building a rapport and establishing trust, they convinced the maintainer to take actions that ultimately compromised the integrity of the Axios package. For defenders, this highlights that technical controls alone are insufficient; we must also monitor for anomalies in developer behavior and package publication workflows.
Technical Analysis
- Threat Actor: UNC1069 (North Korean affiliation).
- Vector: Social Engineering / Business Compromise leading to Supply Chain Compromise.
- Affected Component: Axios (popular HTTP client for Node.js).
- Mechanism: The attackers tricked the maintainer into publishing malicious versions to the npm registry. While specific malicious version numbers were not fully detailed in the initial reports, the scope involves versions published within the window of the compromise.
- Severity: High. Axios is downloaded millions of times weekly. A malicious update can propagate rapidly into enterprise environments, leading to data theft, credential harvesting, or lateral movement.
- Fix: The maintainer has revoked compromised tokens and collaborated with npm to remove malicious versions. Organizations must audit their
package-lock.files immediately.
Defensive Monitoring
Detecting supply chain attacks requires a shift from simply "blocking bad IPs" to monitoring for behavioral anomalies in build processes and runtime execution of trusted tools. Below are detection mechanisms for your SOC.
SIGMA Rules
Use these SIGMA rules to detect suspicious child process executions from Node.js or unusual network behavior associated with compromised packages.
---
title: Suspicious Node.js Spawning PowerShell
id: 8d4f2a1b-3c6e-4f5a-9b8d-1a2b3c4d5e6f
status: experimental
description: Detects Node.js processes spawning PowerShell, which is often indicative of malicious npm packages executing post-exploitation scripts.
references:
- https://attack.mitre.org/techniques/T1059/001/
author: Security Arsenal
date: 2026/04/18
tags:
- attack.execution
- attack.t1059.001
logsource:
category: process_creation
product: windows
detection:
selection:
ParentImage|endswith: '\node.exe'
Image|endswith: '\powershell.exe'
condition: selection
falsepositives:
- Legitimate build scripts using Node.js to trigger system configurations
level: high
---
title: Node.js Process Connecting to Non-Standard Port
id: 9e5g3b2c-4d7f-5g6a-0c9e-2b3c4d5e6f0a
status: experimental
description: Detects Node.js processes establishing network connections to non-standard ports, potentially indicating C2 beaconing or data exfiltration by a compromised package.
references:
- https://attack.mitre.org/techniques/T1071/
author: Security Arsenal
date: 2026/04/18
tags:
- attack.command_and_control
- attack.t1071
logsource:
category: network_connection
product: windows
detection:
selection:
Image|endswith: '\node.exe'
Initiated: true
DestinationPort|not:
- 80
- 443
condition: selection
falsepositives:
- Local development servers running on custom ports
level: medium
KQL (Microsoft Sentinel/Defender)
These queries help identify potential malicious activity stemming from compromised npm packages in your environment.
// Detect Node.js spawning PowerShell or cmd (Common Supply Chain Behavior)
DeviceProcessEvents
| where InitiatingProcessFileName =~ "node.exe"
| where FileName in~ ("powershell.exe", "cmd.exe", "bash.exe")
| project Timestamp, DeviceName, InitiatingProcessCommandLine, FileName, ProcessCommandLine, AccountName
| order by Timestamp desc
// Identify Node.js processes making network connections to suspicious destinations
DeviceNetworkEvents
| where InitiatingProcessFileName =~ "node.exe"
| where RemotePort !in (80, 443) or isempty(RemoteUrl)
| summarize count() by DeviceName, InitiatingProcessCommandLine, RemoteIP, RemotePort
| order by count_ desc
Velociraptor VQL
Hunt for suspicious process lineage and check the integrity of package files.
-- Hunt for Node.js processes spawning suspicious children
SELECT Parent.Name AS ParentProcess, Child.Name, Child.CommandLine, Child.Pid
FROM pslist()
LEFT JOIN pslist(parent=Pid) AS Child
WHERE Name =~ "node" AND Child.Name =~ "powershell"
-- Scan for recent modifications to package-lock. to detect unauthorized updates
SELECT FullPath, Mtime, Size, Mode
FROM glob(globs="**/package-lock.")
WHERE Mtime > now() - 7d
PowerShell Verification
Use this script to audit the Axios package version in your current directories against known safe versions or flag recent installations.
# Audit installed Axios versions recursively
Get-ChildItem -Path "." -Recurse -Filter "package." -ErrorAction SilentlyContinue | ForEach-Object {
$path = $_.DirectoryName
$lockPath = Join-Path $path "package-lock."
if (Test-Path $lockPath) {
$content = Get-Content $lockPath -Raw | ConvertFrom-Json
if ($content.dependencies -and $content.dependencies.axios) {
[PSCustomObject]@{
Path = $path
Package = "axios"
Version = $content.dependencies.axios.version
}
}
}
}
Remediation
To protect your organization from this and future supply chain threats:
- Pin Dependencies: Update
package.to lock specific versions of Axios and other critical dependencies. Avoid using loose version ranges (e.g.,^1.0.0) where possible to prevent automatic installation of unexpected updates. - Audit and Revert: Review your
package-lock.files. If you identify versions of Axios published around the time of the incident (April 2026), revert to the last known safe version immediately. - Enable 2FA/PKI for Publishers: If your organization publishes open-source packages, enforce hardware security keys (FIDO2) for maintainers. This makes social engineering significantly harder for attackers.
- Software Bill of Materials (SBOM): Generate and monitor SBOMs for your applications. This allows for rapid vulnerability scanning and identification of compromised components.
- Private Registry: Consider using a private npm registry (like Verdaccio or Artifactory) to proxy public packages. This allows you to quarantine new versions before they are available to your internal development teams.
Related Resources
Security Arsenal Managed SOC Services AlertMonitor Platform Book a SOC Assessment soc-mdr Intel Hub
Is your security operations ready?
Get a free SOC assessment or see how AlertMonitor cuts through alert noise with automated triage.