Nashorn:潜伏在Java中的JavaScript命令执行后门

Nashorn:潜伏在Java中的JavaScript命令执行后门

☢️ Java 类对象的 JavaScript 引擎 —— Nashorn


🧠 什么是 Nashorn?

Nashorn 是 Oracle 在 Java 8 引入的 JavaScript 引擎,用于在 Java 应用中嵌入执行 JavaScript 代码。它支持调用 Java 类与对象,在构建动态脚本、配置逻辑、嵌入 DSL(领域特定语言)场景中非常流行。

📌 Nashorn 在 Java 15 被正式移除,但仍可通过插件或老版本运行时继续使用。


✨ 基本用法示例

 import javax.script.*;
 ​
 public class NashornExample {
     public static void main(String[] args) throws Exception {
         ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn");
         engine.eval("print('Hello from JavaScript!')");
         engine.eval("var date = new java.util.Date(); print(date);");
     }
 }

✅ JavaScript 代码可调用 Java 类(如 java.util.Date),实现强大的互操作能力。


💥 安全风险分析

Nashorn 的高权限访问能力,若未加以控制,将带来严重的 RCE 风险:

❗ 1. 任意 Java 类访问

 var File = Java.type("java.io.File");
 var f = new File("/etc/passwd");
 print(f.exists());

⛔ 可访问任意文件,甚至系统关键配置。


❗ 2. 命令执行

 var Runtime = Java.type("java.lang.Runtime");
 Runtime.getRuntime().exec("whoami");

⛔ 具备完全的命令执行能力和 java.lang.Runtime.exec() 是等价的,相当于 Java 中直接执行 RCE。


❗ 3. 反射/系统配置修改

 var System = Java.type("java.lang.System");
 System.setProperty("java.home", "/malicious");

⛔ 可通过反射动态加载类、设置系统属性等。


🧨 常见危险函数列表

函数/类描述风险
Java.type("java.lang.Runtime")系统命令执行🔥 高
Java.type("java.lang.ProcessBuilder")系统命令拼接执行🔥 高
Java.type("java.io.File")文件任意读写⚠️ 中
Java.type("java.lang.ClassLoader")加载自定义类🔥 高
Java.type("java.lang.System")环境变量修改⚠️ 中
Java.type("java.lang.reflect.*")反射调用绕过限制🔥 高
Java.type("javax.crypto.*")加解密敏感操作⚠️ 中

🛡️ 安全防护建议

✅ 1. 禁用 Nashorn(如非必要)

  • Java 15+ 默认移除 Nashorn;
  • Java 8~14 可通过 JVM 参数移除:
 --disable=nashorn

✅ 2. 严格控制脚本来源

  • 不允许用户上传自定义脚本;
  • 不接受未经验证的配置脚本执行;
  • 脚本使用白名单命令封装,不暴露底层对象。

✅ 3. 脚本执行沙箱化

  • 使用类白名单/方法签名控制脚本可访问内容;
  • 引入 SecurityManager 替代机制;
  • 配合安全类加载器限制对关键包的访问。

✅ 4. 脚本日志 + 审计

  • 所有脚本执行内容、来源、执行时间应完整记录;
  • 建议接入安全审计系统,监控异常调用(如执行 Runtime.exec()、访问外部网络等)。

🔁 替代方案(推荐)

替代方案特点安全性
GraalVM JavaScript现代、支持多语言、可配置沙箱机制✅ 强
MVEL / SpEL / OGNL简化脚本表达式,限制 Java API 访问✅ 中等
ANTLR 自定义 DSL精确定义语法,完全可控✅ 最强
封装自定义命令 API仅允许调用业务允许的方法✅ 推荐

✅ 总结建议

项目建议
使用 Nashorn❌ 不推荐,存在高危风险
使用 JavaScript 脚本✅ 推荐使用 GraalVM 并启用沙箱
用户自定义脚本❌ 禁止,或使用封装命令 API
安全机制✅ 日志记录 + 沙箱限制 + 类/方法白名单

© 版权声明
THE END
喜欢就支持一下吧
点赞7赞赏 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容