Osclass <= 3.4.2 (ajax.php) Local File Inclusion Vulnerability

http://osclass.org

• Affected Versions:

Version 3.4.2 and probably prior versions.

• Vulnerability Description:

The vulnerable code is located in the /oc-includes/osclass/controller/ajax.php script:

225case 'custom': // Execute via AJAX custom file
226    if(Params::existParam('route')) {
227        $routes = Rewrite::newInstance()->getRoutes();
228        $rid = Params::getParam('route');
229        $file = '../';
230        if(isset($routes[$rid]) && isset($routes[$rid]['file'])) {
231            $file = $routes[$rid]['file'];
232        }
233    } else {
234        // DEPRECATED: Disclosed path in URL is deprecated, use routes instead
235        // This will be REMOVED in 3.4
236        $file = Params::getParam('ajaxfile');
237    }
238 
239    if($file == '') {
240        echo json_encode(array('error' => 'no action defined'));
241        break;
242    }
243 
244    // valid file?
245    if( stripos($file, '../') !== false  || stripos($file, '/admin/') !== false ) { //If the file is inside an "admin" folder, it should NOT be opened in frontend
246        echo json_encode(array('error' => 'no valid ajaxFile'));
247        break;
248    }
249 
250    if( !file_exists(osc_plugins_path() . $file) ) {
251        echo json_encode(array('error' => "ajaxFile doesn't exist"));
252        break;
253    }
254 
255    require_once osc_plugins_path() . $file;

User input passed through the “ajaxfile” request parameter when handling a “custom” action within the AJAX interface is not properly sanitized being used in a call to the require_once() PHP function at line 255. This can be exploited to include arbitrary local files and execute arbitrary PHP code when the application is running on Windows.

• Solution:

Update to version 3.4.3 or later.

• Disclosure Timeline:

[29/09/2014] – Vendor notified

[29/09/2014] – Vendor response

[09/10/2014] – Version 3.4.3 released: http://blog.osclass.org/2014/10/09/osclass-3-4-3

[09/10/2014] – CVE number requested

[11/10/2014] – CVE number assigned

[31/12/2014] – Public disclosure

• CVE Reference:

The Common Vulnerabilities and Exposures project (cve.mitre.org) has assigned the name CVE-2014-8084 to this vulnerability.

• Credits:

Vulnerability discovered by Egidio Romano.