CVE-2024-51211

9.8 CRITICAL

📋 TL;DR

This SQL injection vulnerability in OS4ED openSIS-Classic allows attackers to execute arbitrary SQL commands by manipulating the $username_stn_id parameter in resetuserinfo.php. Successful exploitation could lead to data theft, modification, or deletion. All users running openSIS-Classic Version 9.1 are affected.

💻 Affected Systems

Products:
  • OS4ED openSIS-Classic
Versions: Version 9.1
Operating Systems: Any OS running PHP and MySQL/PostgreSQL
Default Config Vulnerable: ⚠️ Yes
Notes: Affects all installations of openSIS-Classic 9.1 regardless of configuration. The resetuserinfo.php file is part of the standard installation.

📦 What is this software?

⚠️ Risk & Real-World Impact

🔴

Worst Case

Complete database compromise including sensitive student/personnel data exfiltration, authentication bypass, remote code execution via database functions, and system takeover.

🟠

Likely Case

Unauthorized access to student records, grade manipulation, personal information theft, and potential privilege escalation within the application.

🟢

If Mitigated

Limited impact with proper input validation, parameterized queries, and database user privilege restrictions in place.

🌐 Internet-Facing: HIGH
🏢 Internal Only: HIGH

🎯 Exploit Status

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

SQL injection vulnerabilities are commonly weaponized. The public GitHub repository contains proof-of-concept details.

🛠️ Fix & Mitigation

✅ Official Fix

Patch Version: Not available

Vendor Advisory: Not available

Restart Required: No

Instructions:

1. Check OS4ED website for security updates
2. Apply any available patches
3. Verify the fix by testing the vulnerable parameter
4. No service restart should be required for PHP file updates

🔧 Temporary Workarounds

Input Validation and Sanitization

all

Add proper input validation and parameterized queries to resetuserinfo.php

Modify resetuserinfo.php to use prepared statements:
$stmt = $db->prepare('SELECT * FROM users WHERE username_stn_id = ?');
$stmt->bind_param('s', $username_stn_id);
$stmt->execute();

File Access Restriction

all

Restrict access to resetuserinfo.php via web server configuration

Apache: Add to .htaccess:
<Files "resetuserinfo.php">
Order Deny,Allow
Deny from all
</Files>
Nginx: Add to server block:
location ~ /resetuserinfo\.php$ {
    deny all;
    return 403;
}

🧯 If You Can't Patch

  • Implement Web Application Firewall (WAF) with SQL injection rules
  • Restrict database user permissions to minimum required privileges

🔍 How to Verify

Check if Vulnerable:

Test the resetuserinfo.php endpoint with SQL injection payloads like: ' OR '1'='1 in the username_stn_id parameter

Check Version:

Check openSIS version in admin panel or review installation files for version markers

Verify Fix Applied:

Attempt SQL injection after applying fixes; successful payloads should return errors or be blocked

📡 Detection & Monitoring

Log Indicators:

  • Unusual SQL error messages in PHP/application logs
  • Multiple failed login attempts followed by SQL syntax in requests
  • Requests to resetuserinfo.php with special characters like quotes, semicolons, or SQL keywords

Network Indicators:

  • HTTP POST/GET requests to resetuserinfo.php containing SQL injection patterns
  • Unusual database query patterns from web server IP

SIEM Query:

source="web_logs" AND uri="*resetuserinfo.php*" AND (query="*' OR*" OR query="*;--*" OR query="*UNION*" OR query="*SELECT*" OR query="*INSERT*" OR query="*UPDATE*")

🔗 References

📤 Share & Export