发生了什么
2026 年 11 月 9 日,CISA 把 SignalWire FreeSwitch 代码注入漏洞 CVE-2026-116779 列入已知被利用漏洞目录(KEV),联邦机构修复期限为 2026 年 11 月 12 日。厂商安全通告与 NVD 记录均确认该漏洞已在野外遭到利用,另有公开的概念验证代码出现。该漏洞 CVSS 9.8(CNA 评分;NVD 尚未给出 NIST 评分)。
漏洞源于入站 SIP MESSAGE 的处理:消息 To 用户名中加号前的部分会被当作聊天协议选择器,攻击者选定 api 协议后,服务器会以 FreeSwitch 进程权限执行对应的 API 命令,包括操作系统命令;配置与凭据可能被读取,通话可被任意控制。若加载了 mod_lua(默认配置即加载),还可经由内联 Lua 执行代码。
受影响版本
FreeSwitch 1.11.3 之前的所有版本。默认配置即在影响范围内:入站聊天默认开启,除非对应 profile 显式设置 enable-chat=false;官方默认配置 conf/vanilla 的内部与外部 profile 均未关闭。入站访问控制列表(ACL)不覆盖 MESSAGE 消息,收紧 ACL 不能使 profile 脱离影响范围。利用只需一条被 profile 接受的 SIP MESSAGE;若开启了 MESSAGE 认证,拥有该 profile 上任意一个账号即可;默认目录中仍保留的无密码用户(如 default)且未禁用空密码时,甚至不需要自有账号。
修复版本
升级到 FreeSwitch 1.11.3 或更高版本。1.11.3 新增按 profile 控制的 enable-chat-api-proto 参数,默认关闭:未开启时,试图选择 api 协议的 MESSAGE 会收到 403 响应并被记录来源与请求命令;不带协议选择器或选择其他聊天协议的消息不受影响。
自查步骤
- 确认 FreeSwitch 版本是否低于 1.11.3,低于则在列。
- 检查每个 SIP profile 是否接受入站 MESSAGE:未设置 enable-chat=false 的 profile 即默认开启。
- 检查目录中是否存在无 password 与 a1-hash 的用户(如默认配置中的 default 与 Skinny 示例用户),有则删除或补齐认证信息,并确认未开启 allow-empty-password。
- 确认服务是否暴露在公网或不可信网络:暴露面越大,优先级越高。
- 不能立即升级时,先在不需要入站 SIP 聊天的 profile 上设置 enable-chat=false;该设置会同时关闭该 profile 上的全部入站 MESSAGE 聊天投递。注意:仅开启 auth-messages 不足以关闭该路径;仅设置 disable_system_api_commands=true 也只能去掉 system 一个 API,不能关闭整条路径。
- 升级后核对日志中是否有针对 api 协议的 403 记录,并排查异常的 API 调用与通话记录。
与本博客及作者运营的站点无关,普通读者无需操作;使用 FreeSwitch 提供电话服务的团队请按上述步骤核查,并于 11 月 12 日前完成修复。