
SudoWP Radar is a runtime security auditor for the WordPress 6.9 Abilities API. It scans every registered ability across all active plugins and themes, applying a rule engine that detects the vulnerability patterns most likely to be exploited in production.
What it audits:
How it works:
SudoWP Radar reads the live abilities registry after all plugins and themes have loaded. It applies static rules to each ability and returns a structured findings report with severity ratings (Critical, High, Medium, Low) and actionable remediation guidance. A risk score from 0-100 summarises the overall exposure of the site.
Security model:
radar_run_audit capability (granted to site administrators by default).Optional premium extension (SudoWP Pro):
The free plugin is a fully functional standalone security auditor. An optional premium add-on extends it with SudoWP Vulnerability Dataset matching (CVE references, CVSS scores, patch guidance), scheduled audits with email alerts, multi-site dashboard aggregation, and report export. None of these are required to use the core auditing features.
SudoWP Radar is a complement to static analysis tools. It audits the live, runtime state of your site — what is actually registered and executing — not just what is declared in code.
When an API key is configured, SudoWP Radar connects to the SudoWP vulnerability
dataset API (api.sudowp.com) to retrieve patch availability information for
registered WordPress abilities.
No data is transmitted without an API key being explicitly entered by the site
administrator. When no key is present, the plugin makes zero external network
requests.
Data sent to the API: the ability name being looked up and your API key.
No personal data, no site URL, no user data is transmitted.
API key registration: https://sudowp.com/get-api-key/
Terms of service: https://sudowp.com/tos/
Privacy policy: https://sudowp.com/privacy-policy/
SudoWP Radar exposes four WordPress filters so a premium plugin can extend
the audit engine without modifying core plugin files.
Controls whether dataset lookups run during an audit. Return true to activate.
Parameters:
$enabled (bool) — default false.
Returns:
bool
Example:
add_filter( 'radar_dataset_enabled', function ( bool $enabled ): bool {
return true; // Enable dataset lookups.
} );
Inject Finding objects from a vulnerability dataset for a specific ability.
Called once per ability during an audit. Non-Finding return values are stripped.
Parameters:
$findings (array) — current Finding[] for this ability, default [].
$ability (array) — ability data array from Scanner (name, meta, callbacks, etc.).
Returns:
Finding[]
Note: register with accepted_args=2 to receive both parameters.
Example:
add_filter(
'radar_dataset_findings',
function ( array $findings, array $ability ): array {
if ( str_starts_with( $ability['name'], 'my-plugin/' ) ) {
$findings[] = new \SudoWP\Radar\Finding(
ability_name: $ability['name'],
severity: \SudoWP\Radar\Finding::SEVERITY_CRITICAL,
vuln_class: \SudoWP\Radar\Finding::VULN_DATASET_MATCH,
message: 'Known vulnerable ability pattern detected (CVE-2026-1234).',
recommendation: 'Update my-plugin to version 2.1.0 or later.',
is_premium: true,
);
}
return $findings;
},
10,
2
);
Override the dataset status array displayed in the admin UI.
Parameters:
$status (array) — default status with keys:
enabled (bool) — false in free version.
label (string) — UI display string.
last_updated (string|null) — ISO 8601 date or null.
total_entries (int) — 0 in free version.
Returns:
array (same shape as input)
Example:
add_filter( 'radar_dataset_status', function ( array $status ): array {
return [
'enabled' => true,
'label' => 'SudoWP Vulnerability Dataset: Connected. 4,821 entries.',
'last_updated' => '2026-03-08',
'total_entries' => 4821,
];
} );
Modify the complete findings array after all rules and dataset lookups have run.
Use this to add cross-ability findings, re-score existing findings, or suppress
false positives. Called once per full audit run.
Parameters:
$findings (array) — complete Finding[] from the full audit.
$abilities (array) — all ability data arrays scanned during this audit.
Returns:
Finding[]
Note: register with accepted_args=2 to receive both parameters.
Example:
add_filter(
'radar_audit_findings',
function ( array $findings, array $abilities ): array {
// Example: promote medium findings to high for a high-risk site.
return array_map( function ( $finding ) {
if ( $finding->severity === \SudoWP\Radar\Finding::SEVERITY_MEDIUM ) {
return new \SudoWP\Radar\Finding(
ability_name: $finding->ability_name,
severity: \SudoWP\Radar\Finding::SEVERITY_HIGH,
vuln_class: $finding->vuln_class,
message: $finding->message,
recommendation: $finding->recommendation,
context: $finding->context,
is_premium: $finding->is_premium,
);
}
return $finding;
}, $findings );
},
10,
2
);