CVE-2020-14932

9.8 CRITICAL

📋 TL;DR

CVE-2020-14932 is a critical PHP object injection vulnerability in SquirrelMail's compose.php that allows remote code execution by deserializing untrusted data from HTTP GET requests. This affects all SquirrelMail installations with the vulnerable code path accessible. Attackers can exploit this without authentication to compromise the web server.

💻 Affected Systems

Products:
  • SquirrelMail
Versions: 1.4.22 and earlier versions
Operating Systems: All operating systems running PHP
Default Config Vulnerable: ⚠️ Yes
Notes: Vulnerability exists in default installation when mailto.php functionality is accessible

📦 What is this software?

⚠️ Risk & Real-World Impact

🔴

Worst Case

Full server compromise leading to data theft, lateral movement, and persistent backdoor installation

🟠

Likely Case

Remote code execution with web server privileges, allowing file system access and further exploitation

🟢

If Mitigated

Blocked exploitation attempts with proper input validation and WAF rules in place

🌐 Internet-Facing: HIGH - Directly exploitable via web interface without authentication
🏢 Internal Only: HIGH - Internal attackers can exploit with same ease as external

🎯 Exploit Status

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

Exploit code is publicly available and trivial to execute

🛠️ Fix & Mitigation

✅ Official Fix

Patch Version: 1.4.23 and later

Vendor Advisory: https://www.openwall.com/lists/oss-security/2020/06/20/1

Restart Required: No

Instructions:

1. Download SquirrelMail 1.4.23 or later from official repository. 2. Backup current installation. 3. Replace compose.php and mailto.php with patched versions. 4. Verify functionality.

🔧 Temporary Workarounds

Disable mailto.php functionality

linux

Remove or restrict access to mailto.php to prevent exploitation vector

mv /path/to/squirrelmail/mailto.php /path/to/squirrelmail/mailto.php.disabled

Input validation filter

all

Add input sanitization for GET parameters in compose.php

Add: if (isset($_GET['mailtodata'])) { $_GET['mailtodata'] = filter_var($_GET['mailtodata'], FILTER_SANITIZE_STRING); }

🧯 If You Can't Patch

  • Implement strict WAF rules to block requests containing serialized PHP objects
  • Restrict network access to SquirrelMail interface using firewall rules

🔍 How to Verify

Check if Vulnerable:

Check if compose.php contains unserialize() call on $_GET['mailtodata'] without proper validation

Check Version:

grep '\$version' /path/to/squirrelmail/functions/global.php | head -1

Verify Fix Applied:

Verify compose.php no longer uses unserialize() on untrusted input or implements proper validation

📡 Detection & Monitoring

Log Indicators:

  • HTTP GET requests to compose.php with mailtodata parameter containing serialized data
  • Unusual PHP process execution from web server context

Network Indicators:

  • HTTP requests with serialized objects in URL parameters
  • Unexpected outbound connections from web server

SIEM Query:

source="web_logs" AND url="*compose.php*" AND url="*mailtodata=*" AND (url="*O:*" OR url="*a:*" OR url="*s:*")

🔗 References

📤 Share & Export