CVE-2026-48842:Roundcubevirtuser_query插件预认证SQL注入,补丁已发布四个月仍在被利用"

admin 2026-11-02 14:48:27 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

CVE-2026-48842:Roundcube virtuser\_query 插件预认证 SQL 注入,补丁已发布四个月仍在被利用

网络安全民工

2026年11月2日 09:39
广东

去阅读

一、漏洞定性

Roundcube 的 virtuser_query 插件在处理用户名替换时,使用 preg_replace 而非 str_replace。PHP 的 preg_replace 会对替换字符串中的反斜杠进行二次解析,把 escape() 加上的转义反斜杠吃掉,导致 SQL 注入。攻击者无需任何凭证,在登录请求的 _user 参数中构造载荷即可触发。

项 值
漏洞类型 SQL 注入(CWE-89)
CVSS 3.1 8.1 High (AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H)
影响版本 1.6.x < 1.6.16;1.7.x < 1.7.1
修复版本 1.6.16 / 1.7.1 (2026 年 5 月 24 日发布)
触发前提 virtuser_query 插件已启用且配置了 SQL 语句(默认不启用)
认证要求 无 (预认证,登录页面即可触发)
在野利用 已确认 。加拿大网络安全中心于 2026 年 9 月 21 日发布利用警告

你提供的材料在原理分析上是准确的。preg_replace 的替换串中,\\\\\\' 经过 PCRE 解析后变成 \\\\',MySQL 将 \\\\ 读作字面反斜杠,紧跟的 ' 成为闭合符,后续 UNION 注入生效。1.6.16 将四个函数的 preg_replace 全部替换为 str_replace,修复彻底。

二、关键澄清:利用门槛比 CVSS 分数看起来更高

CVSS 8.1 中的 AC:H(攻击复杂度高)并非随意标注。实际可利用性取决于两个条件:

第一,插件必须启用。virtuser_query 是 Roundcube 的自带插件,但默认不加载。Roundcube 的默认插件列表为空,管理员必须在 config.inc.php 中显式将其加入 $config['plugins'] 才会生效。这意味着大量标准部署并不受影响。

第二,利用是盲注,需要时间。 你贴出的 PoC 使用 SLEEP(3) 做时间盲注,公开的验证脚本同样采用真假两次 SLEEP 对照的方式逐字节读取数据。Check Point 的 IPS 通告也将其描述为“通过反斜杠转义绕过”的 SQL 注入。盲注意味着攻击者需要多次请求才能提取数据,而非一次性导出。

实际风险判断:如果目标启用了 virtuser_query,漏洞是真实的、预认证的、可利用的。如果未启用,该 CVE 与你无关。先确认插件状态,再决定升级优先级。

三、Python 检测脚本(安全版)

以下脚本仅做插件存在性与版本指纹,不发送注入载荷。适合资产排查。

#!/usr/bin/env python3\"\"\"CVE-2026-48842 Roundcube 安全检测(无注入载荷)用法: python cve_2026_48842_check.py https://mail.example.com\"\"\"import sysimport reimport requestsimport urllib3urllib3.disable_warnings()
def check(base):    base = base.rstrip(\"/\")    headers = {\"User-Agent\": \"Mozilla/5.0 (security-check)\"}
    # 1) 确认是 Roundcube,提取版本    try:        r = requests.get(base, headers=headers, timeout=10, verify=False)    except requests.RequestException as e:        print(f\"[-] 请求失败: {e}\")        return
    if \"roundcube\" not in r.text.lower() and \"rcmail\" not in r.text.lower():        print(\"[-] 未检测到 Roundcube 特征\")        return
    m = re.search(r'\"rcversion\"\\s*:\\s*\"?(\\d+\\.\\d+\\.\\d+)', r.text)    version = m.group(1) if m else None    print(f\"[*] 目标: {base}\")    print(f\"[*] Roundcube 版本: {version or '未从页面提取到'}\")
    # 2) 探测 virtuser_query 插件文件是否可访问(间接判断是否安装)    plugin_url = f\"{base}/plugins/virtuser_query/virtuser_query.php\"    try:        rp = requests.get(plugin_url, headers=headers, timeout=8, verify=False)        if rp.status_code == 200:            print(\"[*] virtuser_query 插件文件可访问(存在,但未证明已启用)\")        else:            print(f\"[*] virtuser_query 插件文件返回 {rp.status_code},可能未安装或访问受限\")    except requests.RequestException:        print(\"[*] 插件文件探测失败\")
    # 3) 版本判定    if version:        def parse(v):            return tuple(int(x) for x in v.split(\".\")[:3])        try:            v = parse(version)            if (1, 6, 0) <= v < (1, 6, 16) or (1, 7, 0) <= v < (1, 7, 1):                print(f\"[!] 版本 {version} 在受影响范围内\")                print(\"[!] 请确认 config.inc.php 中是否启用了 virtuser_query 插件\")                print(\"[!] 若已启用,立即升级至 1.6.16 / 1.7.1 或更高\")            else:                print(f\"[+] 版本 {version} 不在受影响范围\")        except Exception:            pass
    print(\"\
[*] 外部黑盒无法确认插件是否启用,需登录服务器检查 config.inc.php\")
if __name__ == \"__main__\":    if len(sys.argv) != 2:        print(f\"用法: {sys.argv[0]} https://target\")        sys.exit(1)    check(sys.argv[1])

说明:插件文件可访问不等于插件已启用。真正的确认方式是检查 config.inc.php 中 $config['plugins'] 数组是否包含 'virtuser_query'。

四、Nuclei 模板(安全指纹版)

id: CVE-2026-48842-roundcube-detect
info:  name: Roundcube virtuser_query CVE-2026-48842 - Safe Version Check  author: security-research  severity: high  description: |    检测 Roundcube 版本是否在 CVE-2026-48842 受影响范围。不发送注入载荷。    插件 virtuser_query 默认不启用,需人工确认。  reference:    - https://roundcube.net/news/2026/05/24/security-updates-1.6.16-and-1.7.1    - https://github.com/4minx/CVE-2026-48842  classification:    cvss-metrics: CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H    cvss-score: 8.1    cwe-id: CWE-89  tags: cve,cve2026,roundcube,sqli,detect
http:  - method: GET    path:      - \"{{BaseURL}}\"
    matchers-condition: and    matchers:      - type: word        part: body        words:          - \"roundcube\"          - \"rcmail\"        condition: or      - type: regex        part: body        name: version        regex:          - '\"rcversion\"\\s*:\\s*\"?(1\\.6\\.(?:[0-9]|1[0-5])|1\\.7\\.0)'
    extractors:      - type: regex        part: body        name: detected_version        regex:          - '\"rcversion\"\\s*:\\s*\"?([\\d.]+)'        group: 1

运行方式:

nuclei -t CVE-2026-48842-roundcube-detect.yaml -u https://mail.example.com

为什么不提供触发型模板:公开 PoC 使用时间盲注(SLEEP),发送此类载荷会对目标数据库造成实际负载,且盲注需要多次请求才能确认,不适合在 Nuclei 中作为单次检测执行。版本指纹已足以完成资产筛查。

五、修复与自查

升级:1.6.x → 1.6.16;1.7.x → 1.7.1。注意 Roundcube 后续又发布了 1.6.19/1.7.4 和 1.6.20/1.7.5,包含其他安全修复,建议直接升至最新补丁版本。

无法升级时的缓解:从 config.inc.php 的 $config['plugins'] 中移除 virtuser_query。这是最直接的缓解,因为漏洞完全依赖于该插件。

自查命令(在服务器上执行):

# 确认版本grep -r \"RCMAIL_VERSION\" /path/to/roundcube/program/include/rcmail.php | head -1
# 检查插件是否启用grep -A20 \"plugins\" /path/to/roundcube/config/config.inc.php | grep virtuser

若 virtuser 出现在插件列表中,且版本低于 1.6.16 / 1.7.1,立即升级或禁用插件。

六、在野利用态势

加拿大网络安全中心于 9 月 21 日更新通告,引用开源报告确认该漏洞已被积极利用。Mallory 的汇总提到,Coalition 在其蜜罐上观测到利用尝试。Proofpoint 曾将 Roundcube 漏洞利用与疑似中国关联的 UNK\_MassTraction 组织关联,该组织利用已知漏洞部署 web shell 或 VShell 后利用工具。

但需要注意:这些报告确认的是利用尝试,并非大规模生产系统失陷。SQL 注入的影响受限于 Roundcube 数据库账户的权限。Roundcube 的应用数据库与 IMAP 邮件存储通常是分离的,SQL 注入本身不等于直接读取所有用户邮件。


总结:CVE-2026-48842 是一个真实的预认证 SQL 注入,CVSS 8.1,已有在野利用报告。但它的触发严格依赖 virtuser_query 插件被启用,而该插件默认关闭。先查插件状态,再决定今晚是否熬夜。 如果插件启用了,升级到 1.6.16/1.7.1 以上(推荐直接上 1.6.20/1.7.5)。如果没启用,这个 CVE 可以排到其他紧急事项之后。

    CVE-2026-48842:Roundcubevirtuser_query插件预认证SQL注入,补丁已发布四个月仍在被利用" 网络安全文章

    CVE-2026-48842:Roundcubevirtuser_query插件预认证SQL注入,补丁已发布四个月仍在被利用"

    CVE-2026-48842是Roundcubevirtuser_query插件的预认证SQL注入漏洞,CVSS8.1,已有在野利用。漏洞源于preg_replace二次解析反斜杠导致注入,但触发依赖插件默认未启用。建议先确认插件状态,若启用需升级至1.6.16/1.7.1以上或直接禁用插件。文章提供安全检测脚本与Nuclei指纹模板,强调盲注利用门槛较高。
    轩辕docker镜像如何使用" 网络安全文章

    轩辕docker镜像如何使用"

    本文介绍轩辕docker镜像服务,指出免费镜像不稳定需频繁修改配置并重启服务,推荐付费版入门款一年8元含50G流量,支持私有域名,可搭建内部docker缓存站减少上游依赖,提供具体搭建配置示例,建议用户考虑付费方案以提升稳定性。
    网络安全招聘风向变了!AI技能需求一年翻倍,安全工程师必须掌握哪些新能力?" 网络安全文章

    网络安全招聘风向变了!AI技能需求一年翻倍,安全工程师必须掌握哪些新能力?"

    G7国家网络安全招聘中要求AI技能的岗位占比一年内从14.2%增至28.5%,高级岗位招聘增长65%而初级岗位仅增5.9%。企业更看重伦理判断、系统性思维等难以自动化的能力。文章分析了SOC分析师角色从处理告警转向监督AI智能体,安全工程师需掌握Python自动化、提示词工程等新技能,并提出了企业应对的五个实践方向,强调人机协同与人才培养。
    评论:0   参与:  0