Mar 19, 2026·7 min read·20 visits
An unauthenticated endpoint in AVideo's LoginControl plugin allows arbitrary PGP decryption operations. Attackers can exploit this to consume server CPU resources or expose private keys via system logs.
AVideo versions up to and including 25.0 expose a publicly accessible, unauthenticated endpoint that performs server-side PGP decryption. This vulnerability allows an anonymous attacker to submit arbitrary cryptographic workloads to the server, potentially causing resource exhaustion and exposing sensitive private key material in application logs.
The AVideo open-source video streaming platform contains a critical access control flaw within its cryptographic utility endpoints. The specific vulnerability resides in the LoginControl plugin, which exposes a server-side PGP decryption routine to unauthenticated external actors. This flaw is formally classified under CWE-306 (Missing Authentication for Critical Function) and CWE-287 (Improper Authentication).
The application exposes the PHP script at the URI path plugin/LoginControl/pgp/decryptMessage.json.php. This endpoint is designed to accept user-controlled JSON payloads and process them through the underlying cryptographic libraries. Because the script does not validate the existence of a valid user session prior to execution, any network request reaching the web server will trigger the internal PHP logic.
The immediate impacts of this missing authorization check are twofold. First, it permits resource exhaustion, as an attacker can force the server to execute computationally expensive decryption algorithms repeatedly. Second, it creates an information disclosure vector, as the private keys and passphrases transmitted in the request payload may be captured by reverse proxies, web application firewalls, or standard error logging mechanisms.
The root cause of this vulnerability is the complete omission of session validation and authorization guardrails within the target PHP script. In a properly secured application architecture, API endpoints that perform sensitive or resource-intensive operations must mandate user authentication. The AVideo platform typically utilizes a specific method, such as User::isLogged(), to enforce these access controls.
The vulnerable script accepts an HTTP POST request with a JSON body containing three specific keys: privateKeyToDecryptMsg, textToDecrypt, and keyPassword. The application parses this JSON stream and assigns the values directly to an internal object. The script then calls the decryptMessage() function, passing these untrusted values directly as arguments.
Because the PHP execution model processes scripts linearly, the absence of an early termination condition allows execution to proceed directly to the cryptographic subroutine. There is no middleware intercepting the request, nor is there any authorization check validating whether the requesting client possesses the permissions required to utilize the cryptographic utility.
This structural oversight transforms the server into an unauthenticated decryption oracle. The application logic trusts the inbound payload unconditionally, failing to verify the origin or intent of the request before allocating CPU time and memory to handle the PGP block processing.
The fundamental flaw exists within the execution flow of decryptMessage.json.php. The script expects a JSON payload and processes it without enforcing authentication constraints. The relevant vulnerable sequence demonstrates the direct ingestion of POST data into the decryption logic.
// Vulnerable Code Path (Conceptual representation based on analysis)
header('Content-Type: application/json');
$obj = new stdClass();
// Input is retrieved from php://input
$postData = file_get_contents("php://input");
$requestObj = json_decode($postData);
// Direct execution of cryptographic function without authentication
$textDecrypted = decryptMessage(
$requestObj->textToDecrypt,
$requestObj->privateKeyToDecryptMsg,
$requestObj->keyPassword
);
echo json_encode(array("decrypted" => $textDecrypted));As of March 2026, the WWBN/AVideo repository remains unpatched for this specific issue. To remediate this flaw, developers must introduce an explicit authentication verification block at the beginning of the script. This block must terminate the script execution if the requester does not hold a valid session.
// Required Patch Pattern
header('Content-Type: application/json');
// Enforce authentication check immediately
if (!User::isLogged()) {
http_response_code(403);
die(json_encode(array("error" => "Access denied. Authentication required.")));
}
$postData = file_get_contents("php://input");
$requestObj = json_decode($postData);
$textDecrypted = decryptMessage(
$requestObj->textToDecrypt,
$requestObj->privateKeyToDecryptMsg,
$requestObj->keyPassword
);This proposed fix ensures that the runtime environment evaluates the user's authentication state before parsing the JSON body or allocating resources. If the User::isLogged() condition returns false, the script halts immediately, completely mitigating both the resource exhaustion vector and the localized logging exposure.
Exploitation of this vulnerability requires minimal technical sophistication and no specialized network positioning. An attacker must simply identify an AVideo instance exposing the /plugin/LoginControl/pgp/decryptMessage.json.php endpoint. The attack relies solely on standard HTTP requests.
The attacker crafts a custom HTTP POST payload containing valid, base64-encoded PGP material. The payload structure must conform to the JSON schema expected by the script. This includes a valid private key, a ciphertext block encrypted for that specific key, and the corresponding passphrase.
curl -s -X POST \
"https://target.example.com/plugin/LoginControl/pgp/decryptMessage.json.php" \
-H "Content-Type: application/json" \
-d '{
"textToDecrypt": "-----BEGIN PGP MESSAGE-----\n<base64_ciphertext>\n-----END PGP MESSAGE-----",
"privateKeyToDecryptMsg": "-----BEGIN PGP PRIVATE KEY BLOCK-----\n<base64_private_key>\n-----END PGP PRIVATE KEY BLOCK-----",
"keyPassword": "passphrase"
}'Upon receiving the request, the AVideo server processes the payload and returns the decrypted plaintext in the HTTP response. A threat actor can script this exploitation phase, submitting highly complex cryptographic tasks in rapid succession to deliberately saturate the CPU capabilities of the hosting environment.
The concrete security impact of GHSA-5X2W-37XF-7962 focuses on application availability and secondary information disclosure. The vulnerability holds a CVSS v4.0 score of 4.8 (Medium), represented by the vector CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:L/VI:N/VA:L/SC:N/SI:N/SA:N. This score reflects the immediate lack of system-level compromise, contrasted with the localized disruption capabilities.
The primary concern is the potential for Application-layer Denial of Service (T1499.003). Asymmetric cryptographic operations, particularly PGP decryption, demand significant CPU overhead. By orchestrating a flood of valid decryption requests, an unauthenticated attacker can effectively monopolize the application's PHP worker pool. This resource starvation renders the AVideo platform unresponsive to legitimate user traffic.
A secondary risk involves CWE-312 (Cleartext Storage of Sensitive Information). The attack requires the submission of raw PGP private keys and their plaintext passphrases in the HTTP request body. Web application environments frequently feature extensive diagnostic logging, error tracing, or WAF inspection mechanisms that serialize and store incoming POST bodies. This behavior inadvertently records sensitive key material in persistent, unencrypted system logs.
Finally, the vulnerability provides attackers with an anonymous cryptographic processing oracle. Threat actors can abuse this exposed infrastructure to perform their own unrelated PGP decryption tasks, obfuscating their operational infrastructure while shifting the computational burden and power costs onto the victim organization.
As of the initial disclosure in March 2026, the WWBN/AVideo upstream repository has not released an official patch specifically resolving GHSA-5X2W-37XF-7962. Consequently, system administrators and security engineering teams must rely on localized mitigation strategies to secure vulnerable instances. The most effective immediate mitigation requires web server-level restrictions.
Administrators should implement access control rules within their web server configuration (Nginx or Apache) to deny public access to the plugin/LoginControl/pgp/ directory entirely. If the application configuration permits, restricting this directory to internal IP ranges or requiring HTTP Basic Authentication will prevent anonymous exploitation attempts. In Nginx, this involves creating a specific location block that returns a 403 Forbidden status for the targeted URI.
For teams capable of modifying the application source code directly, inserting the User::isLogged() check at the absolute beginning of decryptMessage.json.php serves as a permanent hotfix. This code-level remediation correctly aligns the script's execution requirements with the platform's overarching authorization architecture.
Furthermore, organizations must review their observability and logging pipelines. It is essential to configure web application firewalls, load balancers, and PHP error handlers to sanitize or drop POST request bodies directed at cryptographic endpoints. This operational safeguard prevents the incidental persistence of sensitive private keys and passphrases in system logs.
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:L/VI:N/VA:L/SC:N/SI:N/SA:N| Product | Affected Versions | Fixed Version |
|---|---|---|
AVideo WWBN | <= 25.0 | Unpatched |
| Attribute | Detail |
|---|---|
| Advisory ID | GHSA-5X2W-37XF-7962 |
| CWE ID | CWE-306, CWE-287, CWE-312 |
| CVSS v4.0 Score | 4.8 (Medium) |
| Attack Vector | Network |
| Authentication Required | None |
| Exploit Status | Proof of Concept (PoC) Available |
| Vulnerability Impact | Resource Exhaustion (DoS) and Information Exposure |
| Patch Status | Unpatched (as of March 2026) |
The software does not perform any authentication for functionality that requires a provable user identity or consumes a significant amount of resources.
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.
CVE-2026-81505 is a high-severity Broken Object Level Authorization (BOLA) / Insecure Direct Object Reference (IDOR) vulnerability in Convoy, a cloud-native webhooks gateway. In affected versions prior to 26.6.8, the single-item Source retrieval API endpoint authorizes project access but fails to confirm if the requested Source belongs to that specific project. This logical flaw allows authenticated users or project-scoped API key holders to bypass tenant isolation boundaries and retrieve unredacted, plaintext message broker credentials for Apache Kafka, Amazon SQS, RabbitMQ, and Google Cloud Pub/Sub belonging to other tenants. This issue is fully patched in version 26.6.8.
CVE-2026-77339 is a critical security vulnerability in Process Compose before version 1.120.0. The Model Context Protocol (MCP) Server-Sent Events (SSE) listener transport subsystem fails to validate the HTTP Host and Origin headers, and does not enforce authentication. This omissions expose local loopback listeners to DNS rebinding attacks orchestrated by malicious remote websites visited by developers, enabling unauthorized process control and arbitrary command execution.
CVE-2026-77301 is a critical uncontrolled resource allocation vulnerability in the popular Node.js library adm-zip (versions prior to 0.6.1). During ZIP decompression of asynchronous entries, the library trusts the uncompressed size metadata declared in the central directory headers. Because Node.js's streaming zlib API completely ignores the maxOutputLength configuration, a crafted ZIP archive (decompression bomb) causes the application to continually allocate resident memory buffers on the heap without limits, causing rapid memory exhaustion and a process-level Out-of-Memory (OOM) crash.