CVE-2026-39314OpenPrinting CUPS 2.4.16及更早版本存在整数下溢漏洞。未经授权的本地攻击者可通过提交包含负数值job-password-supported IPP属性的打印任务,绕过边界检查。这将导致cupsd守护进程触发内存错误而崩溃。结合systemd的自动重启机制,攻击者可反复触发该漏洞,造成系统打印服务的持续拒绝服务。
漏洞根源在于OpenPrinting CUPS源码文件cups/ppd-cache.c中的_ppdCreateFromIPP()函数。该函数负责解析IPP属性并生成PPD缓存。在处理job-password-supported属性时,代码逻辑存在缺陷,仅实施了上限边界检查,而完全忽略了对下限负值的校验。当本地非特权用户提交一个包含负数值的job-password-supported属性的打印请求时,该负值能顺利通过验证。随后,该负整数被强制转换为size_t无符号长整型,导致数值发生回绕,变成一个极大的内存尺寸(接近2^64)。该异常尺寸被直接用作memset()函数的长度参数,用于初始化栈上仅有33字节大小的缓冲区。这种巨大的内存写入操作立即导致段错误(SIGSEGV),强制以root权限运行的cupsd进程崩溃。由于现代Linux发行版通常配置systemd的Restart=on-failure策略,服务会自动重启。攻击者可利用此机制,在服务重启后立即再次发送恶意请求,形成无限崩溃循环,从而实现持久化的拒绝服务攻击。