CVE-2026-24401Avahi是一款开源的系统级软件,用于在本地网络上通过mDNS/DNS-SD协议套件进行服务发现。该漏洞影响Avahi 0.9rc2及以下版本。攻击者可以通过发送包含递归CNAME记录的未经请求的mDNS响应来触发漏洞,当CNAME记录的别名和规范名称指向相同域名时(例如将'h.local'作为'h.local'的CNAME),会导致avahi-daemon进程崩溃。漏洞的根本原因在于lookup_handle_cname函数在处理此类递归CNAME记录时缺乏适当的循环检测机制,导致无限递归,最终造成栈耗尽并引发段错误(Segmentation Fault)。该漏洞特别影响设置了AVAHI_LOOKUP_USE_MULTICAST标志的记录浏览器,包括由nss-mdns使用的解析器创建的那些记录浏览器。攻击者需要诱骗用户或系统访问恶意mDNS响应即可实现拒绝服务攻击。
该漏洞的根本原因是Avahi的lookup_handle_cname函数在处理CNAME记录时缺少循环检测机制。当收到一个CNAME记录,其别名和目标名称相同时(如CNAME 'h.local' -> 'h.local'),函数会将其视为新的查询继续处理,导致无限递归。每次递归调用都会在栈上分配新的栈帧,最终耗尽栈空间并触发栈溢出。在mDNS/DNS-SD协议中,CNAME记录用于创建域名别名,正常的CNAME链应该最终解析到一个实际存在的记录(如A记录或AAAA记录)。然而,当CNAME记录指向自身时,形成了一个无法终止的递归循环。Avahi在0.9rc2及之前版本中,lookup_handle_cname函数没有检测CNAME链中是否存在循环引用,导致每次解析都重复处理同一个CNAME记录。攻击者只需在局域网中发送一个特制的mDNS响应包,包含恶意的递归CNAME记录,即可触发该漏洞。受影响的系统包括使用Avahi进行服务发现的所有Linux发行版,特别是那些启用了nss-mdns进行mDNS名称解析的系统。