用友U8Cloud FileTransportServlet 反序列化漏洞(附利用脚本地址)

用友U8Cloud FileTransportServlet 反序列化漏洞(附利用脚本地址)

原创 chobits02 Code4th安全团队 2025-02-10 14:14

图片

用友U8cloud
是用友推出的新一代云ERP,主要聚焦成长型、创新型企业,提供企业级云ERP整体解决方案,全面支持多组织业务协同、营销创新、智能财务、人力服务,构建产业链制造平台,融合用友云服务,实现企业互联网资源连接、共享、协同,赋能中国成长型企业高速发展、云化创新。

用友U8Cloud在全版本中存在反序列化漏洞。未经授权的攻击者可以通过访问FileTransportServlet类时构造恶意请求包,当传递的恶意序列化数据被系统反序列化后,将会导致远程代码执行,从而使得服务器被控制。

网上有用友漏洞官方预警,但是没有公开利用poc

但是方法名称为
FileTransportServlet,可以审计代码得出poc

漏洞的关键代码如下,doAction方法中调用了
performTask方法

  public void performTask(HttpServletRequest request, HttpServletResponse response) throws Exception {
    GZIPInputStream input = new GZIPInputStream((InputStream)request.getInputStream());
    GZIPOutputStream output = new GZIPOutputStream((OutputStream)response.getOutputStream());
    ObjectOutputStream objOut = new ObjectOutputStream(output);
    ObjectInputStream objInput = new ObjectInputStream(input);
    FileTransportVO transVO = (FileTransportVO)objInput.readObject();
    UnitInfoVO unitInfo = IUFOUICacheManager.getSingleton().getUnitCache().getUnitInfoByCode(transVO.getUnitCode());
    if (unitInfo != null) {
      String strUnitID = unitInfo.getPK();
      ImportFileUtil.importFileByUnit(request.getSession().getId(), transVO.getContent(), strUnitID, transVO.getLangCode());
      objOut.writeObject(null);
    } else {
      objOut.writeObject(new UfoException("miufoexpnew00034", new String[] { transVO.getUnitCode() }));
    } 
    objInput.close();
    objOut.close();
    input.close();
    output.close();
  }

performTask方法中对前端传参进行了gzip解压后,进行了
readObject反序列化造成了漏洞

使用
ysoserial-all.jar生成cc6的利用链文件,
使用脚本读取内容构造请求dnslog验证漏洞,如下图

漏洞利用脚本附在团队
Freebuf知识大陆中了,地址如下

往期漏洞利用文档即工具一览

更多资源移步知识大陆

SRC漏洞挖掘出洞课程
,是由团队内部师傅根据实际挖洞经历整合的适合挖掘漏洞但是缺乏思路、刚接触学习漏洞挖掘不出漏洞的师傅们的漏洞挖掘教程。

第一期课程价格
199
,这价格还要什么自行车?课程正在持续更新中~

寻找网络安全的守护者,C4安全团队纳新中。我们是一群对网络安全充满热情的年轻探险者,团队名为 Code4th安全团队(简称 C4安全)。我们正式成立于2024年7月,致力于深入挖掘国内外SRC平台的漏洞,以守护网络世界的安全。

END

关注Cod
e4th安全团队

了解更多安全相关内容~