CVE-2020-26008

7.8 HIGH

📋 TL;DR

This vulnerability allows attackers to upload arbitrary PHP files to ShopXO v1.9.0 through the PluginsUpload function, leading to remote code execution. Any ShopXO installation with the vulnerable version is affected, potentially compromising the entire web server. Attackers can gain full control of the affected system.

💻 Affected Systems

Products:
  • ShopXO
Versions: v1.9.0
Operating Systems: All
Default Config Vulnerable: ⚠️ Yes
Notes: Requires admin access to the PluginsUpload function, but this is often accessible in default configurations.

📦 What is this software?

⚠️ Risk & Real-World Impact

🔴

Worst Case

Complete server compromise with attacker gaining root/admin access, data theft, ransomware deployment, and lateral movement to other systems.

🟠

Likely Case

Webshell installation leading to data exfiltration, defacement, or cryptocurrency mining malware deployment.

🟢

If Mitigated

Attack blocked at WAF/web application firewall level with file upload restrictions and proper file type validation.

🌐 Internet-Facing: HIGH
🏢 Internal Only: MEDIUM

🎯 Exploit Status

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

Exploitation requires admin access but is straightforward once access is obtained. Public proof-of-concept exists in GitHub issues.

🛠️ Fix & Mitigation

✅ Official Fix

Patch Version: v1.9.1 or later

Vendor Advisory: https://github.com/gongfuxiang/shopxo/issues/47

Restart Required: No

Instructions:

1. Backup your ShopXO installation and database. 2. Download the latest version from the official repository. 3. Replace the vulnerable files, particularly application/service/PluginsAdminService.php. 4. Verify the fix by checking file upload functionality.

🔧 Temporary Workarounds

Restrict PHP file uploads via web server

all

Configure web server to block PHP file uploads and execution in upload directories

# For Apache: Add to .htaccess in upload directory
<Files *.php>
    Order Deny,Allow
    Deny from all
</Files>
# For Nginx: Add to server block
location ~* \.php$ {
    deny all;
    return 403;
}

Disable plugin upload functionality

all

Temporarily disable the vulnerable PluginsUpload function

# Comment out or remove the PluginsUpload function in application/service/PluginsAdminService.php

🧯 If You Can't Patch

  • Implement strict file upload validation: only allow specific file extensions and verify file content types
  • Place upload directories outside web root and implement proper file permission restrictions (chmod 644 for files, 755 for directories)

🔍 How to Verify

Check if Vulnerable:

Check if ShopXO version is 1.9.0 by examining version files or admin panel. Review application/service/PluginsAdminService.php for missing file type validation.

Check Version:

Check /application/config/version.php or admin panel for version information

Verify Fix Applied:

Attempt to upload a PHP file through the plugin upload interface - it should be rejected. Check that application/service/PluginsAdminService.php contains proper file extension validation.

📡 Detection & Monitoring

Log Indicators:

  • Unusual file uploads to plugin directories
  • PHP file uploads with suspicious names
  • Multiple failed upload attempts followed by successful PHP upload

Network Indicators:

  • POST requests to /index.php?s=/admin/pluginsadmin/upload with PHP file content
  • Unusual outbound connections from web server after file upload

SIEM Query:

source="web_logs" AND (uri="/index.php?s=/admin/pluginsadmin/upload" OR file_extension="php") AND http_method="POST"

🔗 References

📤 Share & Export