CVE-2025-67269CVE-2025-67269是gpsd项目中的一个高危整数下溢漏洞,CVSS评分7.5。该漏洞存在于gpsd/packet.c文件的nextstate()函数中,当解析NAVCOM数据包时,程序使用表达式`lexer->length = (size_t)c - 4`计算payload长度,但未验证输入字节c是否小于4。当c值小于4时,会触发无符号整数下溢,导致lexer->length被设置为接近SIZE_MAX的巨大值。解析器随后进入无限循环,试图消费这个异常大量的字节,最终造成100% CPU占用率,形成拒绝服务(DoS)攻击条件。此漏洞可通过网络远程触发,无需任何认证或用户交互,攻击门槛低,危害严重。建议受影响用户尽快升级到修复版本或应用官方发布的补丁。
漏洞根源在于gpsd/packet.c中nextstate()函数对NAVCOM数据包解析时的整数运算逻辑缺陷。具体问题代码为:`lexer->length = (size_t)c - 4`,其中c为从网络接收的单个字节。当攻击者构造c值小于4的恶意数据包时,(size_t)c - 4运算产生无符号整数下溢。由于size_t为无符号类型,负数结果会被解释为极大的正整数(接近SIZE_MAX)。随后解析器进入while循环`while (lexer->length--)`尝试处理该巨大长度值,导致:1) CPU资源被完全占用(100%使用率);2) 程序响应停滞;3) 依赖gpsd的服务中断。攻击者可通过向gpsd监听端口发送精心构造的NAVCOM数据包实现远程DoS,无需任何认证凭证。修复方案已在commit ffa1d6f40bca0b035fc7f5e563160ebb67199da7中实现,建议添加长度校验:`if (c >= 4) lexer->length = (size_t)c - 4; else handle_error();`