Weblogic反序列化漏洞
Java 提供了一种对象序列化的机制,该机制中,一个对象可以被表示为一个字节序列,该字节序列包括该对象的数据、有关对象的类型的信息和存储在对象中数据的类型。
将序列化对象写入文件之后,可以从文件中读取出来,并且对它进行反序列化,也就是说,对象的类型信息、对象的数据,还有对象中的数据类型可以用来在内存中新建对象。
整个过程都是 Java 虚拟机(JVM)独立的,也就是说,在一个平台上序列化的对象可以在另一个完全不同的平台上反序列化该对象。
漏洞描述:
序列化指的是把对象转换成字节流,便于保存在内存、文件、数据库中;而反序列化则是其逆过程,由字节流还原成对象。Java中ObjectOutputStream类的writeObject()方法可以实现序列化,ObjectInputStream类的readObject()方法用于反序列化。
序列化:将java的对象转换为字节序列的过程叫做序列化
反序列化:将字节对象转换为Java的对象的过程叫做反序列化
通常情况下,序列化有两种用途:,
1)把对象的字节序列永久的保存在硬盘中
2)在网络上传输对象的字节序列
由于WebLogic采用黑名单的方式过滤危险的反序列化类,所以只要找到不在黑名单范围内的反序列化类就可以绕过过滤,执行系统命令。这次的漏洞就是利用了这一点,通过 JRMP(Java Remote Messaging Protocol ,是特定于 Java 技术的、用于查找和引用远程对象的协议)协议达到执行任意反序列化内容。
漏洞危害:
攻击者可以利用WebLogic的反序列化漏洞,通过构造恶意请求报文远程执行命令,危害较大。
WebLogic在国内的的应用范围比较广,支撑着很多企业的核心业务。在很多公司的内网部署有WebLogic,攻击者一旦利用此漏洞,便可以近一步进行内网渗透,取得服务器的系统权限。
jboss反序列化漏洞
漏洞描述:
Jboss 应用服务利用的是HTTP协议,可以在任何端口上运行,默认安装在8080端口,而且Jboss与“JMXInvokerServlet”的通信过程中存在一个公开漏洞(可以直接上传部署恶意war包,关键字:“8080/jmx-console/” 与“flavor=URL,type=DeploymentScanner”)。
JMX是一个java的管理协议,在Jboss中的JMXInvokerServlet可以使用HTTP协议与其进行通话,这一通信功能依赖于java的序列化类。
我们可以通过以下三个面检查下我们自己的jboss应用是否存在漏洞利用的风险:
(1)JBossJMXInvokerServlet接口(默认8080端口)以及JBoss Web Console (/web-console/) 是否禁止对外;
(2)以上系统是否都有在传输对象内容时,使用序列化技术(二进制流或base64encode)
(3)当对这些传输数据截包并且被替换为“包含命令执行的序列化内容”时,远程命令执行即触发。
漏洞原理:
该漏洞位于JBoss的HttpInvoker组件中的 ReadOnlyAccessFilter 过滤器中,其doFilter方法在没有进行任何安全检查和限制的情况下尝试将来自客户端的序列化数据流进行反序列化,导致攻击者可以通过精心设计的序列化数据来执行任意代码。但近期有安全研究者发现JBOSSAS 6.x也受该漏洞影响,攻击者利用该漏洞无需用户验证在系统上执行任意命令,获得服务器的控制权。
jBoss 是 J2EE 环境中流行的 Web 容器,如果配置不当可能造成远程命令执行。
jBoss 在默认安装时由一个管理后台,JMX-Console。该后台给管理员一些高级功能,包括配置 MBeans。通过 8080 端口访问 /jmx-console 能够进入 管理界面,默认安装时访问 JMX-Console 是没有任何认证的。
在 JMX-Console 中,有多种可以远程执行命令的方法:
通过 DeploymentScanner 远程加载一个 war 包:默认 DeploymentScanner 将检查 URL 是否是 file:/[JBOSSHOME]/server/default/deploy/,但通过 addURL() 方法却可以添加一个远程 war 包。
通过 BSH(Bean Shell)Deployment 也能部署 war 包:BSH 能够执行一次性的脚本或创建服务。
出于安全防御的目的,在做安全加固的时候,应该删除 JMX-Console 后台:删除 jmx-console.war 和 web-console.war。如果业务上不得不使用 JMX-Console,则应该使用一个强密码,并且运行 JMX-Console 的端口不应该向 Internet 开放。
影响范围:5.x和6.x版本的jboss
漏洞危害:
远程攻击者利用漏洞可在未经任何身份验证的服务器主机上执行任意代码