本文へ移動
English version →
重大 9.8 急ぎ度: 早めに

OpenEMRの患者ポータルに脆弱性、8.4.0で修正

OpenEMRの患者ポータルで、使用済みのワンタイムトークンが再利用でき、PINも総当たりで破られて患者情報が読まれるおそれがあります。7.0.1以上8.4.0未満を使う医療機関は、8.4.0へ更新し、ポータルの公開状況を確認してください。

CVE-2026-124445 公開 更新 執筆・監修: 佐々木 航 人が監修しながらAIを活用して執筆
記事のイメージ(生成 AI による画像)
画像は生成 AI で作成したイメージです

急ぎ度: 早めに

CVSS v3は9.8、v4は9.3の重大な脆弱性で、修正版8.4.0が公開されているため、患者ポータルを外部に公開している環境から順に更新する段階です。

関係があるか

OpenEMR 7.0.1以上8.4.0未満を運用し、患者ポータルのワンタイムログインリンク(請求書の支払い案内など)を使っている医療機関やクリニックです。ポータルをインターネットに公開しているほど、リスクは高くなります。

製品影響を受ける版修正版
OpenEMR 7.0.1以上、8.4.0未満 8.4.0

確かめ方

  1. 1OpenEMRの画面に出るバージョン表示、またはインストール先のversion.phpで、版が7.0.1以上8.4.0未満かを確認します。
  2. 2患者ポータルが外部のネットワークから開けるかを確認します。FaxSMSなどで請求書の支払いリンクを患者に送っているかも、あわせて確認します。
  3. 3Webサーバーのアクセスログで、service_authというパラメーター付きのリクエストが、同じ値で何度も来ていないかを確認します。

何が起きたか

OpenEMRの患者ポータルには、メールやSMSで届くリンクから、パスワードなしで一度だけログインさせる仕組みがあります。この仕組みで、使い終わったはずのトークンが無効にならず、期限まで何度でも使えてしまいます。PINで保護されている場合も、試行回数が制限されていません。突破されると、患者の氏名、生年月日、SSN、住所、処方、検査結果、文書、安全なメッセージ、支払いページが読まれます。

原因はsrc/Common/Auth/OneTimeAuth.phpにあります。トークンにはenforce_onetime_useとmax_access_countという使用制限のフラグが付いていますが、トークンを使うときに読まれていません。使用後に削除も無効化もされず、増えるのはアクセス回数だけです。請求書の支払い案内では、1回限りと指定しているのに、最長14日間使えます。

PINは6桁で、失敗してもトークンには何も起きず、ロックも待ち時間もありません。PINは数字が重複しない形で作られるため、実際の組み合わせは151,200通りです。そのうえ比較が緩く、数値として等しい別の表記でも通ってしまいます。

分類はCWE-307(認証試行の回数制限の不備)で、トークンの再利用についてはCWE-613(セッション期限の不備)も挙げられています。

攻撃の流れ

  1. 1

    トークン入手

    患者に送られたリンクのURLから、service_authトークンを手に入れます。

  2. 2

    トークン再利用

    使用済みでも無効にならず、期限まで何度でもログインできます。

  3. 3

    PINの突破

    PINが必要な場合は、回数制限のない試行と緩い比較で破ります。

  4. 4

    ポータル侵入

    対象の患者として、完全なポータルのセッションが開きます。

  5. 5

    患者情報の閲覧

    診療や個人に関する情報が読み取られます。

公開されている情報をもとにした流れの例です。

どう悪用されるか

認証は不要で、ネットワーク経由で悪用でき、利用者の操作も要りません。ただし、有効なservice_authトークンを手に入れていることが前提です。トークンはURLのクエリに入っており、勧告は入手経路として次を挙げています。

  • メールの傍受
  • ポータルから外部リンクへ移るときのReferer経由の漏えい
  • Webサーバーのアクセスログ
  • 共用端末のブラウザー履歴
  • HTTP通信の中間者攻撃

PINが必須のリンクでは、トークンに加えてPINを突破する必要があります。ただ、突破までの試行に制限はありません。

成功すると、対象の患者として患者ポータルに入られます。CVSSでは機密性・完全性・可用性とも高と評価されています。勧告が具体的に示している被害は、患者情報の閲覧です。

今すぐやること

  1. 1

    OpenEMR 8.4.0へ更新する

    対象の版を使っているなら、修正版の8.4.0へ更新します。患者ポータルを外部に公開している環境を先に進めてください。更新の前に、バックアップを取っておきます。

  2. 2

    いまの版を確認する

    インストール先のversion.phpに版が書かれています。<インストール先>は自社の環境に読み替えてください。

    grep -n "v_" <インストール先>/version.php
  3. 3

    アクセスログに侵害の跡がないか調べる

    service_authパラメーター付きのリクエストが、同じ値で繰り返されていないかを見ます。ポータルのログインフォームへのPOSTが、同じ送信元から大量に来ていないかも確認してください。疑わしい形跡があれば、社内の個人情報漏えい対応の手順で扱います。

  4. 4

    送信済みのリンクの扱いを決める

    更新後に、過去に発行済みのリンクがどう扱われるかは、GitHubのOpenEMR勧告で確認します。請求書の支払いリンクなどは最長14日有効なので、不安がある場合は再発行を検討してください。

すぐ更新できないとき

勧告の本文では、修正版以外の公式な回避策は確認できていません。更新までのつなぎとして、次の対策が考えられます。ただし、一般的なつなぎであり、根本的な解決は更新です。

  • FaxSMSによる請求書リンクの送信を一時的に止める
  • 患者ポータルへのアクセスを、VPNや送信元IPアドレスで制限する
  • リバースプロキシやWAFで、portal/index.phpへの連続したリクエストを絞る
  • ポータル全体を一時停止する

どの対策も、更新までの間だけにしてください。

背景

OpenEMRはオープンソースの電子カルテ・診療管理システムです。患者ポータルは、患者が検査結果や処方、医師とのメッセージを見たり、請求書を支払ったりする窓口で、診療情報がいちばん集まる場所の一つです。

今回の対象は、パスワードなしで入れるワンタイムリンクです。URLそのものが鍵になるため、ホテルの部屋に入れる1回きりのカードキーが、何度でもコピーして使えるような状態になります。しかもURLは、メール、Referer、アクセスログ、ブラウザー履歴など、あちこちに残りやすいものです。この仕組みのonetime_authテーブルとOneTimeAuthクラスは、7.0系で導入されました。そのため、影響範囲は7.0.1から始まります。

よくある質問

Q.CVSSのv3とv4で値が違いますが、どちらを基準にすればよいですか。
A.v3.1は9.8、v4は9.3で、どちらも重大の水準です。社内で使っている評価基準に合わせてください。どちらでも、修正版への更新を優先する点は変わりません。
Q.患者ポータルを使っていなければ、影響はありませんか。
A.OneTimeAuthは患者ポータルのログイン用の部品で、勧告もポータルのセッションが開くことを被害として挙げています。ポータルを有効にしていなければ、悪用の経路は狭いとみられます。ただ、版が7.0.1以上8.4.0未満なら更新の対象です。

まだ分かっていないこと

  • 7.0.1より前の7.0.0が影響を受けるかは、はっきりしません。勧告はonetime_authテーブルの導入時期を7.0.0または7.0.1と書いていますが、CVEの影響範囲は7.0.1以上です。

この記事は、取得元の公開情報をもとに、人が監修しながらAIを活用して執筆しています。執筆と監修は佐々木 航が担い、公開したあとも人が内容を確認しています。誤りに気づいたときは直し、記事の末尾に訂正の行を残します。対応を決める前に、下の原文と参照先も確認してください。

影響パッケージ

パッケージ影響を受ける版 → 修正版
openemropenemr
7.0.1 以上 8.4.0 未満→ 8.4.0
原文の説明 取得元が公開している説明をそのまま載せています (多くは英語)。

OpenEMR from 7.0.1 before 8.4.0 contains a flaw in src/Common/Auth/OneTimeAuth.php that ignores the enforce_onetime_use and max_access_count flags, never revokes consumed service_auth tokens, and checks login_pin without rate limiting or strict comparison. Attackers holding a captured token can replay it or brute-force the PIN to open patient-portal sessions exposing PHI.

出典: CVE.org (CVE Program・cvelistV5) NVD GitHub Advisory

参照URL

当サイトでは、アクセス解析と広告の効果測定のために Cookie を使います。株式会社Game のサイト共通の設定です。 詳しく