问题
调用 string_interpret_escape() 的代码根据实际大小为排出分配一个缓冲区,并且暴露的指针最终位于缓冲区边界之外的区域。 因此,当尝试处理输入字符串时,会出现从分配的缓冲区边界之外的区域读取数据的情况,并且尝试写入未转义的字符串可能导致写入超出缓冲区的边界。
在默认配置下,在与服务器建立安全连接时,可以通过向 SNI 发送专门设计的数据来利用该漏洞。 还可以通过修改为客户端证书身份验证配置的配置中的peerdn值或导入证书时来利用该问题。 从发布开始就可能通过 SNI 和 Peerdn 进行攻击
漏洞利用原型已准备好通过 SNI 进行攻击,在带有 Glibc 的 Linux 系统上的 i386 和 amd64 架构上运行。 该漏洞利用堆区域上的数据覆盖,导致覆盖存储日志文件名的内存。 文件名替换为“/../../../../../../../../etc/passwd”。 接下来,包含发件人地址的变量将被覆盖,该变量首先保存在日志中,这允许您向系统添加新用户。
发行版发布的包含漏洞修复的软件包更新
作为阻止该漏洞的解决方法,您可以禁用 TLS 支持或添加
ACL 部分“acl_smtp_mail”:
拒绝条件= ${if eq{\\}{${substr{-1}{1}{$tls_in_sni}}}}
拒绝条件= ${if eq{\\}{${substr{-1}{1}{$tls_in_peerdn}}}}
来源: opennet.ru