A WordPress plugin can add a form, payment method, SEO control, page builder, membership system or integration in minutes. It can also read or change site data, create user roles, load third-party scripts, receive updates and connect to external services. That makes every plugin part of the website’s software supply chain.

The question is not whether plugins are inherently unsafe. WordPress is designed to be extended, and well-maintained plugins can be the most sensible way to implement a requirement. The risk appears when a business cannot say exactly what is installed, why it exists, where it came from, what it can access, who owns it and how it will be kept safe.

OWASP’s current Top 10 places software supply chain failures among the leading web application risks. Its warning covers direct and transitive dependencies, unsupported or out-of-date software and weak tracking of component versions. A WordPress plugin audit applies that principle to the actual application estate.

This is more than clicking “update all”. A useful audit produces an inventory, tests business dependency, identifies exposure, makes a documented decision for every component and establishes an owner for the next update.

Why a plugin belongs in your threat model

Active WordPress plugin code executes inside the website application and can use WordPress capabilities and server resources allowed to it. Depending on design, a plugin may:

  • query or alter the database
  • handle authentication, roles or sessions
  • process form, customer, order or payment-related data
  • upload, create or modify files
  • expose REST API, AJAX or webhook endpoints
  • call external APIs and send data to vendors
  • load JavaScript into public or administrative pages
  • run scheduled background jobs
  • introduce bundled libraries that are not visible in the dashboard.

That access is sometimes necessary. An ecommerce gateway cannot process a payment without exchanging relevant transaction data. The control is to make the access proportionate, understood and maintained.

The official WordPress Plugin Directory has detailed plugin guidelines and can close a listing while a security issue is resolved. However, directory inclusion is not a lifetime guarantee, and commercial or custom plugins may use entirely different distribution and update channels. The website owner still needs governance.

Supply-chain risk is broader than a known vulnerability

Six-part WordPress plugin risk framework covering source, support, exposure, dependencies, ownership and criticality.

A vulnerability with a public advisory is only one failure mode. An audit should consider six dimensions.

1. Provenance

Where did the package come from? A recognised WordPress.org listing, the developer’s authenticated customer portal, a controlled source repository or an approved vendor channel is traceable. A ZIP forwarded by email or downloaded from an unofficial “premium for free” site is not.

Modified or “nulled” commercial plugins are unacceptable because the business cannot establish code integrity, licensing, update rights or what has been added. Replace them with a trusted copy and investigate the environment if such a package was installed.

2. Maintenance

Does the supplier publish releases, support current WordPress and PHP versions, respond to security reports and provide an update path? A plugin can keep working for years while its security assumptions and bundled dependencies become obsolete.

The absence of a recent feature release is not proof that a simple plugin is vulnerable. Conversely, a recent release date is not proof of secure engineering. Maintenance is an evidence set, not a single badge.

3. Exposure and privilege

A small front-end styling plugin and an internet-facing file-upload or authentication plugin do not have the same consequence. Consider reachable endpoints, data sensitivity, administrator capabilities, file access, third-party calls and whether unauthenticated visitors can exercise the feature.

4. Dependency depth

The plugin’s own version may be current while a bundled JavaScript or PHP library is old. OWASP advises organisations to track both direct and transitive dependencies. Custom and commercial components need a way to identify embedded packages, not only the top-level plugin name.

5. Update and ownership path

Who receives advisories, owns the licence, has access to the vendor portal, approves updates and can roll back? An expired licence can silently remove updates. An update key tied to a former employee creates the same operational gap.

6. Business criticality

What breaks if the plugin is removed, disabled or updated? Document dependencies on templates, shortcodes, blocks, custom fields, scheduled jobs, integrations and stored data. Security decisions become slower when nobody knows whether an apparently unused plugin still powers checkout or a nightly export.

Step 1: build a complete inventory

WordPress plugin inventory map showing active, inactive, network, must-use, drop-in, custom, commercial and bundled components.

The standard Plugins screen is the starting point, not the complete inventory. Collect evidence from production, staging, deployment configuration and the file system with authorised technical access.

Include:

  • active plugins
  • inactive plugins still present on disk
  • network-active plugins on WordPress multisite
  • must-use plugins in wp-content/mu-plugins
  • WordPress drop-ins such as object-cache.php or advanced-cache.php
  • custom plugins and site-specific functionality
  • commercial plugins installed from outside WordPress.org
  • plugin dependencies managed through Composer or other build tooling
  • bundled libraries identified in package manifests or source review
  • host-supplied or management plugins
  • plugin-related external SaaS accounts and API credentials.

For each component, record:

Field What to capture
Identity Product name, folder or package name, version and code hash where appropriate
Purpose Business capability and pages or journeys that depend on it
Status Active, inactive, network active, must-use, drop-in or build dependency
Source Official listing, vendor portal, repository or other verified channel
Owner Business owner, technical owner and supplier contact
Access Data, roles, endpoints, files, external services and secrets used
Maintenance Latest supported version, licence, support state and update method
Evidence Advisory checks, test result, last reviewed date and decision
Recovery Backup, rollback package, configuration export and removal implications

Do not publish this register; it can reveal useful details to an attacker. Store it in an access-controlled system and update it through change control.

Step 2: remove ambiguity about “unused” plugins

An inactive plugin generally does not run through normal WordPress activation hooks, but its files remain on the server. Those files add inventory, may still be directly reachable depending on their design, and can be forgotten when ownership changes. WordPress’s official plugin management guidance describes deactivation followed by deletion as the normal uninstall path.

Before deletion:

  1. confirm the plugin is not network active, must-use or loaded by custom code
  2. search templates, content and configuration for its blocks, shortcodes or functions
  3. check scheduled jobs, webhooks and external integrations
  4. document whether uninstall removes or retains business data
  5. take a tested backup and record a rollback approach
  6. deactivate in a representative test environment
  7. test critical journeys and monitoring
  8. remove the code and any no-longer-required credentials safely.

“Deactivate and see what breaks in production” is not a test plan.

Step 3: assess every plugin with consistent evidence

Use the same questions so popularity or familiarity does not replace analysis.

Business and architecture

  • Which requirement does it satisfy?
  • Is that requirement still current?
  • Is the feature duplicated elsewhere?
  • Which pages, data flows, jobs and integrations depend on it?
  • Could WordPress core, the theme or a maintained existing component meet the need?

Supplier and integrity

  • Is the source authenticated and the licence valid?
  • Is the publisher identity clear?
  • Is there a security reporting process?
  • Does the update arrive through a controlled channel?
  • Are release notes and supported versions available?
  • Has the local copy been modified outside the approved build process?

WordPress states that security is ultimately the plugin developer’s responsibility and explains how to report plugin security issues. A mature supplier should make responsible disclosure and response possible even when the plugin is distributed commercially.

Vulnerability and maintenance

  • Is the installed version affected by a credible advisory?
  • Is a fixed version or vendor mitigation available?
  • Does the plugin support the current WordPress and PHP environment?
  • Are bundled libraries known and maintained?
  • Is the listing closed, abandoned or transferred, and why?
  • Can the organisation receive urgent supplier notices?

A closed WordPress.org listing is a prompt to investigate, not automatic proof that the installed site is compromised. Capture the reason and current vendor guidance before deciding.

Access and data

  • Does it expose unauthenticated endpoints or accept uploads?
  • Which WordPress capabilities can administer it?
  • Does it store personal, payment-related or sensitive information?
  • What data is sent offsite, to which service and for what purpose?
  • Are API secrets appropriately stored and scoped?
  • Does it inject public or administrator JavaScript?
  • Are logs and retention proportionate?

The official WordPress roles and capabilities model allows different tasks to be assigned to roles. Check the actual plugin behaviour: some components create powerful custom capabilities or rely too broadly on administrator access.

Step 4: make one of six explicit decisions

Decision tree assigning a WordPress plugin to keep, update, replace, refactor, temporary isolation or removal.

Decision Use when Required action
Keep Current, supported, necessary and proportionate Record owner, update method, tests and review date
Update Supported fix is available and compatibility can be tested Back up, test in staging, deploy, validate and monitor
Replace Requirement remains but supplier, architecture or access is unacceptable Plan data/content migration and parallel validation
Refactor Customisation or bundled dependency creates preventable risk Scope code change, tests, release and maintenance ownership
Isolate temporarily Urgent fix is unavailable but the business cannot immediately remove the function Reduce exposure, disable risky paths, increase monitoring, approve an expiry date
Remove No valid requirement, duplicate capability or unacceptable unfixable risk Test dependencies, uninstall safely, revoke access and verify residual data

Temporary acceptance needs a named risk owner, compensating controls and deadline. “We will revisit later” is not a decision.

Step 5: update without turning security into an outage

WordPress recommends keeping plugins current and taking a current backup before updates in its Manage Plugins documentation. The right operational method depends on consequence.

For a low-risk brochure feature, monitored automatic updates with reliable rollback may be reasonable. For checkout, memberships, pricing, complex forms or custom integrations, a release path should include:

  1. current backup and verified restore access
  2. release notes and security-advisory review
  3. representative staging environment and sanitised test data
  4. automated and manual checks for critical journeys
  5. compatibility checks across WordPress, PHP, theme and related plugins
  6. defined maintenance window and rollback trigger
  7. production deployment through a controlled account
  8. cache clearing where required
  9. smoke tests, logs and business reconciliation
  10. recorded version and outcome.

WordPress supports opt-in automatic updates for individual plugins. Its auto-update guidance notes that the mechanism relies on WordPress cron and recommends regular backups so a failed update can be rolled back. Enabling the toggle is therefore not the whole control. Confirm scheduled tasks work, notifications reach an owned mailbox and someone responds to failure.

Emergency vulnerability remediation may compress normal testing. Document the risk trade-off, use vendor mitigation if a safe fix is not ready, and test the highest-consequence paths first.

Step 6: check for evidence of exploitation

Installing the fixed version closes a known path; it does not prove the earlier vulnerable version was never exploited. Where exposure and consequence justify it, investigate:

  • web and WAF requests to affected endpoints
  • new or changed privileged accounts
  • modified files and unknown PHP code
  • unexpected scheduled tasks
  • new API keys, sessions or application passwords
  • database changes, injected scripts or altered destinations
  • unusual outbound connections
  • security alerts and hosting control-panel activity.

Escalate suspected compromise to a qualified incident responder and follow an evidence-preserving process. Avoid deleting suspicious files before collection. Article 113’s first-24-hours runbook covers containment, roles and Australian reporting considerations.

Establish a sustainable plugin policy

An audit has limited value if the site returns to ungoverned installation. Define:

  • who may request, approve, install and remove plugins
  • approved sources and prohibited package types
  • minimum supplier and maintenance evidence
  • security and privacy review thresholds
  • staging and critical-journey test requirements
  • automatic-update eligibility
  • advisory monitoring and response targets based on risk
  • licence, account and renewal ownership
  • quarterly inventory attestation and event-driven reviews
  • retirement and data-removal procedures.

ASD identifies application patching, restricting administrative privileges, multi-factor authentication and regular backups among the Essential Eight. These controls complement plugin governance: none makes an unnecessary, unsupported component safe.

Frequently asked questions

Are all WordPress plugins a security risk?

Every plugin changes the attack surface and maintenance obligation, but risk varies greatly. A necessary, well-supported component from a trusted source with proportionate access, prompt updates and tested recovery can be an acceptable choice.

How many plugins are too many?

There is no safe universal number. Ten high-privilege, poorly maintained plugins may create more risk than many small, well-governed ones. Assess necessity, exposure, code quality, dependencies, performance, compatibility and operational ownership.

Is an inactive plugin safe to leave installed?

It is usually less exposed than an active plugin, but its files remain part of the environment and inventory. If it has no tested recovery purpose, remove it through a controlled uninstall rather than leaving forgotten code on the server.

Should every plugin have automatic updates enabled?

Not automatically. Use risk-based update lanes. Automatic updates can suit components with strong compatibility, monitoring and rollback; business-critical plugins may require staged testing. Urgent security fixes still need prompt action.

Is a plugin safe because it is in the WordPress.org directory?

Directory distribution provides useful rules and an update channel, not a permanent security guarantee. Review the supplier, installed version, maintenance, access, advisories and your own operational controls.

What should we do with a plugin that has no available security fix?

Disable or remove the affected function where practical. If immediate removal would create greater harm, use narrowly scoped compensating controls, increased monitoring, a named risk owner and a short replacement deadline with specialist advice.

Do premium plugins reduce supply-chain risk?

Payment alone does not determine security. A commercial licence can provide support and updates, but assess disclosure processes, maintenance, code integrity, account ownership, dependencies and response capability just as you would for an open-source component.

Can a security plugin perform the whole audit?

No. Tools can flag versions, file changes and known issues, but they do not know whether a plugin is still required, what data it sends, who owns the licence, whether a custom dependency exists or what will break when it changes.

How Emote can help

Emote can help clients inventory the WordPress application layer, map plugins to customer journeys and integrations, rationalise duplicate functionality, plan replacements and implement tested updates or removals. Where the estate includes custom code, complex ecommerce, undocumented integrations or uncertain data flows, the work should begin with a paid Full Website Discovery so scope, risk and acceptance criteria are explicit. It is not a free security audit or incident investigation.

Emote’s website support and maintenance services can include a defined WordPress update and testing process for the plugins the site keeps.

If you need to turn a plugin inventory into an owned remediation plan, book a meeting with Emote to discuss the estate and priorities.

Up next: Your Website Has Been Hacked: The First 24 Hours and Who Needs to Do What

Read More