Kemp LoadMaster设备(固件版本低于7.2.60)在libkemplink.so库的isreverse()和locate_fqdn()方法中存在一个严重的缓冲区溢出漏洞。该漏洞源于为DNS名称分配了一个过小的256字节缓冲区,攻击者可通过发送包含特殊字符或Unicode字符的特制DNS请求加以利用。
成功利用将导致立即崩溃和拒绝服务(DoS)状态。堆栈金丝雀令牌的存在阻止了进一步的利用,但如果攻击者找到另一个漏洞来泄露堆栈金丝雀令牌,则无法排除远程代码执行(RCE)的可能性。
该漏洞可通过向LoadMaster设备暴露的DNS服务发送TCP或UDP DNS请求轻松触发。一个简单的概念验证如下:
dig @kempdeviceip 😀😀😀😀.😀😀😀😀.😀😀😀😀.😀😀😀😀.😀😀😀😀.😀😀😀😀.😀😀😀😀.😀😀😀😀.😀😀😀😀.😀😀😀😀.😀😀😀😀.😀😀😀😀.😀😀😀😀.😀😀😀😀.😀😀.com(在某些Linux发行版上,你需要添加+noidnout +noidnin)
该利用利用了DNS名称解析过程中的特定步骤。虽然分配的256字节缓冲区是网络传输中DNS名称的标准最大大小,且概念验证内容在此限制内,但特殊字符和Unicode字符在处理过程中被转义时会扩展大小。因此,转义后的缓冲区大小超过了原始分配。Bind9库的文档和源代码(DNS组件即派生自该库)表明,安全操作至少需要1004字节的缓冲区,建议保守使用1023字节的缓冲区。更多详情请参见此处。
时间线: