UnrealIRCd 命令注入已在野利用(CVE-2026-114713)
label 标签转义缺陷让 UnrealIRCd 普通用户可在互联网络上执行服务器命令;已在 6.2.7.1 修复,并已在野利用。
TL;DR
- UnrealIRCd 的 labeled-response 模块存在转义缺陷,任何普通用户都能注入以服务器权限执行的服务器间命令。UnrealIRCd 于 2026 年 11 月 7 日发布 6.2.7.1 和热补丁。
- 加载该模块的 UnrealIRCd 6.0.0 至 6.2.7 服务器都会受影响,默认配置会加载该模块;网络必须有两个或更多互联服务器。
- CVE 记录将其评为 CVSS v3.1 8.6 High。CISA 的 Known Exploited Vulnerabilities(KEV)目录于 2026 年 11 月 13 日将其加入,其 Stakeholder-Specific Vulnerability Categorization(SSVC)记录标记为正在利用。
- 升级到 6.2.7.1 或应用厂商热补丁,然后检查模块版本。SPAMFILTER 临时缓解措施见“如何修复?”。
我受影响吗?
以下条件全部成立时,您会受影响:
- 服务器运行 UnrealIRCd 6.0.0 至 6.2.7,或已停止维护的 5.x 版本。
- 已加载
labeled-response模块。默认的modules.default.conf会加载它。 - 网络有两个或更多互联服务器。CVE 描述的是该拓扑下以服务器权限执行命令。
- 普通用户可以连接并发送 IRCv3 消息标签。
单个未互联的服务器不会把注入的行转发给对端,因此 CVE 描述的服务器权限路径不适用。仍应升级:6.2.7.1 还修复了另外八个问题,包括两处 IP 地址泄露。
| 分支 | 受影响版本 | 修复版本 |
|---|---|---|
| 6.x | 6.0.0 至 6.2.7 | 6.2.7.1 |
| 5.x | 所有版本(2023-07-01 停止维护) | 无;升级到 6.2.7.1 |
检查正在运行的版本和模块状态:
# Version of the running server
./unrealircd version
# Is the module loaded, and at which version?
./unrealircd module-status | grep labeled-response
模块行显示补丁状态。labeled-response 5.0 表示未修复。labeled-response 5.0-hot-patch-bundle-20261107 或 labeled-response 6.2.7.1 表示已修复。
如何修复?
升级到 6.2.7.1,或在不重启的情况下应用热补丁,然后检查模块行。
- 在网络中应用厂商的临时 SPAMFILTER。在每个服务器上以 IRCOp 身份运行:
SPAMFILTER add -regex T block - Invalid_label ^label=(?![^\r\n;\x20]*\z)。它会阻止包含回车、换行、分号或空格的 label,并且只有在所有服务器运行 6.0.4 或更高版本时才有效。 - 在每个服务器上运行
./unrealircd hot-patch bundle-20261107。最后一行应说明补丁已安装且服务器已正确 rehash。 - 或者运行
./unrealircd upgrade并重启。Windows 用户从厂商网站下载 6.2.7.1。 - 使用
./unrealircd module-status | grep labeled-response验证。输出必须显示热补丁包或 6.2.7.1。 - 所有服务器修复后移除 SPAMFILTER。
对于已停止维护的 5.x,在每个服务器的配置中加入 blacklist-module "labeled-response"; 并重启,而不只是 rehash。UnrealIRCd 5 自 2023-07-01 起停止维护,不再获得修复。
热补丁覆盖该版本的九个问题。如果失败,厂商的热补丁常见问题说明了发行版升级和构建失败的情形;升级到 6.2.7.1 是备选方案。
根本原因是什么?
服务器把 IRCv3 label 消息标签复制到固定缓冲区,然后在构建回复时直接格式化,没有转义分隔标签、参数和行的分隔符。
在 UnrealIRCd 6.2.7 中,lr_pre_command() 用 strlcpy 把标签值复制到 currentcmd.label。唯一的校验在 labeled_response_mtag_is_ok()。它检查值非空、客户端支持 labeled-response 和 batch 能力,以及值不超过 64 字节。
int lr_pre_command(Client *from, MessageTag *mtags, const char *buf)
{
lr_clear();
if (IsServer(from))
return 0;
for (; mtags; mtags = mtags->next)
{
if (!strcmp(mtags->name, "label") && mtags->value)
{
strlcpy(currentcmd.label, mtags->value, sizeof(currentcmd.label));
currentcmd.client = from;
break;
}
}
return 0;
}
随后 gen_start_batch() 用 snprintf 把 label 写入 @label=%s :%s BATCH +%s labeled-response。lr_post_command() 在单条回复路径中也这样做:
snprintf(packet, sizeof(packet) - 3,
"@label=%s%s%s",
currentcmd.label,
more_tags ? ";" : " ",
more_tags ? currentcmd.firstbuf + 1 : currentcmd.firstbuf);
在 IRC 中,一条消息由标签段、来源、命令和参数组成。分隔符的作用如下:
- 分号分隔标签。
- 空格结束标签段。
- 回车或换行结束消息。
因此,包含这些字节之一的 label 会改变 UnrealIRCd 构建的回复结构。label 还会通过消息标签库复制到 ACK 回复中。该库使用同样的未转义值。
如何被利用?
- 攻击者以普通用户身份连接到网络上的任意服务器,客户端能够发送 IRCv3 标签。
- 攻击者发送带
label标签的命令,标签值包含标签分隔符、空格或换行。服务器接受它,因为校验只检查长度和客户端能力。 - UnrealIRCd 把该 label 复制到
BATCH开始、ACK回复或该命令缓冲的单条回复中。 - 分隔符把生成的文本拆成额外的标签、参数或第二条 IRC 消息。
- 回复经过服务器链路。对端把额外的消息解析为来自受信任链路的服务器间命令,因此以服务器权限执行。
解释该缺陷不需要公开利用代码,本文也没有链接任何利用代码。厂商表示任何普通用户都能 KILL、GLINE 以及做许多其他操作。CISA 记录标记为正在利用,因此该技术已被使用。
攻击如何展开?
普通用户在 label 中放入标签和行分隔符,UnrealIRCd 未转义地把 label 复制到回复中,对端服务器把注入的命令当作受信任服务器命令执行。
命令"] --> B["模块复制 label
不检查分隔符"] B --> C["构建回复
@label=<值> ..."] C --> D["分隔符把回复拆成
额外标签或第二行"] D --> E["回复经过服务器链路"] E --> F["对端以服务器权限
执行注入的行"] F --> G["KILL、GLINE 等
服务器命令被执行"]
攻击者能做什么?
普通用户可以执行本应只有服务器或 IRCOp 才能执行的命令,包括针对其他用户和频道的 KILL 和 GLINE。
影响需要以下全部条件:
- 服务器运行受影响版本并加载
labeled-response。 - 网络有两个或更多互联服务器,使对端把注入的行解析为服务器命令。
- 攻击者能以普通用户身份连接。不需要服务器账户或操作员身份。
- 攻击者能发送 IRCv3 标签。原始套接字或脚本客户端即可。
厂商称这是 UnrealIRCd 15 年来最严重的问题。CISA 的 SSVC 记录把技术影响标为 total、可自动化标为 yes。CVE 记录只评估完整性影响(C:N/I:H/A:N);可用性和机密性影响取决于攻击者执行的命令。
为什么修复有效?
修复拒绝任何包含空格、分号、反斜杠、回车或换行的 label,因此值不再能改变回复结构。
修复提交 05b5f5fdc8bb 在 labeled_response_mtag_is_ok() 中增加一项检查:
int labeled_response_mtag_is_ok(Client *client, const char *name, const char *value)
{
if (BadPtr(value))
return 0;
+ if (strpbrk(value, " ;\\\r\n"))
+ return 0;
+
if (IsServer(client))
return 1;
检查在服务器分支之前执行,因此也适用于来自互联服务器的标签。每个使用 currentcmd.label 的回复路径现在都收到不含标签分隔符、参数分隔符或换行的值。这覆盖批次开始、ACK 回复和单条回复缓冲区。
厂商在 6.2.7.1 和热补丁包中提供了同样的更改。该修复对本 CVE 是完整的;该版本中的另外八个问题是不同的更改。
如何检查是否已遭入侵?
没有公开的入侵指标。CISA 标记为正在利用,但厂商和 CISA 都没有发布该 CVE 的请求模式、受害者数量或日志签名。
先检查补丁状态,因为未修复的服务器就是暴露面:
./unrealircd module-status | grep labeled-response
./unrealircd version
然后检查服务器日志中厂商列出的影响:
- 不是由 IRCOp 或已知服务器链路发出的 KILL、GLINE、SVS* 及其他服务器命令。
- 同一时间的服务器链路断开或协议错误。
- 没有操作员执行的配置或封禁列表更改。
UnrealIRCd 的日志因构建和日志级别而异,被阻止的尝试可能不留痕迹。SPAMFILTER 在阻止 label 时会记录匹配;如果启用了过滤器,请搜索其阻止消息。
时间线
- 2026-11-04:编写修复提交
05b5f5fdc8bb。 - 2026-11-07:UnrealIRCd 于 15:00 UTC 发布 6.2.7.1 和热补丁
bundle-20261107。 - 2026-11-08:发布 CVE 记录,厂商向 oss-security 邮件列表发送公告。
- 2026-11-12:CISA 的 SSVC 记录标记为正在利用。
- 2026-11-13:CISA 将 CVE-2026-114713 加入 KEV 目录,截止日期为 2026-11-16。
常见问题
CVE-2026-114713 是否已在野利用?
是。CISA 于 2026 年 11 月 13 日将其加入 KEV 目录,其 SSVC 记录在 11 月 12 日标记为正在利用。厂商公告描述了影响,但没有指明活动或受害者。
SPAMFILTER 缓解措施能完全修复问题吗?
不能。只有当网络上所有服务器运行 6.0.4 或更高版本时,它才能阻止关键的 label 注入。它不能修复 6.2.7.1 中的另外八个问题,而且它是临时过滤器,不是补丁。
我运行 UnrealIRCd 5,该怎么办?
UnrealIRCd 5 自 2023-07-01 起停止维护,并受该关键问题影响。在每个服务器上加入 blacklist-module "labeled-response"; 并重启,然后迁移到 6.2.7.1。厂商表示其他停止维护的版本未检查,很可能也受影响。
单个服务器会受影响吗?
CVE 描述的是两个或更多互联服务器网络中,以服务器权限执行命令。单个未互联的服务器不会把注入的行转发给对端,因此该路径不适用。仍应升级,因为 6.2.7.1 修复了另外八个问题。
如何验证热补丁?
运行 ./unrealircd module-status | grep labeled-response。该行必须显示 labeled-response 5.0-hot-patch-bundle-20261107 或 labeled-response 6.2.7.1。仅显示 labeled-response 5.0 表示未安装补丁。
参考文献
- CVE-2026-114713 记录,MITRE CNA,2026-11-08 发布,CVSS v3.1 8.6,CWE-140,以及 CISA ADP 的 SSVC 块:https://www.cve.org/CVERecord?id=CVE-2026-114713(2026 年 11 月 14 日检查)
- UnrealIRCd,“UnrealIRCd 6.2.7.1 released and hot-patch to fix 9 security issues”,2026 年 11 月 7 日,公告正文和完整问题列表:https://www.openwall.com/lists/oss-security/2026/11/08/1(2026 年 11 月 14 日检查)
- UnrealIRCd 新闻索引,发布日期、38% 市场份额和热补丁说明:https://www.unrealircd.org/index/news(2026 年 11 月 14 日检查)
- 修复提交
05b5f5fdc8bb,“Fix CRITICAL issue where anyone could execute commands as server/IRCOp”,2026 年 11 月 4 日:https://github.com/unrealircd/unrealircd/commit/05b5f5fdc8bb(2026 年 11 月 14 日检查) - UnrealIRCd 6.2.7 源码,
src/modules/labeled-response.c中未校验的 label 复制和回复构建:https://github.com/unrealircd/unrealircd/blob/59546a20f6c9b0dae1646727acf74b4b744e9b09/src/modules/labeled-response.c(2026 年 11 月 14 日检查) - UnrealIRCd 默认模块列表,默认加载
labeled-response:https://github.com/unrealircd/unrealircd/blob/unreal60_dev/doc/conf/modules.default.conf(2026 年 11 月 14 日检查) - CISA Known Exploited Vulnerabilities 目录,CVE-2026-114713 于 2026-11-13 加入,截止日期 2026-11-16:https://www.cisa.gov/sites/default/files/feeds/known_exploited_vulnerabilities.json(2026 年 11 月 14 日检查)