一条聊天消息接管整台电话交换机:FreeSWITCH9.8分命令执行(CVE-2026-116779,附PoC)"

admin 2026-11-01 17:52:59 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

一条聊天消息接管整台电话交换机:FreeSWITCH 9.8分命令执行(CVE-2026-116779,附PoC)

原创

赤霄攻防实验室
赤霄攻防实验室

赤霄攻防实验室

2026年11月1日 09:30
河北

去阅读

开源电话交换平台 FreeSWITCH 的维护方 SignalWire 在 10 月 28 日发布了一份措辞罕见的通告:一条 SIP 聊天消息就可以让服务器执行任意命令,而且「该利用路径已在野外被观察到」。更值得玩味的是时间——修复版本 v1.11.3 早在 8 月 28 日就发布了,通告却整整晚了 61 天。这两个月里没有升级的存量服务器,一直在裸奔。

CVE-2026-116779 · CVSS 9.8 · 厂商确认在野利用

TL;DR 四行速览

是什么:FreeSWITCH 处理入站 SIP MESSAGE 时,把收件人用户名按加号切分后当作「聊天协议名」派发,而名为 api 的派发目标会直接执行任意 FreeSWITCH API 命令,CVSS 9.8。
影响谁:全部 ≤ 1.11.2 版本,默认配置即中招——只要 profile 没显式关闭聊天处理;国内大量呼叫中心、语音机器人、AI 外呼平台基于 FreeSWITCH 自建。
怎么修:升级 v1.11.3(8 月 28 日已发布),新版默认拒绝 api 聊天协议并回 403;三项过渡缓解措施均只能关门、不能拆通道。
看点:修复与通告之间 61 天的静默窗口、vanilla 默认配置里残留的无密码用户、以及本篇配套的应答分叉验证脚本(附PoC)。

漏洞概要信息卡

61 天静默修复窗口:一次教科书级的 disclosing 失衡

先把时间线摆出来。8 月 9 日,FreeSWITCH 发布 v1.11.2,包含一批安全加固;8 月 28 日,v1.11.3 发布,release notes 里只有一行不起眼的「Add enable-chat-api-proto to gate the api chat proto」——给 api 聊天协议加一道门禁。没有任何通告解释这道门禁防的是什么。直到 10 月 26 日至 28 日,SignalWire 才集中发布一批安全通告,其中 GHSA-mg63-h38w-8p9p 明确写到:该命令执行路径的利用「已在野外被观察到」。

这个节奏对防御方是双重不利。一方面,8 月底那份「重要版本,强烈建议所有用户尽快升级」的 release notes 没有说明修复了一个 9.8 分的命令执行洞,很多运维在变更窗口紧张的语境下选择了观望;另一方面,关注安全通告的攻击者拿到细节后,正好有两个月的存量目标可以打。修复先走、通告后到,在披露纪律上是保护了未升级用户,但代价是没人知道自己该着急。

顺带一提,截至本篇成文,NVD 还没有收录这个 CVE,国内若干漏洞库的条目也只有分数没有细节——这正是主动做源码级还原的价值所在。

漏洞机制:一个加号引发的派发事故

To 用户名的「协议+地址」约定

FreeSWITCH 的聊天框架有一个内部约定:收件人字段可以写成「协议名加号地址」的形式,比如发给某个 XMPP 网关用户或某个 Verto 终端。问题出在这个约定的实现位置——mod\_sofia 模块的 sofia\_presence\_handle\_sip\_i\_message 函数在收到一条 SIP MESSAGE 时,会把 To 头里的用户名部分按第一个加号切成两半:左半当作聊天协议名,右半当作实际收件地址,然后把整条消息派发给注册在该协议名下的聊天接口。

聊天接口本身是按名字注册的插件机制。mod\_dptools 这个几乎人人都在用的基础模块,恰好注册了一个名字就叫 api 的聊天接口。它的处理函数做的事情简单粗暴:把收件地址做一次 URL 解码,按第一个空格切成命令和参数,然后原样送进 switch\_api\_execute——FreeSWITCH 的 API 执行总入口。三个环节单独看都「符合设计」,串起来就是:任何人只要能让一条 MESSAGE 被 profile 接受,就能指定服务器执行哪条 API 命令。

能执行什么?system 命令直接跑操作系统命令;默认配置加载的 mod\_lua 提供了带完整标准库的内联 Lua,是第二个执行通道;此外还有模块加载、呼叫发起、配置读取——等于整台交换机的控制权,且全部以 FreeSWITCH 进程的权限运行。通告对漏洞类型的定性也印证了这一点:CWE-77、CWE-78(命令注入)之外,还挂了一个 CWE-749「暴露危险方法」——把 API 执行入口注册成聊天投递目标,本身就是危险的接口设计。

攻击链全景:从一条 MESSAGE 到进程权限命令执行

修复只有 26 行 diff,但切在要害上

对比 v1.11.2 与 v1.11.3 的源码,mod\_sofia 的改动总共 26 行:新增一个 per-profile 参数 enable-chat-api-proto,默认关闭;当 MESSAGE 选择的协议名是 api 且该参数未开启时,直接回 403,并在日志里记录来源 IP 和请求的命令——后者对排查是否被人探过非常有用。同时补了一个边界:超长的 To 用户名不再做协议切分,堵住靠截断绕过匹配的野路子。修复没有动派发机制本身,而是把「命令执行类协议」和「消息投递类协议」在入口处区分开,这是对 CWE-749 的正面回应。

应答行为的改变也给了防御方一个干净的判定面:同一条探测消息,漏洞版本回 202(接受投递),修复版本回 403(拒绝并告警)。这就是本篇验证脚本的判定原理。

影响面:谁的电话系统在裸奔

三个事实叠加,让这个洞的影响面远超「又一个开源组件洞」。第一,默认即中招:chat 处理在 profile 不显式设置关闭时是开着的,官方 vanilla 示例配置的 internal 和 external 两个 profile 全部处于开启状态;第二,入站 ACL 管不到 MESSAGE,收紧 ACL 这条常见加固路线在这里无效;第三,认证门槛形同虚设——从 1.10.7 起 MESSAGE 默认要认证,但任何一个能注册的分机、话机或中继对端账号都够用,而 vanilla 目录里至今还残留着一个既没有密码也没有哈希的 default 用户,带着这份默认配置上线的系统等于无认证可打。

FreeSWITCH 在国内的部署面值得单独说:呼叫中心、SIP 中继网关、语音验证码平台、会议系统,以及近两年爆发的外呼机器人与 AI 语音客服——大量方案商用闭源,但底座就是 FreeSWITCH。这类系统的共同特征是 SIP 端口必须对公网开放(否则中继和话机进不来),且升级意愿低(电话系统「能不动就不动」是运维惯性)。通告已经确认在野利用,如果你的语音平台还停在 1.11.2 及以下,合理的假设是:暴露在公网的 SIP 端口这两个月里被人探过的概率不低。

SignalWire 官方通告 GHSA-mg63-h38w-8p9p:确认在野利用

验证与排查:一个加号探测出三态结论

本号为此写了一个非破坏性验证脚本(完整版见文末参考链接),思路是把探测命令固定为 FreeSWITCH 自带的只读命令 status:向目标 SIP 端口发一条 To 用户名形如「api 加号 status」的 MESSAGE,看应答分叉。回 202 或 200,说明消息被接受投递到 api 聊天接口,通道存在,判定 VULNERABLE;回 403,说明 v1.11.3 的门禁在位,判定 PATCHED;回 401/407,说明 MESSAGE 认证开着——通道依然存在,只是需要任意一个注册账号,判定为认证门内的 VULNERABLE;超时或其他应答则是 UNKNOWN。脚本另带一个可选探测,对 vanilla 残留的 default 用户做空密码 REGISTER 尝试,用于确认「无账号也能打」这个放大器是否在你的目录里。全程只读、不写文件、不执行系统命令,默认目标 127.0.0.1,仅限授权测试。

排查侧重点看两处。一是 v1.11.3 的告警日志:修复版会对被拒绝的 api 协议请求记录 WARNING,内容包含来源地址和请求的命令——日志里出现过这类条目,说明已经有人在探;二是存量版本上翻 SIP MESSAGE 的处理记录,凡是 To 用户名带 api 加号前缀的入站消息都值得逐一核对。

v1.11.3 发布页(8 月 28 日):修复项就藏在这行增强日志里

处置:升级是唯一完整解,缓解只是买时间

通告列出三项缓解,但每一项的定位都要看清:enable-chat=false 可以整个关掉不需要聊天功能的 profile 的 MESSAGE 处理,这是最有效的一项,但要求你确认业务真的不用 SIP 聊天;删除目录里所有无密码无哈希的用户,能消掉「无账号即可打」的放大器;disable\_system\_api\_commands=true 会移除 system 命令——但派发路由还在,攻击者仍可触达 lua、模块加载、呼叫控制等其余 API。三项叠加也只算关门,不算拆通道,完整修复只有升级 v1.11.3 这一条路。考虑到在野利用已确认,存量系统升级后还应该按失陷事件处理:核对配置与凭据是否有异常变更、排查可疑的呼叫记录与进程外命令执行痕迹,而不是打完补丁就收工。

版本与处置矩阵

参考

· SignalWire 官方通告:github.com/signalwire/freeswitch/security/advisories/GHSA-mg63-h38w-8p9p
· FreeSWITCH v1.11.3 发布页:github.com/signalwire/freeswitch/releases/tag/v1.11.3
· 验证脚本(本号出品,非破坏性三态判定):github.com/Rubby2001/CVE-POCS/tree/main/CVE-2026-116779

本文由赤霄攻防实验室基于公开通告与源码比对撰写,仅用于防御研究。验证脚本仅限授权环境下使用,请勿用于未授权测试。如果这篇对你有帮助,点个「在看」让更多运维看到——那台还在跑 1.11 的语音服务器,今晚就该排进变更窗口了。

网络工程师如何面对女上司?一个网工的职场故事" 网络安全文章

网络工程师如何面对女上司?一个网工的职场故事"

文档讲述网络工程师老周面对新女上司的职场故事。起初他抵触新领导强调流程和报告,但一次核心交换机故障后,他意识到技术能力之外,清晰沟通和主动预防同样重要。他调整工作方式,提前准备变更方案和风险评估,最终获得认可。故事启示职场中应尊重专业与岗位,技术过硬是根本,沟通能力是发展之路。
评论:0   参与:  0