AVideo: Unauthenticated CDN Configuration Takeover via Empty Default Key Bypass and Mass-Assignment
Date: 2026-03
Affected: composer/wwbn/avideo
Attack vector: path-traversal
Category: vulnerability-disclosure
Severity: High
CVE: CVE-2026-33719
CWE: CWE-306
CVSS: 8.6 (CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:H/A:L)

## Summary The CDN plugin endpoints `plugin/CDN/status.json.php` and `plugin/CDN/disable.json.php` use key-based authentication with an empty string default key. When the CDN plugin is enabled but the key has not been configured (the default state), the key validation check is completely bypassed, allowing any unauthenticated attacker to modify the full CDN configuration — including CDN URLs, storage credentials, and the authentication key itself — via mass-assignment through the `par` request parameter. ## Details The CDN plugin defines a default empty key in `plugin/CDN/CDN.php:68`: ```php $obj->key = ""; ``` The `status.json.php` endpoint authenticates requests using this key, but the check has a critical logic flaw at lines 16-27: ```php // Line 16-19: Requires attacker to provide SOME key value if (empty($_REQUEST['key'])) { $resp->msg = 'Key is empty'; die(json_encode($resp)); } // Line 21-26: Only validates key IF stored key is non-empty if (!empty($obj->key)) { // When key is "" (default), this is FALSE //check the key if ($obj->key !== $_REQUEST['key']) { $resp->msg = 'Key Does not match'; die(json_encode($resp)); } } ``` When the stored key is the default empty string `""`, `!empty("")` evaluates to `false`, and the entire key comparison block is skipped. Any non-empty value provided by the attacker passes authentication. Following the bypass, lines 28-31 perform unchecked mass-assignment: ```php $obj->key = $_REQUE


Mitigations:

Architectural layers (MAESTRO):