CVE-2026-42046libcaca是一个广泛使用的彩色ASCII艺术库。在其0.99.beta20及更早版本中,发现了一个严重的安全漏洞。该漏洞位于库的canvas导入功能中,源于一个整数溢出缺陷。攻击者可以精心构造一个恶意的“caca”格式文件,诱导目标程序处理该文件。在处理过程中,由于整数溢出,程序会分配过小的内存缓冲区,但随后会尝试写入过多的数据,从而导致受控的堆越界写入(堆溢出)。根据具体的构建配置和底层内存分配器的实现,这种内存损坏可能被进一步利用,导致拒绝服务,甚至在某些环境下实现远程代码执行。值得注意的是,这是CVE-2021-3410漏洞的再次出现,表明之前的修复措施并不彻底。
该漏洞的核心技术原理在于libcaca在解析特定格式文件时的边界检查缺失。具体来说,当库导入canvas数据时,需要根据输入文件中指定的宽度和高度来计算所需的内存空间。在受影响的版本中,用于存储宽度和高度的变量为整数类型。攻击者可以设置极大的宽度和高度值,使得它们的乘积(即所需的总字节数)超过整数类型的最大表示范围,从而发生整数溢出(回绕)。
例如,如果将宽度和高度设置为特定的大数,相乘结果可能会溢出变成一个很小的正整数。程序随后会根据这个溢出后的、较小的值申请内存堆块。然而,在后续的文件数据读取和拷贝阶段,程序可能受到实际文件长度或其他未受溢出影响的逻辑控制,尝试向该堆块写入远大于其容量的数据。
这种操作导致了典型的堆溢出。由于写入的数据量和内容部分由攻击者控制,攻击者能够覆盖堆中相邻的内存块,包括堆元数据、函数指针或其他对象。通过精心布局堆内存(Heap Feng Shui)和构造特定的溢出数据,攻击者可以劫持程序的执行流,使其跳转到恶意代码。虽然攻击向量为本地(AV:L),且需要用户交互(UI:R),但这仍对处理用户上传文件的应用程序构成了严重威胁,可能导致服务器端被入侵或客户端被植入后门。