CVE-2025-66453Rhino是Mozilla开发的一个纯Java实现的JavaScript开源引擎,广泛应用于需要嵌入式JavaScript功能的Java应用程序中。该漏洞存在于Rhino的toFixed()函数实现中,攻击者可以通过向该函数传递精心构造的浮点数来触发拒绝服务(DoS)攻击。当应用程序处理用户输入的浮点数并调用toFixed()方法时,如果输入的小数位数设置过大,会导致DToA模块中的pow5mult函数执行极高次数的幂运算(5的n次方),造成CPU资源耗尽,最终导致应用程序无响应或崩溃。此漏洞无需任何特殊权限或用户交互即可被利用,属于远程网络攻击向量。由于JavaScript引擎常被用于服务器端脚本执行、Web应用后端服务等场景,攻击者可以通过发送特制请求轻松触发该漏洞,影响服务的可用性。
该漏洞的核心问题在于Rhino的DToA模块中数字到字符串转换的实现。当调用toFixed()函数且参数值较大时,执行流程如下:首先,NativeNumber.numTo方法被调用;然后传递到DToA.JS_dtostr函数;接着进入DToA.JS_dtoa函数;最终调用DToA.pow5mult函数。pow5mult函数的目的是计算5的n次幂(其中n为toFixed()的参数值),当n值极大时(如1000或更高),计算5^n会导致计算复杂度指数级增长,消耗大量CPU时间和内存资源。在纯Java实现中,这种大数幂运算没有像C语言实现那样的优化措施,更容易触发性能问题。攻击者可以通过JavaScript代码(如:value.toFixed(1000000))轻松触发此漏洞路径。由于JavaScript引擎通常在服务器端运行,攻击者可以通过发送包含恶意浮点数的HTTP请求来批量触发此漏洞,导致服务瘫痪。