VDB

GCVE-110-OSM-2026-14273

GCVE-110-OSM-2026-14273
Advisory PublishedCVSS 9.6/10
Vulnetix · Advisory published October 28, 2026
This is a legitimate repository that was compromised twice, by two unrelated campaigns. PolinRider (DPRK) came first: a force-push rewrote the history of the main branch so that a blockchain-based loader was hidden in `vite.config.js`, with the commit dates kept to look like the original commit. GhostAction came later: it added workflows that contain its server address, and a credential stealer disguised as a font file that starts through a hidden VS Code task and sets up a scheduled job that runs commands from the attacker's server every five minutes. Anyone who ran a build or dev server in the project after the PolinRider push should treat that machine as exposed to remotely delivered code, and anyone who opened it in VS Code with automatic tasks allowed after the GhostAction font was added should treat that machine's credentials as compromised. # PolinRider payloads Every PolinRider change was force-pushed by a helper script, `temp_auto_push.bat`, that copies the previous commit's author, date and message, amends the commit and force-pushes the branch, so each rewritten commit looks as old as the one it replaced. The repository's `.gitignore` is changed to hide the names of that script and its companion files. ## Payload 1: loader hidden in a build configuration file Malicious payload found in: `vite.config.js` JavaScript appended to the last line of the file after a run of about 1,690 spaces, with a `createRequire` import added at the top. This is the older TRON and Aptos loader. It starts from a hard-coded TRON wallet, reads its newest outgoing transaction, and uses a hidden note in it as the id of a BNB Smart Chain transaction whose data field holds the next stage. If TRON cannot be reached it falls back to an Aptos account. The next stage is decoded with a built-in key and run, once in the current process and once in a hidden `node` process. ## Payload 2: ignore-list fingerprint Malicious payload found in: `.gitignore` Three lines were added that hide the helper script and its companion files from `git status`. # GhostAction payloads ## Payload 3: workflows Malicious payload found in: `.github/workflows/github_actions_security.yml`, `.github/workflows/lint.yml` and `.github/workflows/repo-health.yml` Every version contains the GhostAction server address 193[.]32[.]204[.]199. `lint.yml` also carries the batch tag `c=auto_`, and `github_actions_security.yml` carries the markers of the 2025 GhostAction workflow (`Github Actions Security`, `send-secrets`, `Prepare Cache Busting`). Four commits titled "Trigger security scan" append a comment to `README.md` to start that workflow. ## Payload 4: credential stealer disguised as a font file Malicious payload found in: `public/fonts/fa-solid-400.woff2` Despite the `.woff2` extension this is a short, unobfuscated Node.js script. When run it reads the first 3,000 bytes of `~/.aws/credentials`, `~/.pypirc`, `~/.npmrc`, `~/.git-credentials`, `~/.netrc`, `~/.claude/.credentials.json`, `~/.gemini/oauth_creds.json` and `~/.kube/config`, and the SSH private keys `id_rsa` and `id_ed25519` in full. It runs a recursive `grep` of the home directory for AWS, Anthropic, GitHub, npm and PyPI token patterns and collects environment variables whose names begin with `AWS_`, `ANTHROPIC`, `OPENAI`, `HF_TOKEN`, `GITHUB_TOKEN`, `_API_KEY` or `_TOKEN`. Everything is sent with `curl` over plain HTTP to 193[.]32[.]204[.]199 on port 8080, with a batch tag in the query string. It then installs a crontab entry, marked `#ghc2`, that every five minutes downloads a script from the same server at a path keyed by the machine's hostname and pipes it to `bash`, which gives the operator remote command execution. The file does nothing on its own: it runs when the VS Code task below, or `node`, executes it. ## Payload 5: VS Code launcher Malicious payload found in: `.vscode/tasks.json` Defines a hidden shell task labelled `eslint-check` that runs `node ./public/fonts/fa-solid-400.woff2` with its output suppressed. It is set to run automatically when the folder is opened (`runOptions.runOn: folderOpen`), so it starts as soon as the workspace is trusted and automatic tasks are allowed in VS Code. The task sends nothing and installs nothing itself.

Weaknesses (CWE)

CWE-506Embedded Malicious Code

Risk Scores

CVSS 3.1
9.6/10
Critical · CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:H/I:H/A:H

Affected Products

VendorProductVersionsPlatforms
unknownall (affected)—

Browse GCVE Records

816 records in the GCVE database · Updated November 2, 2026

No matching records found.

Explore Further

Investigate this vulnerability in the interactive console or download the raw GCVE record.

$ Console Community · 50/day Open console ›