CVE-2018-1000525

9.8 CRITICAL

📋 TL;DR

CVE-2018-1000525 is a PHP object injection vulnerability in OpenPSA that allows attackers to execute arbitrary code or disclose sensitive information by sending specially crafted GET requests containing serialized PHP objects. This affects all OpenPSA installations that process form data via GET parameters. The vulnerability is particularly dangerous because it can be exploited without authentication.

💻 Affected Systems

Products:
  • OpenPSA
Versions: All versions before commit 097eae0
Operating Systems: All operating systems running PHP
Default Config Vulnerable: ⚠️ Yes
Notes: Any OpenPSA installation that accepts form data via GET parameters is vulnerable. The vulnerability is in the core form handling functionality.

📦 What is this software?

⚠️ Risk & Real-World Impact

🔴

Worst Case

Remote code execution leading to complete system compromise, data exfiltration, and potential lateral movement within the network.

🟠

Likely Case

Remote code execution allowing attackers to gain shell access, install malware, or steal sensitive data from the OpenPSA application.

🟢

If Mitigated

If proper input validation and sanitization are implemented, the attack would be blocked at the web application layer.

🌐 Internet-Facing: HIGH
🏢 Internal Only: MEDIUM

🎯 Exploit Status

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

Exploitation requires sending a specially crafted GET request with serialized PHP objects. Public proof-of-concept code exists in the referenced 0dd.zone article.

🛠️ Fix & Mitigation

✅ Official Fix

Patch Version: Versions after commit 097eae0

Vendor Advisory: https://github.com/flack/openpsa/issues/191

Restart Required: No

Instructions:

1. Update OpenPSA to a version after commit 097eae0. 2. Apply the fix from commit 097eae0 if updating is not possible. 3. Verify the fix by checking that unserialize() is not called on user-controlled input.

🔧 Temporary Workarounds

Input Validation Filter

all

Implement strict input validation to reject any GET parameters containing serialized PHP objects

Web Application Firewall Rule

all

Block requests containing serialized PHP object patterns in GET parameters

🧯 If You Can't Patch

  • Implement a web application firewall (WAF) with rules to detect and block serialized PHP objects in GET parameters
  • Restrict access to the OpenPSA application to trusted IP addresses only

🔍 How to Verify

Check if Vulnerable:

Test by sending a GET request with a serialized PHP object payload to form endpoints. If the application processes it without error, it may be vulnerable.

Check Version:

Check the OpenPSA version or git commit hash against commit 097eae0

Verify Fix Applied:

Attempt the same exploit after patching; it should be rejected or cause an error. Check that the application no longer calls unserialize() on user-controlled input.

📡 Detection & Monitoring

Log Indicators:

  • Unusual GET requests with base64-encoded or serialized data patterns
  • PHP unserialize() errors in application logs
  • Unexpected process execution or file system access

Network Indicators:

  • HTTP GET requests containing serialized PHP object patterns (O: or a: patterns)
  • Requests to form endpoints with unusual parameter values

SIEM Query:

source="web_logs" AND (uri="*form*" OR uri="*.php*") AND (query="*O:*" OR query="*a:*" OR query="*s:*" OR query="*i:*")

🔗 References

📤 Share & Export