CVE-2025-44136

9.8 CRITICAL

📋 TL;DR

CVE-2025-44136 is a reflected cross-site scripting vulnerability in MapTiler Tileserver-php where the 'layer' GET parameter is not properly sanitized before being reflected in error messages. This allows unauthenticated attackers to execute arbitrary JavaScript in victims' browsers when they visit specially crafted URLs. All users running the vulnerable version are affected.

💻 Affected Systems

Products:
  • MapTiler Tileserver-php
Versions: v2.0
Operating Systems: Any
Default Config Vulnerable: ⚠️ Yes
Notes: Only affects installations with error messages enabled and accessible via web interface.

📦 What is this software?

⚠️ Risk & Real-World Impact

🔴

Worst Case

Attackers could steal session cookies, perform actions as authenticated users, redirect to malicious sites, or install malware on victim systems.

🟠

Likely Case

Session hijacking, credential theft, defacement of the application interface, or redirection to phishing sites.

🟢

If Mitigated

Limited impact if proper Content Security Policy headers are implemented and cookies are secured with HttpOnly flags.

🌐 Internet-Facing: HIGH
🏢 Internal Only: MEDIUM

🎯 Exploit Status

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

Exploitation requires user interaction (clicking malicious link) but is trivial to weaponize in phishing campaigns.

🛠️ Fix & Mitigation

✅ Official Fix

Patch Version: Not available

Vendor Advisory: Not available

Restart Required: No

Instructions:

No official patch available. Consider upgrading to a newer version if available or implementing workarounds.

🔧 Temporary Workarounds

Input Sanitization

all

Add input validation and output encoding for the 'layer' parameter in error handling code.

Modify error.php or similar files to htmlspecialchars($layer, ENT_QUOTES, 'UTF-8') before output

Content Security Policy

all

Implement strict CSP headers to prevent execution of inline scripts.

Add header: Content-Security-Policy: default-src 'self'; script-src 'self'

🧯 If You Can't Patch

  • Implement Web Application Firewall (WAF) rules to block XSS payloads in GET parameters
  • Disable detailed error messages in production environments

🔍 How to Verify

Check if Vulnerable:

Test by accessing URL with XSS payload in layer parameter: http://target/?layer=<script>alert(1)</script>

Check Version:

Check composer.json or version file in installation directory

Verify Fix Applied:

Verify that script tags are properly encoded in error messages and don't execute

📡 Detection & Monitoring

Log Indicators:

  • Unusual GET requests with script tags or JavaScript in layer parameter
  • Multiple error responses with suspicious parameter values

Network Indicators:

  • HTTP requests containing <script> tags in query parameters
  • Outbound connections to suspicious domains following error page visits

SIEM Query:

source="web_logs" AND uri_query="*<script>*" AND status="200" OR status="500"

🔗 References

📤 Share & Export