The threat landscape for software development environments has deteriorated significantly with the emergence of the PolinRider campaign. Active in July 2026, this operation is attributed to North Korean threat actors historically linked to the "Contagious Interview" campaign. These actors have shifted tactics, publishing 108 distinct malicious packages and browser extensions across critical ecosystems including npm, Packagist, Go, and the Chrome Web Store.
For defenders, this represents a critical failure point in the software supply chain. The actors are compromising maintainer accounts to inject malicious code into legitimate-looking packages. Once installed, these artifacts facilitate initial access, data exfiltration, and potential lateral movement. Given the reliance of modern CI/CD pipelines on these repositories, the blast radius of a compromised dependency is massive. We are observing active exploitation; this is not theoretical.
Technical Analysis
Threat Actor: North Korean State-Sponsored (Lazarus Group affiliates).
Campaign: PolinRider (evolution of Contagious Interview).
Attack Vector: Supply Chain Compromise via Repository Poisoning and Account Takeover.
Affected Platforms & Ecosystems:
- npm (Node.js): Malicious JavaScript packages executing arbitrary code upon installation.
- Packagist (PHP/Composer): Poisoned PHP dependencies.
- Go (Golang): Malicious modules.
- Google Chrome: Malicious browser extensions likely used for credential harvesting or session hijacking.
Mechanism of Action:
The threat actors compromise maintainer accounts or create typosquatting packages. The malicious payload typically triggers during the postinstall script phase (npm) or upon initialization (browser extensions). The attack chain involves:
- Delivery: Developer installs package or adds extension via Chrome Web Store.
- Execution: Scripts run automatically with the privileges of the user or build pipeline.
- Objective: Establishment of C2 channels, theft of credentials, or cryptocurrency manipulation.
Exploitation Status: Confirmed active exploitation. The campaign is ongoing, with new packages continuing to appear.
Detection & Response
Detecting supply chain compromises requires visibility into developer workstations and build agents. We must look for anomalies in how package managers behave—specifically, instances where a package manager spawns a shell or makes unauthorized network connections.
Sigma Rules
---
title: PolinRider - Suspicious Shell Spawn by Package Managers
id: 8a4b2c10-9e6d-4f5a-8b1c-2d3e4f5a6b7c
status: experimental
description: Detects npm, composer, or go processes spawning cmd, powershell, or bash, a common TTP in malicious package execution.
references:
- https://thehackernews.com/2026/07/north-korean-hackers-publish-108.html
author: Security Arsenal
date: 2026/07/15
tags:
- attack.execution
- attack.t1059.001
- attack.initial_access
- attack.t1195.002
logsource:
category: process_creation
product: windows
detection:
selection_parent:
ParentImage|endswith:
- '\npm.cmd'
- '\npm.exe'
- '\composer.phar'
- '\go.exe'
selection_child:
Image|endswith:
- '\cmd.exe'
- '\powershell.exe'
- '\pwsh.exe'
- '\wsl.exe'
condition: selection_parent and selection_child
falsepositives:
- Legitimate build scripts that require shell access
level: high
---
title: PolinRider - Chrome Extension Loading from Dev Paths
id: 1d2e3f4a-5b6c-7d8e-9f0a-1b2c3d4e5f6a
status: experimental
description: Detects Google Chrome loading extensions from unusual paths or temp directories, indicative of malicious sideloading or unpacked extensions.
references:
- https://thehackernews.com/2026/07/north-korean-hackers-publish-108.html
author: Security Arsenal
date: 2026/07/15
tags:
- attack.persistence
- attack.t1176
logsource:
category: process_creation
product: windows
detection:
selection:
Image|endswith:
- '\chrome.exe'
CommandLine|contains:
- '--load-extension='
- '--enable-easy-off-store-extension-install'
filter_paths:
CommandLine|contains:
- '%LOCALAPPDATA%\Google\Chrome\User Data'
- '%PROGRAMFILES%\Google\Chrome'
condition: selection and not filter_paths
falsepositives:
- Developers testing unpacked extensions locally
level: medium
---
title: PolinRider - Package Manager Outbound C2 Traffic
id: 2c3d4e5f-6a7b-8c9d-0e1f-2a3b4c5d6e7f
status: experimental
description: Detects network connections initiated by package manager processes to non-standard ports or IPs, potentially indicating C2 beacons in malicious packages.
references:
- https://thehackernews.com/2026/07/north-korean-hackers-publish-108.html
author: Security Arsenal
date: 2026/07/15
tags:
- attack.command_and_control
- attack.t1071.001
logsource:
category: network_connection
product: windows
detection:
selection:
Image|endswith:
- '\node.exe'
- '\php.exe'
- '\go.exe'
filter_standard_ports:
DestinationPort:
- 80
- 443
- 8080
condition: selection and not filter_standard_ports
falsepositives:
- Custom internal registry connections
level: high
KQL (Microsoft Sentinel / Defender)
// Hunt for suspicious process spawns by package managers
DeviceProcessEvents
| where Timestamp > ago(7d)
| where InitiatingProcessFileName in ("npm.cmd", "npm.exe", "composer.phar", "go.exe", "node.exe")
| where ProcessFileName in ("cmd.exe", "powershell.exe", "pwsh.exe", "bash.exe", "wsl.exe", "curl.exe", "wget.exe")
| project Timestamp, DeviceName, AccountName, InitiatingProcessCommandLine, ProcessCommandLine, ProcessFileName, FolderPath
| order by Timestamp desc
Velociraptor VQL
-- Hunt for recently modified package. or go.mod files indicating new package additions
SELECT FullPath, Mtime, Size, Mode
FROM glob(globs=["/Users/*/*node_modules/package.", "/home/*/*/node_modules/package.", "/home/*/*/go.mod"])
WHERE Mtime > now() - 7 * 24 * 3600
AND Size < 10000000
-- Hunt for suspicious Chrome extension directories on Linux/macOS
SELECT FullPath, Mtime
FROM glob(globs=["/home/*/.config/google-chrome/Default/Extensions/*/manifest.", "/Users/*/Library/Application Support/Google/Chrome/Default/Extensions/*/manifest."])
WHERE Mtime > now() - 7 * 24 * 36000
Remediation Script (PowerShell)
# Audit for recently modified npm package directories (last 7 days)
$Path = "$env:APPDATA\npm" # Common global npm path
if (Test-Path $Path) {
Write-Host "Auditing recent npm activity in $Path..."
Get-ChildItem -Path $Path -Recurse -File -ErrorAction SilentlyContinue |
Where-Object { $_.LastWriteTime -gt (Get-Date).AddDays(-7) } |
Select-Object FullName, LastWriteTime
}
# Check for unusual Chrome Extensions loaded via Command Line arguments
$chromeProcs = Get-Process chrome -ErrorAction SilentlyContinue
foreach ($proc in $chromeProcs) {
$cmdLine = (Get-CimInstance Win32_Process -Filter "ProcessId = $($proc.Id)").CommandLine
if ($cmdLine -match "--load-extension=" -and $cmdLine -match "/Temp/|/Downloads/") {
Write-Host "WARNING: Suspicious Chrome extension load detected: $cmdLine" -ForegroundColor Red
}
}
Remediation
- Immediate Audit: Developer teams must audit all npm, Composer, and Go dependencies installed in the last 30 days. Cross-reference package names against threat intelligence feeds specifically looking for typosquatting of popular libraries.
- Maintainer Hygiene: Force a password reset and enable MFA for all accounts with publish rights to internal or public package registries.
- Registry Governance: Implement strict allow-listing for external registries. Block access to the public npm/PyPI registries from build servers unless absolutely necessary, utilizing an internal proxy like Artifactory or Nexus.
- Browser Extension Policy: Enforce Group Policy or Chrome Cloud Management policies that prevent users from installing extensions from outside the corporate allow-list. Remove any developer-focused extensions not explicitly vetted by the security team.
- Pipeline Isolation: Ensure build pipelines run with the principle of least privilege. Do not build applications as an administrator or with access to cloud credentials.
Related Resources
Security Arsenal Penetration Testing Services AlertMonitor Platform Book a SOC Assessment vulnerability-management Intel Hub
Is your security operations ready?
Get a free SOC assessment or see how AlertMonitor cuts through alert noise with automated triage.