Latest
AI’s Black Box Is Getting a Window. Somebody Still Has to Look Through It“It Stars C. Thomas Howell. No.” Why AI Gets Stuck in a LoopShould You Query or Self-Publish Your Memoir If You’re Not Famous?Judge the Writing, Not the Tool: What the AI Pile-Ons Get WrongThiago Ferreira: Thinkers, Not DoersYana Semova: Let AI Do the AdminLisa Hamilton-Smith: Unstoppable, AI AssistedSuperman Day: The $130 Contract Behind the CapeRaymond Chandler Day: The Novelist Who Started at FiftyJohn Steinbeck Day: The Reporter Who Wrote the NovelInternational Translation Day: The Invisible AuthorsMaya Angelou Day: The Dare That Became a MemoirNational Podcast Day: The Interview Is the Raw MaterialKurt Vonnegut Day: The Book That Took Twenty YearsTell a Fairy Tale Day: The Stories Everybody EditedHarry Potter’s Birthday: The Book Twelve Publishers MissedHarper Lee Day: The Draft Her Editor Saw ThroughGene Roddenberry Day: The Pilot Who Pitched the StarsRoald Dahl Day: Six Pencils and a Grudge Against Grown-UpsInternational Literacy Day: The Readers Books LoseJack Kerouac Day: The Scroll and the Last AddressElmore Leonard Day: Leave Out the Part Readers SkipEncourage a Young Writer Day: The Adult Who Read the PagesBack to the Future Day: The Script Where Everything Pays OffNational Library Lovers Month: The Building a Town Pays ForAlice’s Day: The Story Told on a Rowing BoatRobert E. Howard Day: The Texan Who Built ConanStephen King Day: The Daily Two ThousandEmily Dickinson Day: The Poems in the DrawerIan Fleming Day: Two Thousand Words a MorningFyodor Dostoevsky Day: The Novels Written Against the ClockZora Neale Hurston Day: The Ear She TrainedF. Scott Fitzgerald Day: The Masterpiece That FloppedElmore Leonard’s 10 Rules of Writing, and Which Ones I BreakShould Your Novel Have a Prologue? When a Cold Open Earns Its Place“People Who Use AI Deserve to Be Castrated”: When the Sentence Outruns the CrimeHow Famous Memoirs Were Really Written: What the Collaborators DidThe Bell JarOpen: An AutobiographyBeneath a Scarlet SkyFlorida RoadkillCampus BattlefieldLifeThe Phone Book: The Curious History of the Book That Everyone Uses But No One ReadsThe Sage of SagittariusDid I Ever Tell You This?: A MemoirPa’anAmerican SoldierIt Doesn’t Take a HeroMake Your Bed: Little Things That Can Change Your Life…And Maybe the World

The Morning I Found a Plugin I Never Installed

TL;DR: Malware landed on my site through a plugin update I trusted, and the scanner killed it in a minute. The scare was never the payload; it was realizing my update channels were a door I had left unlocked for years. That morning turned into a full audit of every plugin, theme, and vendor my sites depend on. This article covers what the audit looked like and what it changed.

One morning I found malware on my website, delivered through a channel I trusted.

I told that story in full in My Own Site Got Hit: Anatomy of a WordPress Supply-Chain Attack, including the two days of forensics and the trail that ended at a plugin vendor’s catalog sold to an attacker.

The short version: my host’s scanner caught the payload the instant it landed, deleting it took a minute, and understanding how it arrived took two days. Total damage: zero. By the standards of website compromises, that’s the best possible outcome, and that’s why I can tell the story calmly.

The incident was over in two days. What it started took weeks, and it changed how I look at every piece of software on my sites.

What was scary about finding a plugin nobody installed?

The malware itself wasn’t the frightening part. Malware is weather. If you run anything on the public internet, attacks arrive constantly, automatically, indifferently. My logs show thousands of probes a day, and yours do too, whether you look or not.

The frightening part came later, staring at that folder, when I asked the obvious question: how many ways could something like this get in?

I’ve spent 33 years in technology, a good chunk of it responsible for keeping large systems running, so I made a list. It was a long list. The theme I was running, built by people I’d never met, updated on their schedule. Dozens of plugins, each one a channel that pushes code onto my server whenever its author publishes an update. The page builder with its own ecosystem of addons.

The theme I was running, built by people I had never met, updated on their schedule.
Share on X

Every one of these is a trusted delivery pipeline into my website, and I didn’t choose most of the people I was trusting.

That’s what the security industry calls the supply chain, and once you see it, you can’t unsee it. I’d locked my front door carefully. Meanwhile, forty vendors held keys to the back.

Every one of these is a trusted delivery pipeline into my website, and I didn’t choose most of the people I was trusting.

Run the same inventory on your own site and the list gets uncomfortable fast. Your theme updates when its author says so. Every plugin updates when its author says so. Your page builder. Your forms tool. Your SEO plugin. Your gallery. Each one is a standing arrangement in which code you’ve never read arrives on your server and runs with full permissions.

Any one of those authors could get compromised. Or sell the plugin to someone with worse intentions. Or abandon it to whoever claims the name later. Each of those converts a trusted channel into a delivery vehicle. None of that requires anyone to attack you. You’re just downstream.

That arrangement is worse than any attacker. Plugins change hands, and the thousands of sites running them usually hear nothing about it. The site owner carries all the risk of a sale they never agreed to and never heard about, and the marketplaces act as though that’s the owner’s problem.

Why does a hidden plugin matter more than lost traffic?

This is what made it personal for me. I’m a service provider. My website has a different job from a store shoveling widgets, where traffic volume is everything.

It’s my beacon on the internet. It’s where I live professionally. The people who matter don’t arrive by the thousands. They arrive a few at a time, having heard my name somewhere, deciding whether to trust me with a significant project.

For a business like that, the website has to be excellent for the person standing in front of it: fast, credible, professional, and above all trustworthy. I’ve written elsewhere about why the website matters more in the AI era, and about what building on WordPress involves once the brochure promises wear off. Now imagine that person arrives the week my site is serving spam pharmacy links from a hidden injection, or redirecting to a scam, or simply gone while I rebuild it.

Everyone understands ordinary downtime. A major cloud provider hiccups and half the internet disappears for an afternoon; visitors shrug and come back tomorrow. Outages are weather too, and people forgive weather. A compromise is different in kind, because a compromised site doesn’t just go dark. It impersonates you. It uses your name and your reputation to serve someone else’s garbage to the exact people you most needed to impress. People forgive downtime. They remember impersonation.

How do you audit WordPress plugins after a scare?

So I went down the rabbit hole, and I went down it properly.

Over the following weeks I opened up everything running on my sites and asked each piece the same questions. What do you do? Who maintains you? What happens on my server when your author publishes an update? What would it cost me to remove you?

The answers were educational, and some of them were ugly.

I found a commercial theme that turned out to be an assembly of mismatched parts, shipping code to every visitor for features no page on my site ever used. I found a page builder whose assumptions had wrapped themselves around dozens of my pages, so deeply that leaving it meant rebuilding every page that touched it. I found plugins that did the one thing I wanted plus fifteen things I didn’t, all of it loading on every request.

I found excellent software maintained by exactly one person, and thought hard about what happens to my business the day that one person stops.

The process itself was mundane, so anyone can do a version of it. For each piece of software I asked who publishes it, when it was last updated, how its support threads read, and what its changelog says about momentum.

Ten minutes per plugin, no code reading required. The pattern that emerged surprised me: the risk wasn’t concentrated in obscure plugins from unknown authors.

Some of the heaviest, most tangled, most difficult-to-remove software on my sites came from the biggest names in the WordPress ecosystem, installed years ago because everyone else used them too. Popularity had stood in for evaluation, and popularity only measures marketing. None of those discoveries were the breach. The breach was an event, handled in an afternoon. The audit revealed conditions, and conditions are what determine whether the next event is an afternoon or a catastrophe.

What this series covers

That audit became this series of articles. Each one takes a piece of what I found and turns it into something you can act on without being a developer:

Why so many commercial themes are Frankenstein monsters of repackaged parts, and how to evaluate a theme by what it does instead of what it includes.

Why page builders are the hardest relationship to leave, and what it took to get out of two of them. How to put your plugin stack on a diet without losing capability. Why the number of people maintaining your software matters as much as the software itself.

How the supply chain delivers attacks through the very update mechanisms you depend on, and not just in software, since these days even a cable can carry a hostile computer inside it. And finally, why security is a posture you hold every day.

My take

Popularity stood in for evaluation on my sites for years. That habit was the bigger problem. The malware died in a minute. The conditions that let it in took weeks to find. Audit every plugin and theme you run. Ask who maintains it, when it last updated, how its support threads read and what it would cost to remove. Ten minutes per plugin, no code required. Do it before your next event turns into a catastrophe.

The takeaway before the series

Take one thing away: your website’s biggest risks arrive through channels you invited. The updates, themes, plugins, and tools you trusted enough to install are how most of this gets in, and an attacker forcing the front door is the rarer case. A modern website is built entirely of other people’s work, mine included, so you can’t stop trusting. Trust deliberately. Skipping ten minutes of checking per plugin is a gamble with a reputation that took years to build, and I won’t take that bet on my own sites.

Know what’s running, know who maintains it, know what it would cost to remove, and keep something watching for the day one of those trusted channels betrays you. And keep real backups, because every other defense can fail and that one still saves you. If you’d rather have someone who has been through this handle it, that is work I do.

I got the easy version of the lesson. The folder appeared, the scanners caught it, and the worst consequence was a series of articles. The next site owner may not get the easy version. The rest of this series is about making sure that when your turn comes, and on a long enough timeline it comes for everyone, your story is as boring as mine.

From the author
Family Cybersecurity by Richard Lowe

Family Cybersecurity
One trusted update was all it took. Family Cybersecurity is my book on protecting the people who live in your house, and it starts with a ransomware call in the middle of the night.

Frequently Asked Questions

How does malware get onto a WordPress site through a plugin?
Attackers compromise the vendor’s side of the update channel: they buy or breach a plugin’s catalog listing, poison an update, and every site with that plugin installs the payload automatically. Your site installs it for them. That’s how it reached mine, through a plugin I’d trusted for years.
What should you audit after a WordPress malware scare?
Every update channel, because the infected file is only the first item on the list. List each plugin and theme, who maintains it, when it changed hands, and whether you still need it. The payload is the symptom; the channel it rode in on is the disease.
Can a malware scanner fully protect a WordPress site?
A scanner catches payloads after they land. That saved me a serious cleanup. What it can’t do is shrink the number of doors. Fewer plugins, fewer vendors, and fewer automated channels reduce what there’s to scan for in the first place.
How do you know if a WordPress plugin vendor has been sold?
Mostly you don’t. Watch for changelog tone shifts, new ownership notices buried in release notes, and plugins that suddenly bundle unrelated features. A sale of the catalog is a sale of the road into your site.

About the Author
Richard Lowe, professional ghostwriter

Richard Lowe is a professional ghostwriter and author with 113+ books authored and 54+ ghostwritten. Before writing full time he spent 33 years in enterprise technology, including 20 years as Director of Computer Operations and Technical Services at Trader Joe's. He writes nonfiction, fiction and memoir, and works with executives and experts on books that build authority.

More about Richard Lowe →

Disclaimer

The views and opinions expressed in this blog post are solely those of Richard Lowe and are based on personal experience and research. This content is for informational purposes only and should not be construed as professional legal, financial, accounting, or business advice. Always consult with qualified professionals before making important business or legal decisions. Richard Lowe is not a lawyer, accountant, or licensed professional advisor, and this content does not establish any professional relationship.

0 comments

No comments yet. Yours can be the first.

Was this useful?

Leave a comment