Open source PolinRider malware scanner and cleaner

Under attack by PolinRider?
Find the malware and remove it safely.

One open source program checks your computer, your GitHub account and your organisation for PolinRider malware, and helps you remove it safely. It is free, runs on macOS, Linux and Windows, and changes nothing until you type yes.

Last updated:

What is PolinRider?

PolinRider is malware that hides inside software projects. Once it runs on a developer's computer, it steals their passwords and tokens, adds itself to the code they work on and pushes that code with their own account, so the next person who opens the project is hit too.

Read more about PolinRider

How it works

  1. Install it

    Choose your system. Run only its commands.

    macOS

    brew install meSingh/tap/polinrider-scanner

    Linux

    brew install meSingh/tap/polinrider-scanner

    On Debian or Ubuntu you can use the .deb from the latest release instead.

    Windows

    scoop bucket add mesingh https://github.com/meSingh/scoop-bucket
    scoop install polinrider-scanner
  2. Run it and say what to check

    polinrider

    It asks What should I check? Type computer, or account or organization for GitHub. Answers are words, never numbers.

  3. It scans. Nothing changes.

    It only reads, and shows each check as it runs. A GitHub check copies every repository first, so the evidence is kept before anything is touched.

  4. You get one of three answers

    Clean

    None of today's signs found. Not proof it was never there: if you had a reason to check, change your passwords and tokens anyway.

    Review

    Something a normal project can also have. Read each [review] line and ask: did I put this here? If not, treat it as found.

    Compromised

    Something only the malware leaves. It lists what it found and the exact command for each next step. Go to step 5.

    If it says it could not run, it tells you why, and it found nothing either way. Is it PolinRider or a false alarm?

  5. If it is compromised, these are your choices, in this order

    The order is fixed. If you clean GitHub while an infected computer still holds a valid token, the malware pushes itself back within minutes. Why

    This computer

    Type yes and every confirmed file moves into a quarantine folder, with a list of how to put each one back. Nothing is deleted. A startup entry, a crontab line or a shell startup file is never changed for you: it prints the command that removes it.

    If it says This machine cannot be trusted until it is rebuilt, quarantine contains it but only a clean reinstall makes it safe. Checking a computer

    Your passwords and tokens

    Change every one, from a different computer you trust: GitHub tokens and SSH keys, npm and cloud tokens, and the passwords saved in your browser.

    Your repositories

    First, every repository is copied into an evidence folder. Then each infected repository gets one of these five. When restore is offered, pick it.

    FixWhat it doesHistory rewritten?Can you undo it?When to pick it
    Restoretype restoreRecommendedPuts each branch back where GitHub's own push record says it was before the attack. Nothing is edited.No. Each branch moves back to an earlier commit.A copy from before is kept.Whenever it is offered: GitHub's record shows a clean state, and that commit is checked clean first.
    Removetype removeAdds one commit per branch that takes the malware out.No. The malware stays in older commits.Easy: it is one commit.There is no clean state to go back to, and the history must stay as it is.
    Erasetype eraseRewrites historyTakes the malware out of every commit and pushes the history back.Yes. Every commit ID changes, and every existing copy must be updated; it shows how.A copy from before is kept.There is no clean state to go back to, and the malware must be in no commit at all.
    Archivetype archivePuts a large infected notice at the top of the README, rewrites the description and makes the repository read-only.No. Nothing is removed.A copy from before is kept.A repository nobody uses.
    Skiptype skipLeaves it as it is for now.No.Nothing changed.You want to decide later.

    Each fix shows exactly what would change on GitHub and pushes only after you type yes. Afterwards, delete every local copy and clone it again. A GitHub account · An organisation

    Every future push

    Add the scanner to your CI, so a reinfection is caught on the next push. Every future push

Before you run it

No risk in running it

It is built for a computer that may already be infected, run by someone under stress. So it looks first, shows you everything and changes only what you agree to.

What it cannot promise: signatures change, so a clean result is about today's signs. Change your passwords anyway if you had a reason to check. The full disclaimer

  1. It only looks until you type yesEvery check reads. Nothing on your computer or on GitHub changes until you answer yes.
  2. Nothing is deletedConfirmed files move to a quarantine folder, with a list of how to put each one back.
  3. You see every change firstEach fix on GitHub is shown as a dry run of exactly what would change, before you agree.
  4. It never overwrites newer workEvery push it makes is refused if someone pushed after the check, so nothing new is lost.

Check it, do not take our word

Why you can trust it

Verify it yourself

Every week's indicator review is public: read them all.

  1. Guide

    How to get rid of PolinRider: a developer's guide

    Think PolinRider is on your computer or in your repositories? How to check with polinrider, clean up in the right order and keep it from coming back.

    10 min read

  2. Announcement

    PolinRider Scanner 3.0: polinrider-cleaner has a new name and a new home

    The project is now polinrider-scanner, at polinriderscanner.com. The program is the same; the package names and how you verify old releases change.

    4 min read

  3. Indicator review15 indicators added this week
  4. Worth reading · OpenSourceMalware

    Earliest Known PolinRider Malware Found in 2025 npm Packages

    Nine npm versions published in May 2025 after an account takeover carry the PolinRider payload, eight months before the first known victims.