Mar 23, 2026·5 min read·65 visits
An unauthenticated information disclosure vulnerability in AVideo's Permissions plugin allows complete mapping of user groups to plugins via a simple HTTP GET request.
WWBN AVideo versions 26.0 and prior suffer from a missing authorization vulnerability (CWE-862) in the Permissions plugin. Unauthenticated attackers can query the list.json.php endpoint to extract the complete internal permission matrix, detailing the relationships between user groups and plugins. This flaw arises from a failure to implement functional level access control checks that are present in sibling administrative endpoints.
WWBN AVideo is an open-source video platform that utilizes a plugin architecture to extend base functionality. The Permissions plugin manages access control by defining relationships between user groups and various platform plugins. This system dictates which users can access specific features within the application.
In AVideo versions up to and including 26.0, a Missing Authorization vulnerability (CWE-862) exists within the Permissions plugin's administrative interface. Sibling endpoints in the plugin/Permissions/View/Users_groups_permissions/ directory, such as add.json.php and delete.json.php, properly restrict access to administrative users. The list.json.php endpoint omits this authorization gate entirely.
This oversight allows an unauthenticated remote attacker to retrieve the complete mapping of user groups to plugins. The exposed JSON matrix reveals the internal authorization model of the application. This data facilitates targeted privilege escalation attacks by exposing exactly which user groups possess access to which platform extensions.
The vulnerability originates from a failure to implement functional level access control in the list.json.php script. When an HTTP request is made to this endpoint, the PHP script initializes the global application environment by requiring configuration.php. It then proceeds directly to resource retrieval without verifying the session state or user role.
The script calls the static method Users_groups_permissions::getAll(). This method relies on the underlying ObjectYPT database abstraction layer to execute a SELECT * FROM users_groups_permissions SQL query. Because the script does not halt execution or validate the requester's privileges prior to this call, the query executes unconditionally.
The fundamental error is the absence of an explicit authorization boundary. The application relies on the developer to manually include authorization checks in every endpoint, creating a fragile security posture where a single omitted check results in direct data exposure.
Analysis of the plugin/Permissions/View/Users_groups_permissions/list.json.php file reveals the exact missing logic. The vulnerable version of the script consists of basic initialization followed immediately by data extraction.
<?php
require_once '../../../../videos/configuration.php';
require_once $global['systemRootPath'] . 'plugin/Permissions/Objects/Users_groups_permissions.php';
header('Content-Type: application/json');
$rows = Users_groups_permissions::getAll();
?>
{"data": <?php echo json_encode($rows); ?>}The remediation applied in commit b583acdc9a9d1eab461543caa363e1a104fb4516 introduces the necessary validation. The patch first verifies that the Permissions plugin is active using AVideoPlugin::loadPluginIfEnabled('Permissions'). It then enforces the administrative requirement via User::isAdmin(), halting execution and returning an error JSON object if the check fails.
<?php
require_once '../../../../videos/configuration.php';
require_once $global['systemRootPath'] . 'plugin/Permissions/Objects/Users_groups_permissions.php';
+$plugin = AVideoPlugin::loadPluginIfEnabled('Permissions');
+if (!User::isAdmin()) {
+ die(json_encode(['error' => true, 'msg' => 'You cant do this']));
+}
header('Content-Type: application/json');
$rows = Users_groups_permissions::getAll();This fix aligns the list.json.php endpoint with the security model used by other administrative endpoints in the same directory, establishing a consistent authorization boundary.
Exploitation of CVE-2026-33501 requires no authentication, no special network positioning, and no prior knowledge of the target system. An attacker simply issues an HTTP GET request to the vulnerable endpoint. The vulnerability is highly reliable and leaves minimal forensic footprint beyond standard web server access logs.
The exploit can be executed using standard command-line HTTP clients. The following proof-of-concept demonstrates the attack vector:
curl -s https://<target-avideo-instance>/plugin/Permissions/View/Users_groups_permissions/list.json.phpThe server responds with a JSON object containing an array of permission records. Each record links a users_groups_id to a plugins_id, alongside metadata such as type and status.
{
"data": [
{
"id": "1",
"users_groups_id": "2",
"plugins_id": "5",
"type": "1",
"status": "a"
}
]
}The direct impact of CVE-2026-33501 is the unauthorized disclosure of the application's internal authorization model. The CVSS v3.1 base score of 5.3 reflects this scope, characterizing the vulnerability as a low-impact confidentiality breach with no integrity or availability consequences.
While the data exposed does not include user credentials or personally identifiable information (PII), it provides substantial reconnaissance value. By mapping user groups to specific plugins, an attacker gains a blueprint of the application's attack surface. This allows the attacker to identify which user roles possess access to potentially vulnerable extensions.
This vulnerability serves as a stepping stone for complex privilege escalation attacks. An attacker can use the permission matrix to correlate accessible plugins with known vulnerabilities in those plugins, streamlining subsequent exploitation attempts against authenticated attack surfaces.
The vendor addressed this vulnerability in March 2026. Organizations deploying WWBN AVideo must upgrade to the post-26.0 release that incorporates the official patches. The fix is implemented across two specific commits (b583acdc9a9d1eab461543caa363e1a104fb4516 and dc3c825734628bb32550d0daa125f05bacb6829c).
If immediate patching is not feasible, administrators can manually apply the patch by modifying the plugin/Permissions/View/Users_groups_permissions/list.json.php file on the server. The manual remediation involves inserting the AVideoPlugin::loadPluginIfEnabled and User::isAdmin checks directly before the header() declaration.
Network administrators can also mitigate this issue at the web application firewall (WAF) or reverse proxy level. Rules can be configured to block external requests to the plugin/Permissions/View/Users_groups_permissions/ directory, restricting access solely to trusted internal IP ranges or management subnets.
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N| Product | Affected Versions | Fixed Version |
|---|---|---|
WWBN AVideo WWBN | <= 26.0 | - |
| Attribute | Detail |
|---|---|
| CWE ID | CWE-862 |
| Attack Vector | Network |
| CVSS Score | 5.3 (Medium) |
| Impact | Confidentiality: Low |
| Exploit Status | Proof of Concept (PoC) Available |
| KEV Status | Not Listed |
The software does not perform an authorization check when an actor attempts to access a resource or perform an action.
A high-severity access control vulnerability in ToolHive CLI before v0.30.1 and ToolHive Studio before v0.38.0 allows local containerized MCP servers to bypass network isolation. This enables malicious workloads to establish TCP/IP connections to administrative and control plane endpoints exposed on the host loopback interface.
AnyCable is a real-time communication server. Prior to version 1.6.15, its Pusher-compatible REST API suffered from an authentication bypass vulnerability because it failed to verify that the request body matched the signature-validated body_md5 parameter. This allows attackers to perform replay attacks with modified body contents.
A denial-of-service vulnerability exists in AnyIO prior to version 4.14.2. Standard error streams of process-pool workers are connected to an operating system pipe that is never drained by the parent process. This allows a worker to fill the pipe buffer and deadlock indefinitely.
CVE-2026-63349 is a critical privilege-dropping bypass vulnerability in the AnyIO asynchronous framework (versions 4.14.0 and 4.14.1) on POSIX platforms. Due to a variable assignment typo, supplementary groups specified by the developer are not correctly propagated to the execution backend, resulting in subprocesses retaining the parent process's elevated supplementary group permissions.
CVE-2026-63406 is an information disclosure vulnerability in AnyCable-go prior to version 1.6.15. The built-in telemetry client is enabled by default with a hardcoded public authentication token ('secret'). This client digests highly sensitive configuration parameters and command-line arguments, including JWT secrets and RPC secrets, into a stable SHA-256 fingerprint. This fingerprint is sent over public networks, exposing those administrative secrets to offline dictionary and brute-force attacks if intercepted.
CVE-2026-84992 is a Cross-Site Scripting (XSS) vulnerability affecting md-editor-v3 before version 6.5.4. It occurs because the fenced-code block language parser directly interpolates unescaped language metadata into unquoted HTML attributes inside the custom rendering callback. This bypasses the built-in XSSPlugin which runs during the parsing phase, before rendering.