同一批的 ghsa-x692-q9x7-8c3f(high)披露:构造特定操作数与 scale 参数时,bccomp() 会发生越界写。与常见的字符串注入不同,这是 bcmath 扩展内部内存安全问题,仅影响 8.4 / 8.5 分支。

▲ 事件来源页面实时截图:php/php-src Security Advisories
影响与处置
排查业务中是否把用户可控值直接传入 bccomp 的 scale 参数。升级至 7 月批次及以后的版本(当前 8.5.12 / 8.4.27)。
越界写是怎么发生的
bccomp() 在比较两个任意精度数字时,会按 scale 参数对齐小数位。特制的操作数与 scale 组合会让内部缓冲区长度计算出错,随后的写入越过缓冲区边界,造成内存破坏。由于结果参与后续比较逻辑,攻击者还能间接影响程序分支。
受影响场景与处置
把外部输入(表单金额、签名参数、加密协议字段)直接传入 bcmath 函数的应用风险最高。升级到含修复的补丁版本即可;同时建议对输入做长度与格式校验,避免超长数字串进入任意精度计算路径。
代码层面的自查
搜索 bccomp / bcadd / bcmul 的调用点,确认第一个参数来源:若来自请求参数且未限制长度与字符集,应加校验;金额类运算建议固定 scale 并在比较前统一精度,避免不同精度导致逻辑分支异常。
与使用习惯的关系
很多项目比较金额时会先 bccomp 再分支,精度参数常随手写成固定值。建议把 scale 抽成常量并统一,既降低触发边界条件的概率,也让代码更易审计。
测试怎么补
为 bccomp 相关逻辑补充边界用例:超长小数、scale 大于位数、负数与零比较、科学计数法输入。这些用例既能验证升级后的行为,也能防止后续重构重新引入问题。

▲ 官方公告页配图
关键信息
| 项目 | 内容 |
|---|---|
| 类目 | 安全漏洞 |
| 级别 | 高 |
| 日期 | 2026-07-30 |
| 关联编号 | CVE-2026-17544 / GHSA-x692-q9x7-8c3f |
| 影响范围 | 8.4 / 8.5 分支 BCMath |
| 核验状态 | 已官方确认 |
来源:https://github.com/php/php-src/security/advisories/GHSA-x692-q9x7-8c3f











