CVE-2025-32691
Executive Summary
CVE-2025-32691 is a Server-Side Request Forgery (SSRF) vulnerability in the Blubrry PowerPress Podcasting plugin for WordPress, affecting versions up to and including 11.12.6. This flaw allows an authenticated attacker with high privileges (such as an Administrator) to make the vulnerable server send crafted HTTP requests to internal or external resources, potentially leading to information disclosure, internal network scanning, or access to cloud metadata endpoints. The vulnerability is classified as CWE-918: Server-Side Request Forgery (SSRF). As of this report, no official patch has been released, and no public proof-of-concept (PoC) code is available. The EPSS score is 0.0%, indicating a low probability of exploitation in the wild at this time, but the risk remains significant for high-value WordPress installations.
This record — and 170,000+ others — are available via the ValtersIT API. One endpoint replaces five: NVD + GitHub CVE + CISA KEV + EPSS + Nuclei + Exploit-DB, unified.
No signup required
Supply Chain & Package Security
This vulnerability affects a WordPress plugin distributed via the official WordPress plugin repository. Users are advised to monitor the plugin's update channel for a patched version. Since no patch is available, the primary mitigation is to disable or remove the plugin until a fix is released.
CVSS Breakdown & Threat Level
- CVSS Vector: CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:H/I:N/A:N
- Base Score: 4.9 (Medium)
- Attack Vector (AV): Network (N) – The vulnerability can be exploited remotely.
- Attack Complexity (AC): Low (L) – No special conditions are required.
- Privileges Required (PR): High (H) – The attacker must have administrative-level access to the WordPress instance.
- User Interaction (UI): None (N) – No user action is needed.
- Scope (S): Unchanged (U) – The vulnerable component and the impacted component are the same.
- Confidentiality (C): High (H) – Successful exploitation can lead to disclosure of sensitive internal data.
- Integrity (I): None (N) – No data modification is possible.
- Availability (A): None (N) – No denial-of-service impact.
Threat Level: Medium. While the CVSS score is moderate, the requirement for high privileges reduces the likelihood of widespread exploitation. However, in environments where administrative accounts are compromised, this SSRF can be a stepping stone for deeper internal network attacks.
Deep Dive & Mechanics
The PowerPress Podcasting plugin provides functionality to import or fetch podcast feeds from external URLs. The SSRF vulnerability likely resides in a feature that allows an administrator to specify a URL for feed retrieval or media file downloading. The plugin fails to properly validate or sanitize the user-supplied URL, allowing an attacker to craft requests to internal IP addresses (e.g., http://169.254.169.254/ for cloud metadata) or internal services (e.g., http://localhost:9200/ for Elasticsearch).
Attack Flow:
- An attacker with administrative privileges accesses the PowerPress settings page.
- The attacker locates a field that accepts a URL (e.g., "Podcast Feed URL" or "Import from URL").
- The attacker inputs a malicious URL pointing to an internal resource, such as
http://169.254.169.254/latest/meta-data/. - The plugin's server-side code makes an HTTP request to that URL without proper validation.
- The response (e.g., cloud metadata) is either displayed back to the attacker or stored in the database, leading to information disclosure.
Root Cause: The plugin uses a function like wp_remote_get() or file_get_contents() with user-supplied input without restricting the URL scheme or destination IP range.
Vulnerable vs. Patched Code
Since no official patch is available, the following is a hypothetical comparison based on common SSRF fixes.
Vulnerable Code (Conceptual):
$feed_url = $_POST['feed_url'];
$response = wp_remote_get( $feed_url );
// Process response...
Patched Code (Conceptual):
$feed_url = $_POST['feed_url'];
// Validate URL scheme
if ( ! in_array( parse_url( $feed_url, PHP_URL_SCHEME ), array( 'http', 'https' ) ) ) {
wp_die( 'Invalid URL scheme.' );
}
// Block internal IPs
$host = parse_url( $feed_url, PHP_URL_HOST );
if ( filter_var( $host, FILTER_VALIDATE_IP ) && ! filter_var( $host, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE ) ) {
wp_die( 'URL points to a private or reserved IP range.' );
}
// Use a whitelist of allowed domains if possible
$allowed_domains = array( 'example.com', 'feeds.example.com' );
if ( ! in_array( $host, $allowed_domains ) ) {
wp_die( 'Domain not allowed.' );
}
$response = wp_remote_get( $feed_url );
// Process response...
Exploitation & Lab Setup
Red Team (Offensive)
Prerequisites:
- A WordPress instance with PowerPress Podcasting <= 11.12.6 installed and activated.
- Administrative credentials (username/password) for the WordPress admin panel.
Exploitation Steps:
- Log in to the WordPress admin panel as an administrator.
- Navigate to PowerPress > Settings (or a similar menu).
- Locate a field that accepts a URL for feed import or media fetching (e.g., "Podcast Feed URL").
- Enter a malicious URL targeting an internal resource. For example:
- AWS metadata:
http://169.254.169.254/latest/meta-data/ - Internal service:
http://localhost:8080/admin - Internal network:
http://192.168.1.1/config
- AWS metadata:
- Click "Save" or "Import" to trigger the request.
- Observe the response. If the plugin displays the fetched content, the SSRF is successful.
Example Payload:
http://169.254.169.254/latest/meta-data/iam/security-credentials/admin
Note: Since no public PoC exists, this is a theoretical exploitation path. The exact field name may vary.
Blue Team (Defensive)
Detection & Prevention:
- Network Segmentation: Ensure that the WordPress server cannot reach sensitive internal services (e.g., cloud metadata endpoints, internal databases).
- Web Application Firewall (WAF): Deploy a WAF with rules to block requests to private IP ranges (e.g., 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, 169.254.0.0/16).
- Input Validation: Implement server-side validation to restrict URLs to a whitelist of allowed domains and schemes.
- Least Privilege: Ensure that the WordPress application runs with the minimum necessary permissions. Avoid running the web server as root.
- Monitoring: Monitor outbound HTTP requests from the WordPress server for anomalies (e.g., requests to internal IPs or unusual ports).
Indicators of Compromise (IOCs)
- Network Traffic:
- Outbound HTTP requests from the WordPress server to private IP ranges (e.g., 10.x.x.x, 172.16-31.x.x, 192.168.x.x, 169.254.x.x).
- Requests to cloud metadata endpoints (e.g.,
http://169.254.169.254/). - Requests to localhost (e.g.,
http://127.0.0.1/,http://localhost/).
- Log Entries:
- WordPress debug logs showing failed or successful
wp_remote_get()calls to suspicious URLs. - Web server access logs (e.g., Apache/Nginx) showing POST requests to PowerPress settings pages with unusual URL parameters.
- WordPress debug logs showing failed or successful
- File System:
- Unexpected files in the WordPress uploads directory that may have been fetched via SSRF.
Detection Engineering
YARA Rule
rule Detect_PowerPress_SSRF_Exploit {
meta:
description = "Detects attempts to exploit CVE-2025-32691 SSRF in PowerPress Podcasting"
author = "Valters IT"
date = "2025-04-10"
reference = "CVE-2025-32691"
strings:
$url_pattern = /(http|https):\/\/(127\.0\.0\.1|localhost|10\.\d{1,3}\.\d{1,3}\.\d{1,3}|172\.(1[6-9]|2[0-9]|3[01])\.\d{1,3}\.\d{1,3}|192\.168\.\d{1,3}\.\d{1,3}|169\.254\.\d{1,3}\.\d{1,3})/
$powerpress_ref = "powerpress" nocase
$feed_url_param = "feed_url" nocase
condition:
$powerpress_ref and $feed_url_param and $url_pattern
}
Sigma Rule
title: PowerPress SSRF Exploitation Attempt
id: 7a8b9c0d-1e2f-3a4b-5c6d-7e8f9a0b1c2d
status: experimental
description: Detects HTTP requests to private IP ranges from WordPress PowerPress plugin
author: Valters IT
date: 2025/04/10
logsource:
category: webserver
product: apache
service: access_combined
detection:
selection:
cs-method: 'POST'
cs-uri-query|contains: 'powerpress'
cs-uri-query|contains: 'feed_url'
c-ip|startswith:
- '10.'
- '172.16.'
- '172.17.'
- '172.18.'
- '172.19.'
- '172.20.'
- '172.21.'
- '172.22.'
- '172.23.'
- '172.24.'
- '172.25.'
- '172.26.'
- '172.27.'
- '172.28.'
- '172.29.'
- '172.30.'
- '172.31.'
- '192.168.'
- '169.254.'
- '127.'
condition: selection
falsepositives:
- Legitimate use of internal services (if allowed)
level: high
Suricata Rule
alert http $HOME_NET any -> $EXTERNAL_NET any (msg:"CVE-2025-32691 PowerPress SSRF Attempt"; flow:to_server,established; content:"POST"; http_method; content:"powerpress"; http_uri; content:"feed_url"; http_client_body; pcre:"/(http|https):\/\/(127\.0\.0\.1|localhost|10\.\d{1,3}\.\d{1,3}\.\d{1,3}|172\.(1[6-9]|2[0-9]|3[01])\.\d{1,3}\.\d{1,3}|192\.168\.\d{1,3}\.\d{1,3}|169\.254\.\d{1,3}\.\d{1,3})/Ri"; classtype:attempted-recon; sid:1000001; rev:1;)
Remediation & Mitigation
Immediate Actions:
- Disable the Plugin: If the PowerPress Podcasting plugin is not critical, deactivate and uninstall it until a patch is released.
- Restrict Administrative Access: Limit the number of users with administrative privileges. Use strong passwords and enable multi-factor authentication (MFA).
- Network Controls: Implement firewall rules to block outbound traffic from the WordPress server to private IP ranges and cloud metadata endpoints.
- Web Application Firewall (WAF): Deploy a WAF with rules to block SSRF attempts (e.g., blocking URLs containing private IPs).
Long-Term Fix:
- Monitor the Blubrry plugin repository for an official patch. Once released, update to the patched version immediately.
- Conduct a code review of the plugin to identify and fix the SSRF vulnerability if you have development resources.
Workaround:
- If the plugin must remain active, consider modifying the plugin's code to add URL validation (as shown in the "Patched Code" section). However, this will be overwritten on plugin updates.
Valters IT
Securing Digital Frontiers
What is this? Security researchers use these exact search queries on Shodan.io (a search engine for internet-connected devices) to find vulnerable systems globally. You can copy these dorks to see if your organization's IP space is exposed.
💣 PoC CODE AVAILABLE
Exploit code for this CVE is tracked in our database.
Access poc_code via API Pro.