CVE-2025-27910

8.0 HIGH

📋 TL;DR

This CSRF vulnerability in tianti v2.3 allows attackers to trick authenticated users into performing unintended actions via malicious requests to /user/ajax/upd/status. Any tianti v2.3 installation with authenticated users is affected, potentially enabling unauthorized operations.

💻 Affected Systems

Products:
  • tianti
Versions: v2.3
Operating Systems: All
Default Config Vulnerable: ⚠️ Yes
Notes: Requires authenticated user sessions; affects all deployments of tianti v2.3 regardless of configuration.

📦 What is this software?

⚠️ Risk & Real-World Impact

🔴

Worst Case

Attackers could manipulate user accounts, change permissions, or perform administrative actions without authorization, leading to complete system compromise.

🟠

Likely Case

Attackers trick users into changing their own account settings or performing limited unauthorized actions within their privilege scope.

🟢

If Mitigated

With proper CSRF protections, the vulnerability is neutralized and no unauthorized actions can be performed.

🌐 Internet-Facing: HIGH
🏢 Internal Only: MEDIUM

🎯 Exploit Status

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

Exploitation requires social engineering to trick authenticated users into visiting malicious pages.

🛠️ Fix & Mitigation

✅ Official Fix

Patch Version: v2.4 or later

Vendor Advisory: https://github.com/xujeff/tianti/issues/39

Restart Required: No

Instructions:

1. Upgrade tianti to version 2.4 or later. 2. Verify the /user/ajax/upd/status endpoint now includes CSRF tokens. 3. Test authenticated requests to confirm CSRF protection is working.

🔧 Temporary Workarounds

Implement CSRF tokens manually

all

Add CSRF token validation to the /user/ajax/upd/status endpoint

Modify the endpoint to require and validate CSRF tokens in all POST/GET requests

Restrict endpoint access

all

Limit access to the vulnerable endpoint using web server rules

Add access control rules in nginx/apache configuration for /user/ajax/upd/status

🧯 If You Can't Patch

  • Implement SameSite cookie attributes and strict referrer policies
  • Use additional authentication factors for sensitive operations

🔍 How to Verify

Check if Vulnerable:

Test if /user/ajax/upd/status accepts requests without CSRF tokens while authenticated

Check Version:

Check tianti version in admin panel or configuration files

Verify Fix Applied:

Confirm that /user/ajax/upd/status now requires and validates CSRF tokens

📡 Detection & Monitoring

Log Indicators:

  • Multiple failed CSRF token validations
  • Unusual /user/ajax/upd/status requests from unexpected sources

Network Indicators:

  • Requests to /user/ajax/upd/status without referrer headers or CSRF tokens

SIEM Query:

source_ip=external AND uri_path='/user/ajax/upd/status' AND NOT csrf_token=*

🔗 References

📤 Share & Export