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

admin 2025年4月23日09:36:55评论0 views字数 1844阅读6分8秒阅读模式

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

🧠 什么是 Nashorn?

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

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

✨ 基本用法示例

import javax.script.*;publicclassNashornExample{publicstaticvoidmain(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
安全机制
✅ 日志记录 + 沙箱限制 + 类/方法白名单

原文始发于微信公众号(季升安全):Nashorn:潜伏在Java中的JavaScript命令执行后门

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年4月23日09:36:55
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Nashorn:潜伏在Java中的JavaScript命令执行后门https://cn-sec.com/archives/3967431.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息