一、先说结论:这是已确认在野利用的高优先级事件

已确认事实

Cisco 在 2026 年 9 月 14 日首次发布安全公告,并于 9 月 17 日更新为 1.1 版。

漏洞编号为 CVE-2026-76461,类型为 CWE-89:SQL 命令中特殊元素的不当中和,CVSS 3.1 基础评分为 9.8

根据 Cisco 公告:

  • 攻击者无需认证;

  • 攻击可通过网络远程完成;

  • 不需要用户交互;

  • 物理与虚拟 Secure Email Gateway 均受影响;

  • 是否受影响与设备配置无关;

  • 成功利用可执行任意 SQL 语句,并进一步以 root 权限执行操作系统命令;

  • Cisco PSIRT 已确认 2026 年 9 月存在现实利用;

  • 没有能够完整修复问题的配置级绕过措施。

CISA 同日将该漏洞加入已知被利用漏洞目录(KEV)。CVE 记录中的 CISA 补充数据将其标记为“可自动化利用、技术影响完全”。

需要立即核对的修复版本

AsyncOS 分支首个修复版本
15.5 及更早分支15.5.5-014
16.016.0.4-302
16.516.5.0-780

Cisco 建议仍在 16.5 之前版本的客户迁移到 16.5.0-780。Cisco Secure Email Cloud 设备已由厂商升级到该版本。

风险判断

这是典型的 P0 处置事项,而不是等待常规补丁窗口的普通漏洞。

原因不只在于 9.8 分,也不只在于“可远程利用”,而在于漏洞同时满足以下条件:

  1. 邮件网关天然接收来自互联网的输入;

  2. 攻击入口处于邮件解析路径,不要求攻击者进入管理界面;

  3. 成功利用后的权限是 root;

  4. 厂商已经确认现实攻击;

  5. root 权限意味着设备本地日志和检测线索可能被隐藏或删除;

  6. 集群节点之间使用的私钥也可能暴露,风险可从单节点扩散到其他成员。


二、为什么它比普通 SQL 注入更危险

很多团队看到 CWE-89,第一反应是“数据库里的数据会被读走或修改”。

这个判断只覆盖了攻击链的中间一段。

在本事件中,Cisco 给出的影响链是:

外部邮件
   ↓
邮件解析逻辑未充分校验
   ↓
攻击者控制的内容进入 SQL 语境
   ↓
执行任意 SQL 语句
   ↓
借助数据库的系统交互能力
   ↓
以网关底层操作系统的 root 权限执行命令

这条路径至少跨越了三层信任边界。

边界一:邮件内容不应获得查询语言语义

邮件是复杂输入。

它包含头字段、正文、附件、MIME 边界、字符集、编码、嵌套消息和各种格式化元数据。解析器会把这些字段转换为结构化数据,再交给策略引擎、隔离区、追踪系统或数据库。

安全不变量应该是:

外部邮件中的任意字节,在进入数据库前都只能作为参数值存在,不能改变 SQL 的语法结构。

如果代码把解析得到的字符串直接拼接进查询模板,那么一个原本只是“值”的字段,就可能获得引号、运算符、子句或新语句的语法能力。

边界二:数据库账号不应拥有与业务无关的高危能力

即便第一层失败,第二层仍可以限制爆炸半径。

邮件处理进程使用的数据库身份,如果只允许访问必要表、必要列和必要存储过程,注入后的能力应被压缩在最小范围内。

但如果数据库角色可以调用能够触达操作系统的特权功能,那么“执行任意 SQL”就可能不再止于数据层。

Cisco 公告给出的检测线索包含对 COPY ... TO PROGRAM 形态的搜索。这说明防守方应关注的是数据库语句触发外部程序的行为,而不能只查找典型的读取或删表痕迹。

本文不会给出可执行的 SQL 载荷。对防守团队而言,知道应检测“数据库向外部程序桥接”的语义已经足够。

边界三:数据库进程不应把危险能力带入 root 域

真正把严重度推到最高的,是最后一层权限边界。

Cisco 明确表示,成功利用后可在底层操作系统上以 root 权限执行任意命令。

这意味着攻击者的可能能力不再局限于邮件数据:

  • 读取设备上的敏感配置;

  • 获取安装在设备上的凭据和加密材料;

  • 修改服务和启动配置;

  • 建立持久化;

  • 操作本地日志;

  • 访问集群通信使用的 SSH 私钥;

  • 以边界设备身份访问其他网络资源。

这里需要明确区分事实和推断。

事实:Cisco 确认 root 命令执行、现实利用以及集群私钥可能暴露。

条件式推断:云凭据泄露、横向移动、邮件内容外泄或其他系统被接管,取决于设备上实际保存的材料、网络连通性和攻击者行为,不能在没有取证证据时写成已经发生。


三、漏洞形成的代码模式

Cisco 没有公开受影响的完整源代码或可直接对照的补丁差异,因此不能把下面的模型称为厂商实现。

下面只用概念等价代码说明问题的通用结构。

缺陷模式:结构化解析不等于安全参数化

def save_mail_event(parsed_mail, database):
    sender = parsed_mail["sender"]
    subject = parsed_mail["subject"]

    # 危险示意:外部字段被拼进 SQL 文本
    sql = (
        "INSERT INTO mail_events(sender, subject) VALUES ('"
        + sender
        + "', '"
        + subject
        + "')"
    )

    database.execute(sql)

上游已经把邮件解析成字典,并不意味着其中的值已经安全。

parsed_mail["subject"] 是结构化字段,但它仍然来自不可信边界。只要它被拼进 SQL 文本,数据就可能重新获得语法能力。

修复模式:让数据和值的通道彻底分离

def save_mail_event(parsed_mail, database):
    sender = require_text(parsed_mail["sender"], max_length=320)
    subject = require_text(parsed_mail["subject"], max_length=998)

    database.execute(
        "INSERT INTO mail_events(sender, subject) VALUES (?, ?)",
        (sender, subject),
    )

参数化查询负责保证值不会改变 SQL 结构;长度、类型和业务规则校验负责限制输入规模与允许语义。两者不能互相替代。

仅仅执行以下操作并不构成可靠修复:

  • 手工替换单引号;

  • 删除少数关键字;

  • 对字段做 URL 编码或 HTML 转义;

  • 依赖上游邮件解析器“已经标准化”;

  • 用正则尝试识别所有恶意 SQL;

  • 只在 Web 管理入口增加认证。

SQL 安全依赖的是协议级参数绑定,而不是越来越长的黑名单。


四、一个不连接数据库的无害复现实验

下面的实验不会构造真实攻击语句,不会连接 Secure Email Gateway,也不会执行任何系统命令。

它只验证一条安全不变量:外部值是否改变了最终查询的结构

from dataclasses import dataclass


@dataclass(frozen=True)
class Query:
    text: str
    params: tuple[str, ...]


def vulnerable(subject: str) -> Query:
    return Query(
        text="INSERT INTO mail_events(subject) VALUES ('" + subject + "')",
        params=(),
    )


def fixed(subject: str) -> Query:
    return Query(
        text="INSERT INTO mail_events(subject) VALUES (?)",
        params=(subject,),
    )


def test_query_shape_is_constant():
    ordinary = "Quarterly report"
    boundary_probe = "UNTRUSTED' VALUE"

    # 缺陷模型:输入改变了 SQL 文本本身
    assert vulnerable(ordinary).text != vulnerable(boundary_probe).text

    # 修复模型:SQL 结构保持恒定,变化只存在于参数通道
    assert fixed(ordinary).text == fixed(boundary_probe).text
    assert fixed(ordinary).params != fixed(boundary_probe).params

这个测试没有证明 Cisco 的实际代码如何实现,也不能用于判断某台设备是否已经被利用。

它表达的是适合写入单元测试和代码审查规范的安全属性:

对任意外部输入,查询模板必须保持不变;只有绑定参数可以变化。

在真实系统里,还应补充属性测试或模糊测试,覆盖:

  • MIME 多层嵌套;

  • 不同字符集与转码;

  • 折叠头字段;

  • 超长字段;

  • 空字节与控制字符;

  • 重复头字段;

  • 附件文件名;

  • 解码前后长度差异;

  • 正常化前后语义变化。


五、为什么邮件网关是高价值攻击面

邮件网关通常被当成保护其他系统的安全设备,却具备四个容易被忽视的风险特征。

1. 它必须暴露给不可信网络

邮件系统的职责决定了它要接收外部发送者的数据。传统“把管理端口藏在内网”的做法,并不能消除邮件数据路径中的漏洞。

2. 它解析的是高度复杂、攻击者可塑形的格式

解析器面对的不只是纯文本,还包括递归编码、压缩内容、附件、HTML、富媒体、签名和各种边界条件。

格式复杂度会放大输入验证、规范化和数据流追踪的难度。

3. 它往往同时拥有敏感材料和广泛网络可达性

邮件网关可能保存:

  • TLS 私钥与证书;

  • 管理员或目录服务凭据;

  • 集群通信密钥;

  • 中继配置;

  • 日志与邮件追踪数据;

  • 到内部 DNS、LDAP、SIEM、备份或管理系统的连接。

这些资产使其不仅是入口,也是潜在的横向移动跳板。

4. “安全设备”标签容易制造过度信任

很多网络策略允许安全设备访问更多内部资源,或者减少对其出站行为的监控。

一旦安全设备本身被接管,这种信任就会反向放大攻击者能力。


六、已经确认在野利用,应该如何排查

P0:当天完成

1. 盘点版本,不要只看设备是否“自动更新”

逐台记录:

  • 物理或虚拟形态;

  • 独立节点或集群成员;

  • AsyncOS 完整版本号;

  • 互联网邮件入口;

  • 管理接口暴露范围;

  • 外部日志和流量数据是否可用;

  • 最近一次配置备份时间。

版本低于对应修复版本的设备,应立即进入升级与事件排查流程。

2. 检查 Cisco 给出的邮件日志线索

Cisco 建议在 mail_logs 中搜索可疑 SQL 语句,并给出了 COPYTO PROGRAM 组合的检测提示。

注意:这是一条非穷尽线索。

没有命中不能证明安全,因为:

  • 攻击语句可能采用不同大小写或格式;

  • 日志保留期可能不足;

  • 集群中不同节点的日志彼此独立;

  • root 权限攻击者可能删除或修改本地证据;

  • 成功利用不一定在预期字段中留下完整字符串。

3. 同时检查设备外部的证据

Cisco 明确建议交叉检查网络和防火墙日志,重点关注:

  • 邮件网关向陌生外部地址发起的连接;

  • 非预期上传;

  • 从可疑地址下载文件;

  • 不符合业务基线的 DNS 请求;

  • 突然出现的长连接或隧道特征;

  • 集群成员之间异常的 SSH 活动;

  • 管理面来源、时间与管理员操作不一致。

外部遥测比设备本地日志更难被已取得 root 权限的攻击者同时清除。

4. 在保全证据后升级

不要为了“尽快干净”而先重装、再调查。

对疑似失陷的虚拟设备,Cisco 的顺序是:先保存取证信息,再部署运行修复版本的新虚拟机,重建配置,更新凭据与加密材料,并持续监控异常。

P1:24 小时内完成

5. 将单节点事件按集群事件处理

如果集群内至少一台设备疑似失陷,应评估全部成员。

Cisco 特别指出,集群成员之间用于认证的 SSH 私钥可能被读取。攻击者拿到私钥后,风险可能不再停留在最初被利用的节点。

因此应:

  • 轮换集群 SSH 密钥;

  • 核查节点间认证记录;

  • 在安全版本上重建可疑节点;

  • 验证配置来源与完整性;

  • 避免把未经审查的失陷节点配置原样恢复到新实例。

6. 按依赖关系轮换凭据和加密材料

建议顺序:

  1. 先隔离或替换已失陷设备;

  2. 轮换设备管理员凭据;

  3. 轮换集群成员通信密钥;

  4. 更新 LDAP、目录服务和外部集成凭据;

  5. 更新 TLS 私钥与证书;

  6. 检查邮件中继、API、备份、SIEM 等连接材料;

  7. 撤销不再需要的旧密钥;

  8. 观察旧凭据是否仍被使用。

如果先轮换凭据、但仍让已失陷设备保持联网,攻击者可能再次获得新凭据。

7. 使用官方检测内容,但不要把它当成完整证明

Cisco 同时提供了 Snort 规则 67109–67110。

这类规则可以提高已知攻击模式的检测能力,但不应替代:

  • 固件升级;

  • 外部日志分析;

  • 设备重建;

  • 凭据轮换;

  • 对持久化和横向移动的调查。

P2:一周内完成

8. 限制安全设备的出站能力

建立明确的邮件网关出站允许清单:

  • 必要的 DNS、NTP、更新、日志、目录与邮件中继目标;

  • 明确的目的地址、端口和协议;

  • 默认拒绝不需要的互联网出站连接;

  • 对新增目的地和流量异常告警。

这样即使入口漏洞再次出现,也能降低下载载荷、建立隧道和数据外传的成功率。

9. 把管理面与邮件数据面分离

按照 Cisco 的加固建议:

  • 邮件与管理功能使用不同网络接口;

  • 管理流量只允许来自可信主机;

  • 禁用不需要的 HTTP、FTP 等服务;

  • 优先使用 TLS;

  • 将设备放在过滤设备后方;

  • 把日志持续发送到外部、不可由设备单方面覆盖的系统。

10. 将解析器输入纳入代码安全测试

对自研邮件处理、网关插件或类似内容解析服务,CI 中应加入:

  • 外部数据到 SQL 汇点的污点分析;

  • 禁止拼接式查询的静态规则;

  • MIME 与编码变体的模糊测试;

  • 参数化查询回归测试;

  • 数据库角色权限快照;

  • 数据库到操作系统危险能力的配置检查;

  • 容器或服务账号非 root 运行验证。


七、开发团队应该建立哪些安全不变量

不变量一:结构化字段仍然是不可信输入

JSON 字段、邮件头、解析后的对象、数据库记录和消息队列事件,都可能保留攻击者控制。

“已经被解析”描述的是格式状态,不是信任状态。

不变量二:查询文本不能随外部值变化

对相同业务操作,无论输入是什么,SQL 模板都必须保持恒定。

所有外部数据只能通过参数绑定进入查询。

不变量三:数据库账号只拥有业务所需能力

邮件处理服务不应使用数据库超级用户。

如果数据库功能允许启动进程、加载扩展、读写任意文件或访问网络,应在不需要时显式禁用或隔离。

不变量四:解析服务不以 root 身份运行

如果业务确实需要少量特权操作,应把它们拆成窄接口、可审计的独立服务,而不是让整个解析与数据库链继承 root 权限。

不变量五:安全设备也必须被零信任地监控

安全设备的出站连接、配置变化、进程活动和身份使用同样需要基线与告警。

“它负责安全”不等于“它天然可信”。


八、几个容易出现的错误判断

错误一:管理端口没暴露,所以不受影响

本漏洞入口在邮件解析路径。即使管理面只在内网开放,只要设备接收外部邮件,仍需按官方受影响范围处置。

错误二:WAF 或邮件规则可以替代升级

Cisco 明确表示没有可解决该漏洞的绕过措施。基于内容的拦截还可能被编码、格式和解析差异绕过。

错误三:升级后风险自动归零

升级关闭的是继续利用的入口,不会撤销此前可能泄露的凭据、密钥或已建立的持久化。

确认或怀疑失陷时,应执行重建、凭据轮换和外部日志调查。

错误四:没找到官方日志关键字就说明安全

厂商已经提醒,取得 root 权限后,攻击者可能删除或隐藏证据。单一日志规则只能提供阳性信号,不能提供完整的阴性证明。

错误五:这是数据库团队的问题

攻击链穿过邮件解析、应用查询、数据库权限、操作系统身份、网络访问和事件响应多个层面。

任何单一团队都无法独立完成闭环。


九、给不同角色的执行清单

开发团队

  • 查找邮件、文件、文档和协议解析结果进入 SQL 的全部路径;

  • 将拼接式查询迁移为参数化查询;

  • 为查询结构不变量增加自动化测试;

  • 对字符集转换和规范化后的值再次执行边界校验;

  • 对数据库到文件、进程、网络的高危功能建立禁止清单;

  • 将解析器与特权服务拆分。

安全团队

  • 将 CVE-2026-76461 设为 P0;

  • 核对所有节点完整版本和集群关系;

  • 使用厂商 IOC、Snort 规则和外部流量数据开展回溯;

  • 评估日志是否可能被篡改;

  • 制定设备重建与密钥轮换顺序;

  • 扩大调查到与网关互信的系统。

平台与运维团队

  • 升级到对应修复版本,优先迁移至 16.5.0-780;

  • 在变更前保全必要证据;

  • 分离管理面与邮件面;

  • 收紧出站访问;

  • 将日志发送到外部系统并延长保留期;

  • 对集群成员统一处置,避免遗漏单节点。

管理与应急负责人

  • 不要用“补丁安装率”代替“风险关闭率”;

  • 同时追踪升级、重建、凭据轮换、日志回溯和横向调查状态;

  • 明确云托管与本地部署的责任边界;

  • 对可能受影响的邮件、身份和密钥材料建立证据化结论。


十、总结

CVE-2026-76461 最值得记住的,不是某个特定 SQL 关键字,而是一条连续失守的信任链:

邮件被当作可信字段
        ↓
字段被当作 SQL 结构
        ↓
数据库被当作系统命令代理
        ↓
边界设备的 root 权限被远程获取

安全工程不能只在最外层问“输入是否经过解析”,还必须逐层追问:

  • 数据是否与代码分离?

  • 查询身份是否最小权限?

  • 数据库是否拥有不必要的系统能力?

  • 服务是否以过高权限运行?

  • 设备失陷后,外部证据和恢复路径是否仍然存在?

对于已确认遭到利用的边界设备,升级只是第一步。

真正完成风险闭环,需要把漏洞修复、证据保全、设备重建、凭据轮换、集群处置和网络回溯放在同一张事件响应清单里。


事实、推断与建议边界

已确认事实

  • CVE-2026-76461 是 Cisco Secure Email Gateway 邮件解析逻辑中的 SQL 注入漏洞;

  • CVSS 3.1 为 9.8,CWE 为 CWE-89;

  • 物理和虚拟设备均受影响,且与配置无关;

  • 攻击者无需认证或用户交互;

  • 成功利用可导致 root 权限命令执行;

  • Cisco 已确认 2026 年 9 月存在现实利用;

  • CISA 已将其加入 KEV;

  • Cisco 没有提供可替代升级的绕过措施;

  • Cisco 提供了修复版本、邮件日志线索和 Snort 规则。

工程推断

  • 具体泄露了哪些凭据、是否发生横向移动、是否访问邮件内容,必须由每个组织的证据决定;

  • 三层信任边界模型是根据官方影响链进行的安全工程抽象,不等同于厂商完整内部实现;

  • 本文参数化查询代码是概念模型,不是 AsyncOS 源码或官方补丁。

防护建议

  • 对受影响设备立即升级并开展失陷排查;

  • 对疑似失陷的虚拟设备优先重建,而不是只做原地升级;

  • 轮换设备和集群相关凭据与加密材料;

  • 将日志和网络证据保存在设备外部;

  • 对自研解析服务执行参数化、最小权限和非 root 运行检查。

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐