PushWarden docs

What it covers

PushWarden began as a hunter for PolinRider. Other campaigns now go after developers in much the same ways, so it also looks for the tricks they share. This page says, family by family, what it checks, what it only reports, and what it cannot see. The full list of rules is on What it detects.

Last reviewed: 15 October 2026. Campaigns move fast, so check the sources at the bottom for the newest details.

Family by family

Family How it reaches you What PushWarden checks What it does
PolinRider Code appended to config files in repositories and packages, a fake font, an editor task that runs when a folder opens, history rewriting Signatures, padding, fake fonts, tasks, propagation scripts, blockchain lookups, command servers, git history Quarantines the file; Pro removes only the payload
Shai-Hulud (npm worm) An install script in a package runs a file that steals tokens and republishes packages The worm’s file names and the planted workflow, install scripts that run them, repositories in your account named like its data dumps Reports; never moves package.json
GlassWorm Code hidden in characters that draw nothing Long runs of invisible characters, critical when the same file decodes and runs text Quarantines the file
s1ngularity (Nx) An install script starts your own AI coding tool with its safety checks off and asks it to find secrets Install scripts that start claude, gemini, codex and similar with the flags that skip confirmation Reports
Contagious Interview A fake job-interview project with a keylogger and a screen grabber The dependency pair that only appears together in those projects Reports
Mini Shai-Hulud and AI assistant hooks A hook or task that runs a hidden script when you open the folder in an editor or AI tool .vscode/tasks.json, .claude/settings.json hooks, MCP files, rules files such as CLAUDE.md, text hidden in invisible characters Reports; autorun tasks that download code are quarantined
Dropper tricks in git and CI Settings in .git/config, a git hook, a dev container or a workflow that runs a command Git settings that run code, hooks, dev container commands, workflows that send out all secrets or install a runner Reports; hooks and tasks that download code are quarantined

What gets acted on and what only gets reported

PushWarden acts by itself only when code runs on its own and the evidence is strong. A warning about a pull request trigger or a rules file is for you to read, not something it moves or deletes. Words inside a string or comment are never treated as a call, and ordinary settings such as less, code --wait or git-lfs are left alone.

Deeper checks

  • pushwarden scan --history reads every file version ever committed, so a payload that a later commit hid but a fresh clone still downloads is found. It prints the git filter-repo command for you to review and never rewrites history itself.
  • A file too large to read whole still has its last megabyte checked, because a payload is added to the end.
  • pushwarden github-clean fixes infected branches with a normal commit on top. It does not force-push, because PolinRider itself rewrites history and a force-push can lose a teammate’s work.

What it cannot see

PushWarden is not a replacement for a managed security service or a package firewall.

  • It does not sit in front of npm install to block a bad package before it arrives. Tools that watch the package registry do that. PushWarden finds the effects on your machine and in your code.
  • It does not watch what every program does all day. A managed detection service with analysts does that. PushWarden checks running processes and connections against known markers.
  • It cannot know about a campaign before its markers are published. The tricks it checks for catch many new variants, and the indicator list updates without a new release.
  • If someone else rewrites a repository’s history, PushWarden can find the damage in your copy and in repositories you own, but it cannot stop them.

Keeping up

New findings are added as data first: names, hosts, file names and patterns live in the indicator file, so pushwarden update brings them without a new version. A new campaign gets a harmless sample in the test suite, a rule, a clean sample that must stay clean, and a run over real projects to check for false alarms before it ships.

Sources