WordPress made publishing easy. Plugins made it flexible. That same flexibility is why vulnerabilities show up so often in real incidents: not because core is uniquely fragile, but because sites run a lot of third-party code and leave known gaps open.
This is a practical map of common causes and what to do about them. Live lookups: WordPress vulnerabilities database. Hardening path: security hardening guide.

Signs a site may already be compromised
- Cannot log in, or passwords stop working
- Content, menus, or users changed without a known editor
- Random redirects or spam injections
- Browser or Search Console warnings about hacking or phishing
- Host tickets about malware, spam, or odd CPU/mail traffic
- Security scanner findings you cannot explain
Cleanup when those show up: WordPress malware removal.
Major causes (and what actually helps)
Outdated WordPress core
Old core releases miss security fixes that are already public. Enable automatic updates for minor/security releases where you can, and schedule major updates after a quick staging check.
Fix: Keep core current. Do not run “vintage” versions because a plugin “likes” them. Replace that plugin instead.
Weak or stolen credentials
Strong code does not save a reused admin password. Brute-force and credential stuffing still work on boring blogs.
Fix: Unique passwords, 2FA, few administrators, and the habits in the login security guide. Use SFTP/SSH keys where possible instead of shared FTP passwords.

Weak hosting and old PHP
Shared neighbors, neglected servers, and unsupported PHP versions expand risk outside the WordPress admin. Hosts that never mention isolation, backups, or patch cadence are a gamble.
Fix: Modern PHP, a host that patches, account isolation when you run multiple sites, and backups you have restored once.
Vulnerable or abandoned plugins and themes
Plugins and themes are independent PHP packages. Many are solid. Some ship bugs. Some stop getting updates while sites keep running them. Industry reports over the years have consistently pointed at extensions (not only core) as a large share of compromises. Treat every install as code you must maintain. Deep dive: plugins as security risks and how to tell if a plugin is secure.
Typical failure modes inside vulnerable plugins:
- File upload / file manager flaws that write executable PHP
- SQL injection against the database
- Cross-site scripting (XSS) that runs in an admin or visitor browser
- Logic bugs that skip capability checks and let lower-privilege users do admin-only actions
Fix: Install from trusted sources, update promptly, remove unused extensions, and replace abandoned ones. Watch advisories in the vulnerabilities database.
A well-known historical example: older Contact Form 7 releases had a critical unrestricted file upload issue (fixed in later versions). Popularity did not prevent the bug; updating did. The lesson is not “never use forms.” It is “known CVEs require patches, not hope.”
Supply-chain and trojanized packages
Some attacks skip your coding mistakes entirely. They ship a useful-looking plugin or “nulled” theme with a hidden backdoor. Once installed, the payload phones home or creates admin access. See plugin supply chain.
Fix: No nulled premiums. No random ZIP mirrors. Prefer wordpress.org or the vendor site. After any odd install, audit users, cron, and new PHP under uploads.
Why plugins stay a frequent weak point
Anyone can publish PHP that hooks into WordPress. Core gets heavy scrutiny. A niche plugin used by 8,000 sites may not. Reviews on wordpress.org catch a lot of malware, but they do not rewrite every line for secure coding, and they do not maintain the plugin for the author.
Your job as a site owner is narrower: fewer plugins, known sources, current versions, and a plan when a CVE drops.

A short defense list that still works
- Update core, themes, and plugins on a schedule
- Install only from trusted sources; delete the rest from disk
- Limit who is Administrator; enable 2FA
- Use HTTPS (SSL/TLS) end to end
- Restrict risky server behaviors where you can (for example, no PHP execution in
uploads)
- Rotate salts/keys after a suspected compromise (
wp-config.php secret keys)
- Run monitoring you will actually review
- Keep restore-tested backups
Site-wide checklist: WordPress security checklist. Login surface: login security complete guide.
No stack is unhackable. Most WordPress breaches still come from postponed updates, weak access, and extensions nobody is watching. Close those three and you remove a large share of real-world risk.