PolinRider
PolinRider is the cluster where nobody is tricked. A legitimate repository has malicious code written into configuration files developers rarely read, such as postcss.config.mjs, tailwind.config.js, eslint.config.mjs and .vscode/tasks.json, and the project builds and runs as before.
OpenSourceMalware reports more than 2,400 affected repositories across over a thousand owners, almost all of them victims of a compromised account, a merged malicious pull request or a tampered dependency. The list is published as a hunting aid and carries that warning on every page.
- Named individuals
- None profiled on this site yet
- Fabricated personas
- None reconstructed under this tag
- Indicators
- 151 in the searchable index
- Hunts
- 1 in the hunt library
How it differs from the other clusters here
The payload is the one Contagious Interview delivers, reported by OpenSourceMalware as operationally merged; the difference is delivery.
Removing the lure removes every social signal: no recruiter to check, no interview, no application to correlate.
A developer pulling a tampered dependency is compromised without being contacted.
Command and control is reported to read encrypted instructions from TRON and Aptos wallet addresses, which cannot be seized or sinkholed.
This resembles the EtherHiding tracker and OtterCookie's reported smart-contract reads, but the three are related in approach, not confirmed as one technique.
Compare Lazarus GroupAPT38KimsukyRGB (Reconnaissance General Bureau)Remote Worker Fraud / Contagious InterviewAndarielAPT37KonniMoonstone Sleet
What a defender would see
The observable is a configuration file changing when nothing about the project's configuration did, such as postcss.config.mjs or tailwind.config.js in an unrelated pull request.
.vscode/tasks.json executes on folder open, so it belongs in review scope.
On the dependency side, lockfile discipline and review of transitive updates do more than any endpoint control.
The DPRK Repo Scanner offers a remote GitHub search and a local signature scan of a checkout; treat results as leads.
An affected repository is far more likely a victim than a participant, and nothing on that page accuses its owner.
Hunts for this cluster
Indicators
The 151 indicators the index holds under this cluster. The complete index is on Remote Workers.
| Indicator | Type | Persona and cluster | Report date | Sources |
|---|
| Indicator | Type | Persona and cluster | Report date | Sources |
|---|---|---|---|---|
260120.vercel.app |
domain CURATED | PolinRider Contagious Interview | 2026-04-12 | 2 |
default-configuration.vercel.app |
domain CURATED | PolinRider Contagious Interview | 2026-04-12 | 2 |
0x1eef0849eda15d87f64e51c73c8442cf3c8bcef3 |
wallet address MATCHED IN SOURCE | PolinRider | 2026-11-04 | 1 |
103.179.143.219 fixed line |
ip address MATCHED IN SOURCE | PolinRider | 2026-11-04 | 1 |
95.135.181.151 fixed line |
ip address MATCHED IN SOURCE | PolinRider | 2026-11-04 | 2 |
85.239.60.213 data centre |
ip address MATCHED IN SOURCE | Lazarus Group Contagious Interview PolinRider | 2025-11-13 | 2 |
85.239.62.36 data centre |
ip address MATCHED IN SOURCE | Lazarus Group Contagious Interview PolinRider | 2025-11-13 | 3 |
c9dab995cf61a066db149c8d5d4ce171fb9d20d246994a1fa4f27a5885088bbb |
file hash MATCHED IN SOURCE | PolinRider | 2026-10-30 | 1 |
136.0.9.8 data centre |
ip address MATCHED IN SOURCE | PolinRider Contagious Interview Lazarus Group | 2025-10-27 | 6 |
166.88.4.2 data centre |
ip address MATCHED IN SOURCE | PolinRider Contagious Interview Lazarus Group | 2025-10-27 | 6 |
188.43.33.249 fixed line |
ip address MATCHED IN SOURCE | IT Worker Fraud PolinRider Contagious Interview | 2025-04-23 | 5 |
23.27.202.27 data centre |
ip address MATCHED IN SOURCE | Contagious Interview PolinRider Lazarus Group | 2025-10-27 | 11 |
02b7e072c51ac6f7037c2fd4727fcdb06bee6f74cc1af182f7180d8b5e904d63 |
file hash MATCHED IN SOURCE | PolinRider | 2026-09-30 | 1 |
181.214.149.147 data centre |
ip address MATCHED IN SOURCE | NullReceiver PolinRider | 2026-09-25 | 2 |
181.214.149.148 data centre |
ip address MATCHED IN SOURCE | NullReceiver PolinRider | 2026-09-25 | 2 |
198.105.127.210 data centre |
ip address MATCHED IN SOURCE | Contagious Interview PolinRider | 2025-12-08 | 9 |
23.27.20.187 data centre |
ip address MATCHED IN SOURCE | NullReceiver PolinRider | 2026-09-25 | 2 |
3be09f8c0a95f993a0ee99e08dca08eb15e1c0abeaf90b190a76e842028e552b |
file hash MATCHED IN SOURCE | PolinRider | 2026-09-30 | 1 |
45.137.198.133 data centre |
ip address MATCHED IN SOURCE | PolinRider | 2026-09-30 | 1 |
5cbcb8e11f6152c80cf88f752bcf9cb1077a88eac5e4eb02471f093248db01ac |
file hash MATCHED IN SOURCE | PolinRider | 2026-09-30 | 1 |
84a3f1bd81ae4780776c93f9a5ec1cb0d7d6fb613f4a104cceaa93568bdbd0ab |
file hash MATCHED IN SOURCE | PolinRider | 2026-09-30 | 1 |
f6d9f2fbf8091f431a802c4a0b8a5661278ee3f0854fb9040a0702e894b2309e |
file hash MATCHED IN SOURCE | PolinRider | 2026-09-30 | 1 |
1a21bad1df69b51efebfd2fae849ac27722b0dfac7b1cb459cf81d38b36f9705 |
file hash MATCHED IN SOURCE | PolinRider | 2026-09-26 | 1 |
3b572a613f5013a64e1877dfed3873f2bcbd52e5259b199d41e02c33840abbcb |
file hash MATCHED IN SOURCE | PolinRider | 2026-09-26 | 1 |
6200054e0ea8575c3af37e4da10e23249bf0a17d1d6843ecc81ee35af2f7d1f2 |
file hash MATCHED IN SOURCE | PolinRider | 2026-09-26 | 1 |
90a3875ff84a53473107a03cec6ad19636da0cc0eccb02c036d03b8f2a5dff28 |
file hash MATCHED IN SOURCE | PolinRider | 2026-09-26 | 1 |
91e334655d31f84963e6b9369d41698f51b00d7a203cf314ceba01780e6f337c |
file hash MATCHED IN SOURCE | PolinRider | 2026-09-26 | 1 |
fbf0e36dd7eb1e70fc4868a8d0d0cd8f6c80753241cd88a3518f40e9a67d232e |
file hash MATCHED IN SOURCE | PolinRider | 2026-09-26 | 1 |
515a53291d25d229e1f9fa72e66407e1cfd7e77c91478400b24d5185af68531a |
file hash MATCHED IN SOURCE | PolinRider | 2026-09-21 | 1 |
@vite-ln/build-ts@5.15.10 Taken down |
npm package BULK DATASET | PolinRider Contagious Interview | 2026-07-17 | 1 |
@vite-mcp/vite-type@6.44.1 Taken down |
npm package BULK DATASET | PolinRider Contagious Interview | 2026-07-17 | 1 |
@vite-pro/vite-ui@2.5.10 Taken down |
npm package BULK DATASET | PolinRider Contagious Interview | 2026-07-17 | 1 |
@vite-tab/tab@3.15.10 Taken down |
npm package BULK DATASET | PolinRider Contagious Interview | 2026-07-17 | 1 |
@vite-ts/vite-ui@6.44.1 Taken down |
npm package BULK DATASET | PolinRider Contagious Interview | 2026-07-17 | 1 |
@vitets/vite-ts@1.5.10 Taken down |
npm package BULK DATASET | PolinRider Contagious Interview | 2026-07-17 | 1 |
clsx-tailwind@1.0.1 Taken down |
npm package BULK DATASET | PolinRider Contagious Interview | 2026-07-17 | 1 |
rate-limit-flexible@1.0.1 Taken down |
npm package BULK DATASET | PolinRider Contagious Interview | 2026-07-17 | 1 |
rate-limit-flexible@1.0.2 Taken down |
npm package BULK DATASET | PolinRider Contagious Interview | 2026-07-17 | 1 |
rate-limits-flexible@1.0.1 Taken down |
npm package BULK DATASET | PolinRider Contagious Interview | 2026-07-17 | 1 |
sass-format@1.0.1 Taken down |
npm package BULK DATASET | PolinRider Contagious Interview | 2026-07-17 | 1 |
sass-formats@1.0.2 Taken down |
npm package BULK DATASET | PolinRider Contagious Interview | 2026-07-17 | 1 |
sass-formats@1.0.3 Taken down |
npm package BULK DATASET | PolinRider Contagious Interview | 2026-07-17 | 1 |
sass-formats@1.0.4 Taken down |
npm package BULK DATASET | PolinRider Contagious Interview | 2026-07-17 | 1 |
sass-formats@1.0.5 Taken down |
npm package BULK DATASET | PolinRider Contagious Interview | 2026-07-17 | 1 |
tailwindcss-animates-kit@1.0.1 Taken down |
npm package BULK DATASET | PolinRider Contagious Interview | 2026-07-17 | 1 |
tailwindcss-animatics@1.0.1 Taken down |
npm package BULK DATASET | PolinRider Contagious Interview | 2026-07-17 | 1 |
tailwindcss-merge@1.0.1 Taken down |
npm package BULK DATASET | PolinRider Contagious Interview | 2026-07-17 | 1 |
tailwindcss-merge@1.0.2 Taken down |
npm package BULK DATASET | PolinRider Contagious Interview | 2026-07-17 | 1 |
tailwindcss-merge@1.0.3 Taken down |
npm package BULK DATASET | PolinRider Contagious Interview | 2026-07-17 | 1 |
tailwindcss-merge@1.0.4 Taken down |
npm package BULK DATASET | PolinRider Contagious Interview | 2026-07-17 | 1 |
Where the evidence comes from
Further reading
Published research on this cluster. None of it is this site’s work.
-
PolinRider
The primary source for the campaign and the origin of the compromised-repository list this site republishes. Read it first: it carries the injection signatures, the config files targeted, and the per-snapshot repository counts.
-
North Korea's Contagious Interview Campaign Escalates: 338 Malicious npm Packages, 50,000 Downloads
The registry side of the same problem. Useful here because the npm packages in this site's ruleset for this campaign impersonate Tailwind and PostCSS utilities, which is what makes a tampered config file look unremarkable.
-
Lazarus-Linked npm Malware Masquerades as Rollup Polyfills
A worked example of build tooling used as the hiding place rather than the target. Read it for what a malicious package pretending to be part of the toolchain actually looks like in a project tree.