CVE-2025-10343

6.1 MEDIUM

📋 TL;DR

This CVE describes a stored HTML injection vulnerability in Perfex CRM v3.2.1 where attackers can inject malicious HTML via the 'expense_name' parameter in POST requests to the '/expenses/expense' endpoint. This affects all Perfex CRM v3.2.1 installations, potentially allowing attackers to deface pages, steal session cookies, or redirect users to malicious sites.

💻 Affected Systems

Products:
  • Perfex CRM
Versions: v3.2.1
Operating Systems: All
Default Config Vulnerable: ⚠️ Yes
Notes: All installations of Perfex CRM v3.2.1 are vulnerable by default. The vulnerability requires authentication to access the expense creation functionality.

📦 What is this software?

⚠️ Risk & Real-World Impact

🔴

Worst Case

Attackers could inject malicious scripts that steal session cookies, perform account takeover, redirect users to phishing sites, or deface the CRM interface for all users.

🟠

Likely Case

Attackers inject HTML/JavaScript to deface expense pages, steal session cookies from authenticated users, or redirect users to malicious sites.

🟢

If Mitigated

With proper input validation and output encoding, injected HTML would be rendered as plain text rather than executed, preventing exploitation.

🌐 Internet-Facing: HIGH
🏢 Internal Only: MEDIUM

🎯 Exploit Status

Public PoC: ✅ No
Weaponized: UNKNOWN
Unauthenticated Exploit: ✅ No
Complexity: MEDIUM

Exploitation requires authenticated access to create expenses. The vulnerability is straightforward to exploit once authenticated.

🛠️ Fix & Mitigation

✅ Official Fix

Patch Version: v3.2.2 or later

Vendor Advisory: https://www.perfexcrm.com/

Restart Required: No

Instructions:

1. Backup your Perfex CRM installation and database. 2. Download the latest version from the official Perfex CRM website. 3. Replace the existing installation files with the updated version. 4. Run any database update scripts if provided. 5. Verify the fix by testing the expense creation functionality.

🔧 Temporary Workarounds

Input Validation Filter

all

Add server-side validation to sanitize HTML tags from the expense_name parameter before processing.

In the expense creation controller, add: $expense_name = htmlspecialchars($_POST['expense_name'], ENT_QUOTES, 'UTF-8');

🧯 If You Can't Patch

  • Implement a web application firewall (WAF) with rules to block HTML injection patterns in POST requests to '/expenses/expense'.
  • Restrict access to the expense creation functionality to only trusted users and monitor for suspicious activity.

🔍 How to Verify

Check if Vulnerable:

Create an expense with HTML content in the expense_name field (e.g., <script>alert('test')</script>) and check if it executes when viewing the expense list.

Check Version:

Check the version in the Perfex CRM admin panel under System > Updates or view the application/config/config.php file for version information.

Verify Fix Applied:

After patching, attempt the same HTML injection test. The HTML should be displayed as plain text rather than executed.

📡 Detection & Monitoring

Log Indicators:

  • POST requests to '/expenses/expense' with HTML tags in parameters
  • Unusual expense names containing script tags or HTML entities

Network Indicators:

  • POST requests containing HTML/JavaScript patterns in expense_name parameter

SIEM Query:

source="web_logs" AND uri="/expenses/expense" AND method="POST" AND (expense_name CONTAINS "<script>" OR expense_name CONTAINS "javascript:")

🔗 References

📤 Share & Export