Skip to main content

OpenEMR CVE-2026-49142

| EUVDEUVD-2026-112788 HIGH
SQL Injection (CWE-89)
2026-10-29 VulnCheck GHSA-4x43-68v3-4x7c
8.7
CVSS 4.0 · Vendor: VulnCheck
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Authenticate with Clinician-level account
  2. Delivery
    POST crafted form_icd_codes[] to syndromicsurveillance/index
  3. Exploit
    Inject unquoted IN()/UNION with hex literals
  4. Execution
    extractvalue() error-based dump of bcrypt hashes, stacked UPDATE resets password
  5. Impact
    Full administrative account takeover

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V1 - Encoding and Sanitization Parameterized queries, prepared statements
MITRE ATT&CK

2 techniques across 2 tactics: Initial Access, Persistence

The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up.

Exploitation Conditions

Requires an authenticated OpenEMR session with Clinician-level privileges or higher (the CVSS vector confirms PR:L) and network access to the Syndromic Surveillance module's syndromicsurveillance/index endpoint. The concrete trigger is the form_icd_codes[] POST parameter, whose values are imploded directly into an unquoted numeric SQL IN() clause where add_escape_custom() (which only escapes quotes/backslashes) provides no protection; the vendor-documented payload is comment-free and parenthesis-balanced (re-opening IN( to keep four bound placeholders intact) and uses hex-encoded literals since quotes are stripped. No non-default configuration is described as necessary beyond the module being present and the attacker holding a Clinician+ account - that credential requirement is the primary limiting factor, confining realistic exploitation to insiders or attackers who have compromised a privileged account rather than unauthenticated remote attackers.

Impact

Signals are mostly consistent and point to a genuine but access-gated priority. The CVSS 4.0 base score of 8.7 (High) reflects a network-reachable (AV:N), low-complexity (AC:L), no-interaction (UI:N) flaw with high confidentiality, integrity and availability impact - but it requires PR:L, i.e. an authenticated Clinician-level or higher account, which is the single most important mitigating factor. The vendor security advisory (GHSA-w99c-jwcm-24hh) publishes a complete, step-by-step proof-of-concept exploit script with confirmed output, so a working exploitation path is documented and reproducible. The vuln.today Decision label is 'this_week' (not act_now/emergency), consistent with a serious flaw that still demands valid privileged credentials rather than being remotely unauthenticated. No EPSS probability and no CISA KEV status were provided in the input, so widespread or confirmed in-the-wild exploitation cannot be asserted - exploitation status here is best characterized as a published PoC rather than observed active attacks. Net: this is a real, high-impact issue warranting prompt patching (the chain yields full administrative takeover), but the authentication prerequisite means realistic exploitation depends on a malicious insider or a compromised/phished Clinician account rather than opportunistic internet-wide scanning. Missing data to note explicitly: EPSS score absent and KEV status absent in the provided intelligence.

Exploit ScenarioDerived

An attacker holding a Clinician-level (or higher) OpenEMR session - a malicious insider, or an outsider who phished or otherwise compromised a clinician's credentials - submits crafted values in the form_icd_codes[] POST parameter to the syndromicsurveillance/index endpoint. Using an unquoted numeric IN()/UNION injection with hex-encoded literals, they abuse MySQL extractvalue() for error-based exfiltration of all bcrypt hashes from users_secure, then run a stacked UPDATE to reset the admin password and take over the account. A complete working PoC script (sqli_takeover.py) with confirmed output is published in the vendor's GHSA advisory.

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.9).
Patch available 0.4% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Oct 29, 2026

OpenEMR's Syndromic Surveillance module exposes an authenticated, error-based SQL injection through the form_icd_codes[] POST parameter on the syndromicsurveillance/index endpoint, letting any account with Clinician-level privileges or higher read and write arbitrary database contents. Successful exploitation leaks every row of users_secure - including bcrypt password hashes for administrators - and the same injection point supports stacked UPDATE statements that reset a chosen account's password, yielding full administrative takeover. The vendor advisory (GHSA-w99c-jwcm-24hh) documents a working proof-of-concept script that dumps hashes and confirms the admin password reset against a live instance; the CVSS vector is PR:L, so the Clinician credential is the main gate, confining realistic abuse to insiders or attackers who already hold a privileged session. No CISA KEV entry or active-exploitation reporting accompanies this CVE.

RemediationAI

Upgrade to OpenEMR 8.5.0, the release that contains the fix published in PR 14329 (https://github.com/openemr/openemr/pull/14329) and commit 9b52cc0fc3a4eddd9fa7a096f6a3ac2a57d772d0; both the fetch_result and generate_hl7 query paths now cast every form_icd_codes[] element to int and omit the IN() clause when the cast list is empty, so the injection surface is removed rather than escaped. Release notes and the patched build are at https://github.com/openemr/openemr/releases/tag/v8_5_0 and technical detail is in the advisory https://github.com/openemr/openemr/security/advisories/GHSA-w99c-jwcm-24hh. Until 8.5.0 is deployed, the practical constraint is the prerequisite the assessment identifies: only accounts holding Clinician-level or higher can reach the vulnerable path, so auditing and tightly rationing privileged OpenEMR accounts, and reviewing existing clinician sessions for signs of tampering, directly shrinks the attack surface - noting that any account above the threshold remains fully capable of the attack. Because exploitation rewrites users_secure.password_hash via stacked queries, treat any pre-patch exposure as a credential compromise event: after upgrading, force password resets for all administrative accounts and invalidate active sessions, since hash extraction also permits offline cracking of the leaked bcrypt values.

Affected VersionsENISA

OpenEMR 0 <8.5.0

Affected Packages

euvd openemr fix: 8.5.0

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 1 package in euvd

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

The flaw is CWE-89 (SQL injection) in OpenEMR's Zend-based Syndromicsurveillance module, specifically SyndromicsurveillanceTable.php, where the values of $_POST['form_icd_codes'] are passed through add_escape_custom() and then imploded directly into a raw SQL fragment of the form "AND c.id IN (".implode(',', $code_selected).")". Because add_escape_custom() is a PHP-era helper that only escapes quotes and backslashes, it offers no protection in an unquoted numeric context - the injected text is never treated as a string literal. The same array is interpolated at two points in one query, at c.id IN (<inj>) and again inside a UNION DISTINCT SELECT, and the surrounding statement also carries four bound ? placeholders. That constraint defeats naive payloads: a trailing '--' comment would strip two placeholders while four parameters remain bound, so the DBAL driver rejects the query. The vendor-documented payload is instead comment-free and parenthesis-balanced - closing the IN( list, injecting the malicious predicate, then re-opening IN( - and delivers all string literals as hex-encoded values because quote characters are stripped. Exfiltration uses MySQL's extractvalue() to force subquery evaluation so results surface inside XPATH error messages returned in HTTP responses, with SUBSTRING() used to walk bcrypt hashes out of users_secure row by row. The same injection point accepts stacked queries, so an UPDATE can set a target account's password_hash to an attacker-supplied bcrypt value. The upstream fix in PR 14329 replaces the string interpolation with an array_map casting each element to int and only emitting the IN() clause when the resulting ID list is non-empty.

Know when Openemr gets its next vulnerability

  • Watch products and get an email when something new is published
  • Check this CVE against your own stack and servers
  • Exploit and PoC references, threat intelligence from 22 sources

No credit card · 7-day full trial

Severity by source

Vendor (VulnCheck) PRIMARY 8.7 HIGH
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N
vuln.today AI 8.8 HIGH

Network-reachable endpoint (AV:N) with no interaction (UI:N); requires a Clinician-level account so PR:L; arbitrary read and modify of DB contents yields C/I/A High.

3.1 AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
4.0 AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N

Primary rating from Vendor (VulnCheck).

CVSS VectorVendor: VulnCheck

Attack Vector
Network
Attack Complexity
Low
Attack Requirements
None
Privileges Required
Low
User Interaction
None
Vulnerable system: Confidentiality
High
Vulnerable system: Integrity
High
Vulnerable system: Availability
High
Subsequent system: Confidentiality
None
Subsequent system: Integrity
None
Subsequent system: Availability
None

DescriptionCVE.org

OpenEMR before 8.5.0 contains an authenticated SQL injection vulnerability in the Syndromic Surveillance module that allows users with Clinician-level privileges to read and modify arbitrary database contents by submitting crafted values in the form_icd_codes[] POST parameter to the syndromicsurveillance/index endpoint. Attackers can inject an unquoted numeric IN() clause and UNION DISTINCT SELECT statement using hex-encoded literals to abuse MySQL extractvalue() for error-based exfiltration of bcrypt password hashes and execute stacked queries that reset passwords, resulting in full administrative account takeover.

Technical POC Analysis

CWE-89 (SQL injection), in the OpenEMR Syndromic Surveillance Zend module: interface/modules/zendmodules/module/Syndromicsurveillance/src/Syndromicsurveillance/Model/SyndromicsurveillanceTable.php, f…

Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.

Executive ViewAI

Why It Matters

CVE-2026-49142 is a high-severity SQL injection in OpenEMR's Syndromic Surveillance module that allows any Clinician-level user to extract administrator password hashes and reset credentials, enabling full administrative takeover. This puts protected health information and system integrity at risk, with insider misuse or compromised clinician accounts as the primary threat vectors. Leadership should prioritize remediation given the potential for data breach and operational disruption.

Business Impact: High
Compensating Controls

Apply vendor patch.

Threat Intelligence Overview

EPSS Score
0.4%
Top 71% exploitable
Prevalence
Medium
popular open-source EHR, but healthcare-specific, not ubiquitous general infrastructure
Data Quality
5 sources
Confidence: Medium

How this decision was reached

The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.

SignalValue
Severity HIGH
CISA KEV No
Public POC No
EPSS 0.4%
Patch available Yes
Active threat No
Deciding rule
HIGH severity (CVSS 7.0-8.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Scheduled
Exploitation· derived
None
System Exposure· derived
Open
Automatable· derived
No
Human Impact
High

Priority Score

44
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +44
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

SQL injection exploits the way applications construct database queries by mixing user input directly into SQL statements.

CVE-2013-10044 HIGH POC
8.7 Aug 01

An authenticated SQL injection vulnerability exists in OpenEMR ≤ 4.1.1 Patch 14 that allows a low-privileged attacker to

CVE-2026-24898 CRITICAL POC
10.0 Mar 03

Unauthenticated token disclosure in OpenEMR before 8.0.0. CVSS 10.0. PoC and patch available.

CVE-2026-24848 CRITICAL POC
9.9 Mar 03

Path traversal in OpenEMR 7.0.4 disposeDocument() allows file access. PoC available.

CVE-2026-24849 CRITICAL POC
9.9 Feb 25

Path traversal in OpenEMR electronic health records before fix allows authenticated users to read arbitrary files on the

CVE-2026-24908 CRITICAL POC
9.9 Feb 25

SQL injection in OpenEMR electronic health records before fix. Authenticated users can execute arbitrary SQL through the

CVE-2024-22611 CRITICAL POC
9.8 Apr 03

OpenEMR 7.0.2 is vulnerable to SQL Injection via \openemr\library\classes\Pharmacy.class.php, \controllers\C_Pharmacy.cl

CVE-2024-37734 CRITICAL POC
9.8 Jun 26

An issue in OpenEMR 7.0.2 allows a remote attacker to escalate privileges viaa crafted POST request using the noteid par

CVE-2026-25146 CRITICAL POC
9.6 Mar 03

Information disclosure in OpenEMR 5.0.2 to before 8.0.0 exposes sensitive data. PoC and patch available.

CVE-2026-39932 CRITICAL POC
9.4 Aug 03

Remote code execution in OpenEMR through 8.2.0 lets an authenticated administrator poison the document category tree so

CVE-2012-0992 HIGH POC
8.5 Feb 07

interface/fax/fax_dispatch.php in OpenEMR 4.1.0 allows remote authenticated users to execute arbitrary commands via shel

CVE-2015-4453 MEDIUM
5.0 Jul 05

interface/globals.php in OpenEMR 2.x, 3.x, and 4.x before 4.2.0 patch 2 allows remote attackers to bypass authentication

CVE-2018-15152 CRITICAL POC
9.1 Aug 15

Authentication bypass vulnerability in portal/account/register.php in versions of OpenEMR before 5.0.1.4 allows a remote

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy