CVE-2026-23627

8.8 HIGH

📋 TL;DR

An SQL injection vulnerability in OpenEMR's Immunization module allows authenticated users to execute arbitrary SQL queries by manipulating patient_id parameters. This affects all OpenEMR installations prior to version 8.0.0, potentially exposing sensitive patient health information and system credentials.

💻 Affected Systems

Products:
  • OpenEMR
Versions: All versions prior to 8.0.0
Operating Systems: All platforms running OpenEMR
Default Config Vulnerable: ⚠️ Yes
Notes: Requires authenticated access to the Immunization module. Default installations are vulnerable if not patched.

📦 What is this software?

⚠️ Risk & Real-World Impact

🔴

Worst Case

Complete database compromise leading to PHI exfiltration, credential theft, privilege escalation, and potential remote code execution via database functions.

🟠

Likely Case

Unauthorized access to patient records, data exfiltration, and credential harvesting from database tables.

🟢

If Mitigated

Limited impact with proper network segmentation, database permissions, and monitoring detecting SQL injection attempts.

🌐 Internet-Facing: HIGH if OpenEMR is exposed to the internet, as authenticated users can exploit this vulnerability remotely.
🏢 Internal Only: HIGH as any authenticated user (including legitimate healthcare staff) can exploit this vulnerability from within the network.

🎯 Exploit Status

Public PoC: ✅ No
Weaponized: LIKELY
Unauthenticated Exploit: ✅ No
Complexity: LOW

Exploitation requires authenticated access but is technically simple due to direct SQL concatenation. The advisory provides enough detail for attackers to craft exploits.

🛠️ Fix & Mitigation

✅ Official Fix

Patch Version: 8.0.0

Vendor Advisory: https://github.com/openemr/openemr/security/advisories/GHSA-x3hw-rwrg-v25h

Restart Required: No

Instructions:

1. Backup your OpenEMR installation and database. 2. Download OpenEMR 8.0.0 or later from the official repository. 3. Follow the OpenEMR upgrade documentation to apply the update. 4. Verify the patch by checking that patient_id parameters are now properly parameterized in SQL queries.

🔧 Temporary Workarounds

Disable Immunization Module

all

Temporarily disable access to the vulnerable Immunization module while awaiting patching.

# Modify OpenEMR configuration or access controls to restrict access to immunization functionality

Web Application Firewall Rules

all

Implement WAF rules to block SQL injection patterns in patient_id parameters.

# Configure WAF to detect and block SQL injection patterns in POST/GET parameters

🧯 If You Can't Patch

  • Implement strict input validation and sanitization for all patient_id parameters at the application level.
  • Apply database-level controls: restrict application database user permissions, implement query logging, and enable database intrusion detection.

🔍 How to Verify

Check if Vulnerable:

Review the Immunization module source code for direct concatenation of patient_id into SQL queries without parameterization. Check if running version is below 8.0.0.

Check Version:

Check the OpenEMR interface footer or examine the version.php file in the installation directory.

Verify Fix Applied:

Verify that OpenEMR version is 8.0.0 or higher. Check that SQL queries in the Immunization module now use prepared statements with parameter binding.

📡 Detection & Monitoring

Log Indicators:

  • Unusual SQL query patterns in database logs
  • Multiple failed login attempts followed by immunization module access
  • Unexpected database schema changes or data exports

Network Indicators:

  • Unusual SQL syntax in HTTP parameters
  • Large data transfers from database server

SIEM Query:

source="web_logs" AND (patient_id CONTAINS "UNION" OR patient_id CONTAINS "SELECT" OR patient_id CONTAINS "--")

🔗 References

📤 Share & Export