简介
远程 Amazon Linux 2023 主机缺少安全更新。
描述
因此,该软件受到 ALAS2023-2026-3190 公告中提及的多个漏洞影响。
Perl 之前 2.590 的 Net::IDN::P unycode 版本允许通过 encode_punycode 中 delta 累加器的整数溢出进行越界读取。
XS 后端将 punycode 增量以及从中派生的数字索引保留在有符号的 int 中。累积“delta += (m-n) * (h+1)”没有溢出检查,因此足够大的代码点封装增量,而数字索引会离开 36 个条目数字表的范围。最终表访问之前的边界仅测试大于 36 的索引,因此负索引传递它,36 本身也是如此。Perl 字符串保留 Unicode 范围之外的代码点,而一个这样的代码点会自行溢出累积。有效的输入也会对其进行封装,例如 1927 ASCII 字母后跟 U+10FFFF。转换函数在检查标签长度之前对标签进行编码,因此长标签通过记录的 API 到达编码器。
只有 XS 后端会受到影响。
对攻击者提供的字符串进行编码会将数字表外部的字节复制到编码结果中,或造成进程崩溃。(CVE-2026-74765)
之前的 2.3012.590 Perl Net::IDN::P unycode 版本允许通过解码代码点在decode_punycode中重新分配输出缓冲区,从而造成堆释放后使用。
XS 后端将每个解码代码点插入其返回标量的字符串缓冲区中。
decode_punycode 首先计算插入指针,然后在代码点不适合时才增加缓冲区。增长会重新分配缓冲区并更新除插入指针以外的每个指针,因此后续移动和代码点写入会通过释放的指针。缓冲区的起始时间是标签长度的两倍,而高于 U+FFFF 的代码点在输出中占用了四个字节,因此此类代码点的标签会超出其长度并强制重新分配。
2.301版本 的补丁CVE-2016-15059引入了该缺陷。只有 XS 后端会受到影响。
解码攻击者提供的 punycode 标签可读取和写入释放的堆内存。(CVE-2026-74766)
对于 Perl,Net::IDN::P unycode 版本2.3022.590会泄漏 decode_punycode 中每个被拒绝标签上的输出缓冲区。
XS 后端在验证输入之前分配其返回的标量,将缓冲区大小调整为输入长度的两倍。标量仅在成功路径上释放,因此拒绝标签的三个呱呱叫中的每一个都会保留标量及其缓冲区的分配。没有任何内容会限制到 Unicode 方向的标签长度,因为只在转换为 ASCII 时才检查 63 字节的 DNS 限制。
只有 XS 后端会受到影响。
提供无效标签的发送方每次拒绝调用都会将进程增加两倍标签长度,无需成功调用。(CVE-2026-87078)
低于 Perl 的 Net::IDN::P unycode 版本 2.590 在解码 decode_punycode 中的长标签时,可通过二次插入成本导致 CPU 耗尽。
XS 后端将每个解码代码点插入到 UTF-8 缓冲区中,并通过从头开始扫描该缓冲区(一次一个字符)来找到插入点。扫描在目前为止构建的输出上每个代码点运行一次,因此标签长度的成本为二次。纯 Perl 后端将其输入降级为字节,以便 substr 可以直接为其制作索引,但在降级之前获取其工作副本,因此当输入带有 UTF-8 标记时,副本上的每个 substr 都会从头开始扫描,具有相同的二次成本。
没有任何内容在 to-Unicode 方向上限制标签长度。仅当转换为 ASCII 时才检查 63 字节 DNS 限制,因此 domain_to_unicode 和 uts46_to_unicode 可向解码器传递攻击者提供的任意长度的标签。(CVE-2026-87079)
Net::IDN::P unycode::P P 之前 2.590 的 Perl 版本会将截断标签解码为包含其从未在decode_punycode中编码过的字符的名称。
纯 Perl 解码器一次读取一位具有四参数 substr 的数字,并使用定义测试结果以检测输入的末尾。耗尽字符串的 substr 返回空字符串而不是 undef,因此解码会继续到结尾。空字符串转换为范围下方的位数值,从而减少累加器,解码器从中派生一个额外的代码点及其位置。结果是确定性的。XS 后端拒绝相同的标签。
Net::IDN::P unycode 在 XS 未构建的任何地方使用此后端。
两个后端对这种标签的含义存在分歧,因此发送者可以选择一个安装解析为名称而另一个安装拒绝的标签。(CVE-2026-87080)
Perl 之前的 Net::IDN::UTS46 版本 2.590 允许在 to_ascii 中进行长度检查之前,通过对超长标签进行二次 punycode 编码造成 CPU 耗尽。
to_ascii punycode 对每个标签进行编码,然后才应用 63 字节的 DNS 限制。两个后端中的encode_punycode都遵循 RFC 3492 中的示例实现,其外部循环在每个不同的非 ASCII 代码点运行一次,并且每一轮扫描整个输入,因此不同非 ASCII 字符的标签在限制拒绝之前会消耗其长度的平方。发行版本中的每个 ASCII 转换(包括 domain_to_ascii 和 email_to_ascii)都要经过to_ascii。(CVE-2026-87081)
Net::IDN::P unycode 之前 2.590 版本的 Perl 挂起、崩溃或通过 encode_punycode 中未经验证的畸形 UTF-8 返回错误标签。
两个后端都不会检查其输入是否为格式正确的 UTF-8,因此在格式错误字节上设置了带有 UTF-8 标记的字符串(如 :utf8 PerlIO 层从任何格式错误的输入生成时)会在未经检查的情况下到达编码器。在 perl 5.32 及更高版本中,XS 后端报告长度为“(STRLEN)-1”的畸形序列,因此扫描后退一个字节而不是向前执行,并且永不结束。在更早的 perl 中,XS 会为不同的名称返回有效的标签。纯 Perl 后端对带标记的字符串运行正则表达式。
根据字节,它会因 perl 5.28 上的 SIGBUS 而中止并更新,因错误而终止,或者返回错误的标签。
记录的转换函数首先将标签与 Unicode 属性匹配,并且匹配此类字符串的属性终止,因此只有直接调用 encode_punycode 才能到达缺陷。解码器不受影响。
编码攻击者提供的字节的直接调用程序挂起、崩溃,或获得该输入从未拥有的名称的标签。(CVE-2026-87082)
Tenable 已直接从测试产品的安全公告中提取上述描述块。
请注意,Nessus 尚未测试这些问题,而是只依据应用程序自我报告的版本号进行判断。
解决方案
运行“dnf update perl-Net-IDN-Encode --releasever 2023.12.20261012”或“dnf update --advisory ALAS2023-2026-3190 --releasever 2023.12.20261012”以更新系统。
插件详情
文件名: al2023_ALAS2023-2026-3190.nasl
代理: unix
支持的传感器: Frictionless Assessment AWS, Frictionless Assessment Agent, Nessus Agent, Agentless Assessment, Continuous Assessment, Tenable Cloud Security, Tenable Self-Hosted Container Security, Nessus
风险信息
矢量: CVSS2#AV:N/AC:L/Au:N/C:C/I:N/A:C
矢量: CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:H
时间矢量: CVSS:3.0/E:U/RL:O/RC:C
漏洞信息
CPE: cpe:/o:amazon:linux:2023, p-cpe:/a:amazon:linux:perl-net-idn-encode-debuginfo, p-cpe:/a:amazon:linux:perl-net-idn-encode-debugsource, p-cpe:/a:amazon:linux:perl-net-idn-encode
必需的 KB 项: Host/local_checks_enabled, Host/AmazonLinux/release, Host/AmazonLinux/rpm-list
易利用性: No known exploits are available