CVE-2023-41544

9.8 CRITICAL

📋 TL;DR

This is a Server-Side Template Injection (SSTI) vulnerability in jeecg-boot version 3.5.3 that allows remote attackers to execute arbitrary code via crafted HTTP requests to the /jmreport/loadTableData component. Attackers can achieve remote code execution (RCE) on affected systems, potentially compromising the entire server. Organizations using jeecg-boot 3.5.3 for low-code development are affected.

💻 Affected Systems

Products:
  • jeecg-boot
Versions: 3.5.3
Operating Systems: All platforms running Java
Default Config Vulnerable: ⚠️ Yes
Notes: Only affects systems with the vulnerable /jmreport/loadTableData endpoint exposed and accessible.

📦 What is this software?

⚠️ Risk & Real-World Impact

🔴

Worst Case

Complete server compromise with attacker gaining full control, data exfiltration, lateral movement, and persistent backdoor installation.

🟠

Likely Case

Remote code execution leading to application compromise, data theft, and potential ransomware deployment.

🟢

If Mitigated

Limited impact with proper network segmentation, WAF protection, and minimal exposed attack surface.

🌐 Internet-Facing: HIGH
🏢 Internal Only: MEDIUM

🎯 Exploit Status

Public PoC: ⚠️ Yes
Weaponized: LIKELY
Unauthenticated Exploit: ⚠️ Yes
Complexity: LOW

Public exploit code is available, making this easily weaponizable by attackers with basic skills.

🛠️ Fix & Mitigation

✅ Official Fix

Patch Version: 3.5.4 or later

Vendor Advisory: https://github.com/jeecgboot/jeecg-boot

Restart Required: Yes

Instructions:

1. Upgrade jeecg-boot to version 3.5.4 or later. 2. Restart the application server. 3. Verify the fix by testing the vulnerable endpoint.

🔧 Temporary Workarounds

Block vulnerable endpoint

all

Block access to /jmreport/loadTableData via web server or firewall rules

# Apache: RewriteRule ^/jmreport/loadTableData - [F]
# Nginx: location ~ ^/jmreport/loadTableData { return 403; }
# Firewall: iptables -A INPUT -p tcp --dport 80 -m string --string "/jmreport/loadTableData" --algo bm -j DROP

WAF rule implementation

all

Deploy WAF rules to detect and block SSTI payloads

# ModSecurity: SecRule ARGS "\$\{.*\}" "id:1001,phase:2,deny,msg:'SSTI attempt'"
# Cloud WAF: Configure custom rule to block requests containing template injection patterns

🧯 If You Can't Patch

  • Implement strict input validation and sanitization for all user inputs to the vulnerable endpoint
  • Deploy network segmentation to isolate the vulnerable system and restrict access to trusted IPs only

🔍 How to Verify

Check if Vulnerable:

Test if /jmreport/loadTableData endpoint accepts template injection payloads like ${7*7} returning 49

Check Version:

Check application version in web interface or examine pom.xml for jeecg-boot version

Verify Fix Applied:

Attempt the same SSTI payload after patching - should return error or sanitized output

📡 Detection & Monitoring

Log Indicators:

  • HTTP requests to /jmreport/loadTableData with unusual parameters
  • Java process spawning unexpected child processes
  • Log entries containing template injection patterns like ${, #, @

Network Indicators:

  • Unusual outbound connections from application server
  • HTTP requests with encoded template syntax in parameters

SIEM Query:

source="web_logs" AND uri="/jmreport/loadTableData" AND (query="*${*" OR query="*#*" OR query="*@*")

🔗 References

📤 Share & Export