{"id":"CVE-2026-103019","kind":"vulnerability","aliases":["CVE-2026-103019"],"related":[],"title":"OpenEMR: logout endpoint open redirect enables phishing from legitimate links","description":"OpenEMR is a free and open source electronic health records and medical practice management application. Prior to 8.3.0, userSessionLogout() in src/RestControllers/AuthorizationController.php uses decodeToken() to process an id_token_hint without verifying its signature and, when the referenced trusted session is absent, redirects to the caller-supplied post_logout_redirect_uri before validating it against the client's registered redirect URIs. An unauthenticated attacker can craft a logout link that sends a user to an arbitrary external site and invalidates the user's session, enabling convincing phishing flows from the legitimate logout endpoint. The endpoint is reachable when the OpenEMR REST API is enabled. This issue is fixed in version 8.3.0.","summary":"OpenEMR's logout handler redirects to an attacker-supplied URL before checking it against registered redirect URIs, and it does not verify the signature of the id_token_hint it reads. An attacker can craft a logout link on the real OpenEMR site that sends a user to an external page and ends their session.","severity":"medium","cvss":4.3,"epss":null,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["healthcare","openemr","php","runtime","self-hosted"],"not_affected_if":["rest-api-disabled","version-8.3.0-or-later"],"how_to_check":"- Confirm the OpenEMR version in use, for example from the version shown in the admin footer or the `version` file in the install directory.\n- Check whether the REST API is enabled in the OpenEMR globals or API settings; the sources say the endpoint is reachable only when it is.","fix":"- OpenEMR versions before `8.3.0`: move to `8.3.0`.","status":"open","published_at":"2026-11-05T20:17:37+00:00","first_seen_at":"2026-11-05T20:40:43+00:00","triaged_at":"2026-11-05T20:43:34+00:00","updated_at":"2026-11-05T20:43:34+00:00","category":"runtime","confidence":0.7,"triage":{"at":"2026-11-05T20:43:34Z","model":"claude-haiku-5-5","output":{"fix":"- OpenEMR versions before `8.3.0`: move to `8.3.0`.","reach":"internet","title":"OpenEMR: logout endpoint open redirect enables phishing from legitimate links","impact":"low","summary":"OpenEMR's logout handler redirects to an attacker-supplied URL before checking it against registered redirect URIs, and it does not verify the signature of the id_token_hint it reads. An attacker can craft a logout link on the real OpenEMR site that sends a user to an external page and ends their session.","audience":"businesses","category":"runtime","nicknames":[],"who_cares":["openemr","healthcare","self-hosted","php"],"confidence":0.7,"fix_status":"available","needs_auth":"no","worst_case":"users are phished through a legitimate logout link and their session ends","analyst_note":"","how_to_check":"- Confirm the OpenEMR version in use, for example from the version shown in the admin footer or the `version` file in the install directory.\n- Check whether the REST API is enabled in the OpenEMR globals or API settings; the sources say the endpoint is reachable only when it is.","plain_action":"","needs_analyst":false,"not_affected_if":["rest-api-disabled","version-8.3.0-or-later"],"who_is_affected":"Organizations running OpenEMR 8.2.x or earlier with the REST API enabled are exposed to crafted logout links. Installations without the REST API enabled, or already on 8.3.0 or later, are not affected. Exploitation requires a user to click a link, and the attacker needs no account.","user_interaction":"yes","needs_special_setup":"yes","severity_if_unknown":"medium"},"cost_usd":0.000727,"input_tokens":4400,"output_tokens":574,"severity_before":"medium"},"analyst_status":null,"analyst_note":null,"search":"'-103019':13A,16A '-2026':12A,15A '8.3.0':97C,190C 'absent':120C 'api':181C 'applic':94C 'arbitrari':155C 'attack':32B,57B,143C 'attacker-suppli':31B 'caller':125C 'caller-suppli':124C 'check':36B 'client':136C 'convinc':165C 'craft':59B,145C 'cve':11A,14A 'decodetoken':102C 'electron':87C 'enabl':6A,164C,183C 'end':77B 'endpoint':3A,172C,174C 'extern':74B,156C 'fix':187C 'flow':167C 'free':83C 'handler':27B 'health':88C 'healthcar':17B 'hint':53B,108C 'host':23B 'id':51B,106C 'invalid':159C 'issu':185C 'legitim':9A,170C 'link':10A,62B,148C 'logout':2A,26B,61B,128C,147C,171C 'manag':93C 'medic':91C 'open':4A,85C 'openemr':1A,18B,24B,66B,80C,179C 'page':75B 'phish':7A,166C 'php':19B 'post':127C 'practic':92C 'prior':95C 'process':104C 'reachabl':176C 'read':55B 'real':65B 'record':89C 'redirect':5A,28B,40B,121C,129C,139C 'referenc':116C 'regist':39B,138C 'rest':180C 'runtim':20B 'self':22B 'self-host':21B 'send':69B,150C 'session':79B,118C,163C 'signatur':48B,112C 'site':67B,157C 'sourc':86C 'src/restcontrollers/authorizationcontroller.php':100C 'suppli':33B,126C 'token':52B,107C 'trust':117C 'unauthent':142C 'uri':41B,130C,140C 'url':34B 'use':101C 'user':71B,152C,161C 'usersessionlogout':98C 'valid':132C 'verifi':46B,110C 'version':189C 'without':109C","nicknames":[],"mitigations":[],"who_affected":"Organizations running OpenEMR 8.2.x or earlier with the REST API enabled are exposed to crafted logout links. Installations without the REST API enabled, or already on 8.3.0 or later, are not affected. Exploitation requires a user to click a link, and the attacker needs no account.","tier":"C","verified":{},"analyst_revisit_at":null,"fix_status":"available","audience":"businesses","plain_action":null,"pkeys":[],"ptokens":[],"labels":["healthcare","medium","openemr","php","runtime","selfhosted"],"campaign_type":null,"first_public_at":"2026-08-18T09:05:47+00:00","kev":null,"cvss_vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:L/A:N","cvss_by":"security-advisories@github.com","poc_count":0,"sources":[{"source":"nvd","external_id":"CVE-2026-103019","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-103019","severity":null,"published_at":"2026-11-05T20:17:37+00:00","modified_at":"2026-11-05T20:17:37+00:00","first_seen_at":"2026-11-05T20:40:43+00:00","fetched_at":"2026-11-05T20:40:43+00:00","note":null}],"documents":[{"id":79795,"url":"https://github.com/openemr/openemr/commit/50f789fad45ada625fe8d0faf0c7a9c15ef52aa5","title":"Patch: github.com","kind":"other","source":"nvd","publisher":"vendor","text":null,"published_at":null,"relation":"fix","confidence":null,"note":"Patch: github.com"},{"id":79793,"url":"https://github.com/openemr/openemr/releases/tag/v8_3_0","title":"Release notes: github.com","kind":"release","source":"nvd","publisher":"vendor","text":null,"published_at":null,"relation":"fix","confidence":null,"note":"Release notes: github.com"},{"id":79797,"url":"https://github.com/openemr/openemr/security/advisories/GHSA-5h9g-m7q2-pv45","title":"Vendor advisory: github.com","kind":"vendor","source":"nvd","publisher":"vendor","text":null,"published_at":"2026-08-18T09:05:47+00:00","relation":"advisory","confidence":null,"note":"Vendor advisory: github.com"}],"exploit_sources":[],"notice":"Free to read, with fair use of about 60 pages a minute. For higher limits or API access: sales@infrastack.ai"}