The API plugin exposes a decryptString action without any authentication. Anyone can submit ciphertext and receive plaintext. Ciphertext is issued publicly (e.g., view/url2Embed.json.php), so any user can recover protected tokens/metadata. Severity: High.
plugin/API/get.json.php is unauthenticated.plugin/API/API.php get_api_decryptString() (lines ~5945–5966):
$string = decryptString($_REQUEST['string']);
return new ApiObject($string, empty($string));
No APISecret or user check occurs before decrypting.view/url2Embed.json.php returns playLink/playEmbedLink (encryptString(json_encode(...))) to any caller.GET /view/url2Embed.json.php?url=https://example.com/video.mp4
Copy playLink.POST /plugin/API/get.json.php?APIName=decryptString
Content-Type: application/x-www-form-urlencoded
string=<playLink ciphertext>
Response contains the plaintext JSON (videoLink, title, users_id, etc.).decryptString, or remove the endpoint.{
"cwe_ids": [
"CWE-287",
"CWE-312",
"CWE-326",
"CWE-327"
],
"github_reviewed": true,
"github_reviewed_at": "2026-03-20T21:55:12Z",
"nvd_published_at": "2026-03-23T19:16:40Z",
"severity": "HIGH"
}