PolinRider DPRK Supply-Chain Campaign: Confirmed GitHub Footprint Grows 6.5x Since March (JADESNOW/Beavertail/InvisibleFerret Loaders, DEV#POPPER & OmniStealer Payloads)

PolinRider DPRK Supply-Chain Campaign (TL-2026-1435), also tracked as PolinRider, is a high-severity supply-chain compromise, first published 2026-07-17. It is attributed to PolinRider (North Korea) with high confidence, affects GitHub Public GitHub repositories, maps to 32 MITRE ATT&CK techniques (T1005, T1027, T1033), and is covered by 9 detection rules and 49 indicators of compromise.

Key facts for TL-2026-1435

Threat ID
TL-2026-1435
Also known as
PolinRider, JADESNOW campaign, TasksJacker
Severity
HIGH
Status
ACTIVE
Category
SUPPLY_CHAIN
First published
2026-07-17
Last reviewed
2026-07-17
Attribution
PolinRider
Attribution confidence
HIGH
Nation-state nexus
North Korea
Motivation
FINANCIAL
Target sectors
technology, software-development, cryptocurrency, fintech, open-source-ecosystem
Target regions
Global
Detection rules
9
Indicators of compromise
49

Malware and tooling in PolinRider DPRK Supply-Chain Campaign

Malware and tooling: BeaverTail - S1246, DEV#POPPER, InvisibleFerret - S1245, JADESNOW, OmniStealer

PolinRider, a DPRK-linked threat actor tied to the Contagious Interview / Famous Chollima cluster, has implanted obfuscated JavaScript loaders (tracked as JADESNOW, delivering Beavertail and InvisibleFerret) across public GitHub repositories, npm, Go modules, Packagist, and Chrome extensions. Confirmed footprint grew from 675 repositories (March 2026) to over 1,951 repositories and 108+ malicious packages (July 2026), a 6.5x increase, with payloads retrieved via blockchain dead-drops on TRON, Aptos, and BNB Smart Chain.

How PolinRider DPRK Supply-Chain Campaign works

PolinRider is an active, expanding DPRK state-sponsored supply-chain compromise campaign first disclosed in March 2026 by the OpenSourceMalware (OSM) research team and further detailed by Socket's Threat Research Team in July 2026. The campaign is attributed to North Korean threat actors operating within the broader Contagious Interview / Famous Chollima activity cluster (which also encompasses DeceptiveDevelopment, Operation Dream Job, and ClickFake Interview), and shares strong infrastructure and tooling overlaps with the previously tracked TasksJacker campaign, indicating repurposed state-sponsored infrastructure across multiple named operations.

The campaign began no later than December 2025/January 2026 (anti-dated malicious commits were inserted into 7span/sevenspan-maintained repositories as early as January 8, 2026) and has escalated steadily: 675 repositories across 352 owners were confirmed compromised at initial disclosure (March 8, 2026); by April 11-12, 2026 that grew nearly 3x to 1,951 repositories across 1,047 unique owners (~930 individuals, ~117 organizations); by July 2026 Socket confirmed cross-ecosystem expansion representing an overall 6.5x growth in confirmed footprint since the March baseline, with 162 malicious release artifacts identified across 108-111 unique packages and extensions spanning npm, Packagist (10 PHP packages under the sevenspan namespace), Go modules (80+ modules, 61 confirmed distinct malicious versions), and Chrome/browser extensions (1-2 identified).

The attackers use several parallel initial-access vectors. First, they compromise legitimate maintainer GitHub accounts (via account takeover, likely including expired-domain takeover of maintainer emails) and inject malicious commits directly into trusted repositories, frequently rewriting git history and force-pushing with anti-dated timestamps via a Windows batch script (temp_auto_push.bat / config.bat variant) to make the malicious changes appear to predate detection tooling and to bypass pre-commit hooks. Second, they distribute trojanized VS Code extensions and weaponized take-home coding-assessment repositories disguised as legitimate technical interview projects for job candidates (two identified templates: "ShoeVista", an e-commerce MERN-stack test targeting full-stack developers, and "StakingGame", a blockchain deployment test targeting Web3 developers, UUID e9b53a7c-2342-4b15-b02d-bd8b8f6a03f9). These projects embed `.vscode/tasks.json` configuration files with `"runOn": "folderOpen"` triggers that automatically execute Node.js/shell commands (curl | bash patterns) the moment the victim opens the project folder in VS Code, without requiring any further user interaction.

Once triggered, the initial loader — heavily obfuscated JavaScript appended after valid content in legitimate build/config files (postcss.config.js, vite.config.js, eslint.config.js, tailwind config files) — is padded with excessive whitespace to push the malicious code beyond the default editor screen width, hiding it from casual code review. The loader implements a custom "4-layer shuffle-cipher" decoder identified by variant markers `rmcej%otb%` (original variant) or `Cot%3t=shtP` (rotated variant), plus an additional loader signature `_$_1e42`. A second concealment technique embeds JavaScript payloads inside files disguised as WOFF2 web font binaries (fake .woff2 files) to evade static and signature-based security scanning.

The loader's second stage retrieves encrypted payload material from immutable, attacker-controlled transactions recorded on public blockchain/RPC infrastructure — TRON, Aptos, and BNB Smart Chain — functioning as a resilient, takedown-resistant dead-drop C2 channel. Retrieved payloads are decrypted using embedded XOR keys (`2[gWfGj;<:-93Z^C` and `m6:tTh^D)cBz?NM]`) and executed directly via JavaScript `eval()`. This blockchain dead-drop technique is functionally identical to JADESNOW-class loaders and overlaps with prior Lazarus Group / Contagious Interview tradecraft.

The decrypted stage-3 payload is the Beavertail JavaScript loader/stealer, which performs host and OS fingerprinting, browser and system reconnaissance, and exfiltration staging, then conditionally deploys OS-specific follow-on payloads. On Windows, macOS, and Linux targets this results in delivery of InvisibleFerret, a cross-platform backdoor providing keylogging, clipboard hijacking, persistent remote access, browser-stored credential theft, and cryptocurrency wallet file exfiltration, communicating over an attacker C2 channel. Socket's later reporting additionally documents delivery of DEV#POPPER (a remote-access trojan enabling arbitrary command execution) and OmniStealer (an information stealer using socket.io-client for its C2 channel, performing credential theft, browser-data theft, and cryptocurrency wallet exfiltration).

Additional observed C2 and staging infrastructure includes a cluster of Vercel-hosted subdomains used as configuration/bootstrap relays (260120.vercel.app, default-configuration.vercel.app, vscode-settings-bootstrap.vercel.app, vscode-settings-config.vercel.app, vscode-bootstrapper.vercel.app, vscode-load-config.vercel.app), plus onrender.com and the short.gy URL-shortening service used to obscure payload-delivery links.

Because GitHub repository write access and package-registry publishing access are frequently one and the same in the Go module and Packagist ecosystems, a single compromised maintainer GitHub account automatically republished malicious content to downstream package registries without requiring separate registry credentials — a key mechanism behind the campaign's rapid cross-ecosystem expansion in June-July 2026. A concentrated, synchronized modification of repositories maintained by GitHub account Xpos587 (including Xpos587/git2md, Xpos587/markfetch, and Artiffusion-Inc/mirofish) occurred within a narrow window beginning 10:00 UTC on June 23, 2026, coinciding with the spike in malicious Go module releases. Confirmed compromised npm packages include a cluster of fake Tailwind CSS utility packages (tailwindcss-style-animate, tailwind-mainanimation, tailwind-autoanimation, tailwindcss-typography-style, tailwindcss-animate-style, tailwindcss-style-modify) using postinstall hooks to trigger the loader at install time. Confirmed compromised Packagist packages (10, under the sevenspan/7span namespace and affiliated maintainers) include thiio/kubernetes-php-sdk, arsl/optima-class, olc/olc-php, sevenspan/laravel-whatsapp, adxio/twig-hmvc, sevenspan/code-generator, lambda-platform/moqup, roberts/leads, sevenspan/plusinfolab/logstation, and plusinfolab/logstation. Some 7span maintainers performed partial remediation on May 16, 2026 (removing fake font-file payloads), but the underlying injected loaders and Go/Packagist artifacts persisted and continued to expand afterward, with Socket confirming cross-ecosystem compromise as current as July 1, 2026 and the wider campaign still classified as actively expanding at the July 15, 2026 report date underlying this hunt.

No CVE has been assigned; this is a social-engineering-driven and account-takeover-driven supply-chain compromise rather than a software vulnerability, so exploitability is scored ACTIVE based on ongoing, confirmed real-world use rather than PoC public availability.

MITRE ATT&CK techniques used in TL-2026-1435

Collection

T1005 Data from Local System; T1115 Clipboard Data

Defense Evasion

T1027 Obfuscated Files or Information; T1036 Masquerading; T1070 Indicator Removal; T1140 Deobfuscate/Decode Files or Information; T1564 Hide Artifacts

Discovery

T1033 System Owner/User Discovery; T1082 System Information Discovery

Exfiltration

T1041 Exfiltration Over C2 Channel

Execution

T1053 Scheduled Task/Job; T1059 Command and Scripting Interpreter; T1204 User Execution

Credential Access

T1056 Input Capture; T1555 Credentials from Password Stores

Command and Control

T1071 Application Layer Protocol; T1102 Web Service; T1105 Ingress Tool Transfer; T1573 Encrypted Channel

Persistence

T1098 Account Manipulation; T1505 Server Software Component; T1554 Compromise Host Software Binary

Initial Access

T1195 Supply Chain Compromise; T1199 Trusted Relationship; T1566 Phishing

Resource Development

T1583 Acquire Infrastructure; T1584 Compromise Infrastructure; T1585 Establish Accounts; T1586 Compromise Accounts; T1587 Develop Capabilities

Reconnaissance

T1593 Search Open Websites/Domains

Impact

T1657 Financial Theft

Affected products and versions in PolinRider DPRK Supply-Chain Campaign

  • GitHub — Public GitHub repositories
    Vulnerable versions: N/A - account takeover / malicious commit injection, not a software version
  • npm — npm registry packages (Tailwind CSS utility clones and others)
    Vulnerable versions: tailwindcss-style-animate (all published versions); tailwind-mainanimation (all published versions); tailwind-autoanimation (all published versions); tailwindcss-typography-style (all published versions); tailwindcss-animate-style (all published versions); tailwindcss-style-modify (all published versions)
  • Packagist — PHP Composer packages (sevenspan/7span namespace and affiliates)
    Vulnerable versions: thiio/kubernetes-php-sdk; arsl/optima-class; olc/olc-php; sevenspan/laravel-whatsapp; adxio/twig-hmvc; sevenspan/code-generator; lambda-platform/moqup; roberts/leads; plusinfolab/logstation
  • Go — Go modules (proxy.golang.org indexed)
    Vulnerable versions: 80+ Go modules, 61 confirmed distinct malicious versions (module names tracked on Socket's live incident page)
  • Google Chrome — Chrome Web Store extensions
    Vulnerable versions: 1-2 malicious extensions identified
  • Microsoft — Visual Studio Code (trojanized extension / weaponized tasks.json)
    Vulnerable versions: Any developer environment that installed the trojanized VS Code extension or opened a weaponized ShoeVista/StakingGame assessment repository

Remediation for PolinRider DPRK Supply-Chain Campaign

Immediate actions

  • Treat any environment that installed an affected npm, Packagist, Go module, or Chrome extension version as potentially compromised and rebuild from a known-clean state
  • Audit .vscode/tasks.json across all cloned repositories for runOn: folderOpen entries invoking shell/curl commands and remove them before opening projects in VS Code
  • Search build/config files (postcss.config.js, vite.config.js, eslint.config.js, tailwind.config.js) for appended obfuscated JavaScript beyond the visible editor width
  • Scan repositories for suspicious .woff2 files that contain executable JavaScript rather than valid font binaries
  • Review git logs for force-pushes and history rewrites with anti-dated commit timestamps, especially around maintainer account activity anomalies
  • Block outbound connections to known C2 relay domains (*.vercel.app bootstrap subdomains, onrender.com endpoints, short.gy) from developer workstations and CI runners
  • Rotate credentials, browser-stored passwords, and cryptocurrency wallet keys on any system where InvisibleFerret, DEV#POPPER, or OmniStealer execution is suspected

Workarounds

  • Disable automatic VS Code task execution (runOn: folderOpen) globally via VS Code settings (task.allowAutomaticTasks: off) until a repository has been manually reviewed
  • Avoid opening unsolicited take-home coding assessment repositories in an environment with access to production credentials, SSH keys, or cryptocurrency wallets

Longer-term hardening

  • Enforce mandatory MFA and hardware security keys for all GitHub/npm/Packagist/Go module maintainer accounts to prevent account takeover
  • Adopt package-registry publishing tokens scoped independently from source-repository write access to break the repo-compromise-to-registry-publish chain
  • Deploy pre-merge static analysis / diffing tooling that flags whitespace-padded or appended code in configuration files
  • Require code review and CI provenance verification (e.g., Sigstore/SLSA attestation) before merging dependency or config-file changes from external contributors
  • Educate developers, especially those responding to unsolicited recruiting/technical-interview outreach, on the Contagious Interview social-engineering pattern
  • Monitor blockchain RPC egress from developer and CI environments as an anomaly signal, since legitimate build tooling rarely queries TRON/Aptos/BSC endpoints

Weaknesses (CWE) in PolinRider DPRK Supply-Chain Campaign

CWE-506, CWE-829, CWE-494

Timeline of PolinRider DPRK Supply-Chain Campaign

  • Anti-dated malicious commits inserted into 7span/sevenspan-maintained repositories, later discovered to predate all other observed campaign activity.
  • OpenSourceMalware (OSM) publishes initial PolinRider disclosure documenting 675 compromised GitHub repositories across 352 unique owners.
  • 821 new threat reports filed against PolinRider-linked repositories within a two-day window (April 10-11, 2026).
  • OSM confirms 1,951 compromised public GitHub repositories across 1,047 unique owners (~930 individuals, ~117 organizations) — a 2.9x increase in five weeks.
  • OSM classifies the initial GitHub-footprint tracking phase of the campaign as "Finalized" while continuing to monitor for cross-ecosystem spread.
  • 7span maintainers perform partial cleanup, removing malicious fake .woff2 font-file payloads from affected repositories; underlying loader injections and downstream package artifacts persist.
  • Synchronized modification of repositories maintained by GitHub account Xpos587 (git2md, markfetch, Artiffusion-Inc/mirofish) beginning 10:00 UTC, coinciding with a spike in malicious Go module releases.
  • Socket Threat Research Team publishes findings confirming cross-ecosystem compromise across npm, Packagist, Go modules, and Chrome extensions — 162 malicious release artifacts across 108-111 unique packages.
  • Follow-up reporting (Malpedia/OSM) confirms PolinRider's overall footprint has grown 6.5x since the March 2026 baseline disclosure, indicating the campaign remains active and escalating.

Sources cited for PolinRider DPRK Supply-Chain Campaign

Threats related to PolinRider DPRK Supply-Chain Campaign

Detection coverage for TL-2026-1435

As of 2026-07-17, Threadlinqs Intelligence publishes 9 detection rule(s) for TL-2026-1435 across Splunk SPL, Microsoft KQL and Sigma, covering 49 indicator(s) of compromise. The whole corpus is readable without an account; a free account unlocks full detection query text in Splunk SPL, Microsoft KQL and Sigma; paid tiers add raw indicator values, correlation and the MCP server. Threadlinqs MCP server · View plans.

Further reading

Threadlinqs Intelligence — Real-Time Threat Detection Platform

[ 0 threats ] [ 0 det ] [ CRIT: 0 ] [ HIGH: 0 ]
// threat_feed
$ sort --newest
Showing all threats

Latest Threats