CVE-2021-26703

9.8 CRITICAL

📋 TL;DR

CVE-2021-26703 is a critical vulnerability in EPrints 3.4.2 that allows remote attackers to read arbitrary files and potentially execute commands via crafted JSON/XML input to specific CGI endpoints. This affects all EPrints 3.4.2 installations with the vulnerable ajax/phrase functionality exposed. Attackers can exploit this without authentication to compromise the server.

💻 Affected Systems

Products:
  • EPrints
Versions: 3.4.2 specifically
Operating Systems: All platforms running EPrints
Default Config Vulnerable: ⚠️ Yes
Notes: All EPrints 3.4.2 installations with the default configuration are vulnerable. The vulnerability is in the ajax/phrase CGI endpoint.

📦 What is this software?

⚠️ Risk & Real-World Impact

🔴

Worst Case

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

🟠

Likely Case

Arbitrary file reading exposing sensitive configuration files, credentials, and database information, potentially leading to further exploitation.

🟢

If Mitigated

Limited impact if proper input validation and file access controls are implemented, though information disclosure may still occur.

🌐 Internet-Facing: HIGH - The vulnerability is remotely exploitable without authentication via internet-accessible endpoints.
🏢 Internal Only: MEDIUM - Internal systems are still vulnerable but require network access; risk is lower than internet-facing systems.

🎯 Exploit Status

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

Exploitation is straightforward with publicly available proof-of-concept code. Attackers can craft malicious JSON/XML payloads to trigger the vulnerability.

🛠️ Fix & Mitigation

✅ Official Fix

Patch Version: 3.4.3 and later

Vendor Advisory: https://files.eprints.org/2548/

Restart Required: Yes

Instructions:

1. Backup your EPrints installation and database. 2. Download EPrints 3.4.3 or later from the official repository. 3. Replace the vulnerable files with the patched version. 4. Restart the web server and EPrints services. 5. Verify the fix by testing the vulnerable endpoint.

🔧 Temporary Workarounds

Disable vulnerable CGI endpoint

all

Temporarily disable or restrict access to the cgi/ajax/phrase endpoint to prevent exploitation.

# In Apache config: <Location "/cgi/ajax/phrase"> Deny from all </Location>
# In Nginx config: location ~ ^/cgi/ajax/phrase { deny all; }

Input validation filter

all

Implement strict input validation for JSON/XML parsing in the ajax/phrase handler.

# Modify the Perl script to validate and sanitize input before processing

🧯 If You Can't Patch

  • Implement strict network access controls to limit access to the EPrints server to trusted IPs only.
  • Deploy a web application firewall (WAF) with rules to block malicious JSON/XML payloads targeting the vulnerable endpoint.

🔍 How to Verify

Check if Vulnerable:

Test if the /cgi/ajax/phrase endpoint accepts JSON/XML input and returns file contents when crafted payloads are sent. Use curl: curl -X POST -H 'Content-Type: application/json' --data '{"test":"payload"}' http://target/cgi/ajax/phrase

Check Version:

Check the EPrints version in the web interface or via the installation directory: cat /path/to/eprints/version.txt

Verify Fix Applied:

After patching, attempt the same test and verify that file reading/command execution no longer occurs. The endpoint should return appropriate error messages or sanitized responses.

📡 Detection & Monitoring

Log Indicators:

  • Unusual POST requests to /cgi/ajax/phrase with JSON/XML payloads
  • Error logs showing file access attempts or command execution failures
  • Increased traffic to the ajax endpoint from suspicious IPs

Network Indicators:

  • HTTP POST requests with crafted JSON/XML to the vulnerable endpoint
  • Outbound connections from the EPrints server to unknown destinations post-exploitation

SIEM Query:

source="web_logs" AND uri="/cgi/ajax/phrase" AND (method="POST" OR method="PUT") AND (content_type="application/json" OR content_type="application/xml")

🔗 References

📤 Share & Export