CVE-2023-36284

7.5 HIGH

📋 TL;DR

CVE-2023-36284 is an unauthenticated time-based SQL injection vulnerability in Webkul QloApps 1.6.0 that allows remote attackers to bypass authentication and extract entire database contents via GET parameters. This affects all organizations running vulnerable QloApps installations without proper input validation. Attackers can exploit this without credentials to steal sensitive data.

💻 Affected Systems

Products:
  • Webkul QloApps
Versions: 1.6.0
Operating Systems: All
Default Config Vulnerable: ⚠️ Yes
Notes: All installations of QloApps 1.6.0 are vulnerable by default. The vulnerability exists in the handling of GET parameters date_from, date_to, and id_product.

📦 What is this software?

⚠️ Risk & Real-World Impact

🔴

Worst Case

Complete database compromise including user credentials, personal data, payment information, and administrative access leading to full system takeover.

🟠

Likely Case

Data exfiltration of sensitive information including user credentials, personal identifiable information, and business data.

🟢

If Mitigated

Limited or no impact with proper input validation, parameterized queries, and web application firewall rules in place.

🌐 Internet-Facing: HIGH
🏢 Internal Only: MEDIUM

🎯 Exploit Status

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

Time-based SQL injection requires no authentication and can be automated. Public proof-of-concept exists in the provided references.

🛠️ Fix & Mitigation

✅ Official Fix

Patch Version: 1.6.1 or later

Vendor Advisory: https://webkul.com/blog/security-update-qloapps/

Restart Required: No

Instructions:

1. Backup your current installation and database. 2. Download the latest version from Webkul. 3. Replace vulnerable files with patched versions. 4. Verify parameterized queries are implemented for date_from, date_to, and id_product parameters.

🔧 Temporary Workarounds

Web Application Firewall Rules

all

Implement WAF rules to block SQL injection patterns in GET parameters

ModSecurity rule: SecRule ARGS_GET "@detectSQLi" "id:1001,phase:2,deny,status:403,msg:'SQL Injection Attempt'"
nginx: location ~* \.php$ { set $block_sql_injection 0; if ($args ~ "(?i)(union.*select|sleep\(|benchmark\(|date_from|date_to|id_product)") { set $block_sql_injection 1; } if ($block_sql_injection = 1) { return 403; } }

Input Validation Filter

all

Add input validation for vulnerable parameters before processing

PHP filter: if (!preg_match('/^[0-9\-]+$/', $_GET['date_from'])) { die('Invalid input'); }
if (!is_numeric($_GET['id_product'])) { die('Invalid product ID'); }

🧯 If You Can't Patch

  • Implement strict input validation and parameterized queries for all GET parameters
  • Deploy web application firewall with SQL injection detection rules

🔍 How to Verify

Check if Vulnerable:

Test with time-based payload: http://target.com/page.php?date_from=1' AND SLEEP(5)--&date_to=test&id_product=1

Check Version:

Check QloApps version in admin panel or read configuration files

Verify Fix Applied:

Test with same payload - should return error or reject input without delay

📡 Detection & Monitoring

Log Indicators:

  • Multiple requests with SQL keywords in GET parameters
  • Unusual delays in response times (time-based injection)
  • Requests to pages with date_from, date_to, id_product parameters containing special characters

Network Indicators:

  • HTTP GET requests containing SQL injection patterns
  • Repeated requests with varying time delays in parameters

SIEM Query:

source="web_logs" AND (uri_query="*sleep(*" OR uri_query="*benchmark(*" OR uri_query="*date_from*'*" OR uri_query="*date_to*'*" OR uri_query="*id_product*'*")

🔗 References

📤 Share & Export