background

CVE-2026-41463: ZipSlip Path Traversal via Plugin Upload

Published 23 avril 2026
CVSS 9.4
ProjeQtor
ProjeQtor
From 7.0 to 12.4.4
Executive summaryA Zip Slip vulnerability was identified in the plugin upload feature: file paths are not validated, allowing writes outside the intended directory and the upload of malicious files (webshells).

Description

A Zip Slip vulnerability was identified in the plugin upload feature (uploadPlugin.php). During the extraction of ZIP archives, file paths are not properly validated, allowing an attacker to include malicious relative paths (e.g., ../) in order to write files outside the intended extraction directory.

This weakness enables bypassing file management security mechanisms and allows arbitrary file writes on the server’s filesystem, including the deployment of malicious PHP scripts such as webshells.

Limited technical details disclosed

No additional technical details are being disclosed at this stage in order to reduce the potential impact these vulnerabilities could have on self-hosted instances. For the moment, this will remain the case until we receive approval from ANSSI. This article is not an exploitation tutorial, and I disclaim all responsibility for any malicious use or damage resulting from the information provided.

Attack Vectors

  • Network access: Remote
  • Authentication required: Low (requires upload capability)
  • User interaction: None (extraction is automatic on the server side)
  • Affected functionality: Archive upload / extraction endpoint
  • Triggered by sending a ZIP/TAR archive containing entries like ../../var/www/html/shell.php

Impact

  • Arbitrary file write on the server
  • Deployment of PHP webshells
  • Remote Code Execution (RCE)
  • Full compromise of the application server

Possible Mitigation

To mitigate the Zip Slip vulnerability, it is essential to validate and normalize each file path before extraction. The idea is to ensure that every file in the archive strictly remains within the intended directory and that no malicious relative or absolute path (../ or /etc/passwd) can be used to write outside the secure directory.

The archive should be processed file by file, ignoring any suspicious entries.

Code<?php
$zip = new ZipArchive();
$zipFile = 'uploaded_plugin.zip';
$extractTo = '/path/to/safe/directory/';
if ($zip->open($zipFile) === TRUE) {
for ($i = 0; $i < $zip->numFiles; $i++) {
$entry = $zip->getNameIndex($i);
// Normaliser le chemin et vérifier qu'il reste dans le répertoire sécurisé
$entryPath = realpath($extractTo . DIRECTORY_SEPARATOR . $entry);
if ($entryPath === false || strpos($entryPath, realpath($extractTo)) !== 0) {
// Chemin invalide, ignorer l’entrée
continue;
}
// Extraire l’entrée en toute sécurité
copy('zip://' . $zipFile . '#' . $entry, $entryPath);
}
$zip->close();
} else {
throw new Exception("Impossible d'ouvrir l'archive ZIP");
}
?>

Authors

© 2023 Yassine Damiri. All Rights Reserved.
AboutPrivacy PolicyContact