Insecure encryption algorithm In wwbn/avideo
Description
AVideo has an unauthenticated decrypt oracle leaking any ciphertext
Summary
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.
Details
Entry: plugin/API/get.json.php is unauthenticated.
Handler: plugin/API/API.php get_api_decryptString() (lines ~5945–5966):
No APISecret or user check occurs before decrypting.$string = decryptString($_REQUEST['string']); return new ApiObject($string, empty($string));
Public ciphertext source: view/url2Embed.json.php returns playLink/playEmbedLink (encryptString(json_encode(...))) to any caller.
PoC
Obtain ciphertext:
CopyGET /view/url2Embed.json.php?url=https://example.com/video.mp4
playLink.
Decrypt without auth:
Response contains the plaintext JSON (videoLink, title, users_id, etc.).POST /plugin/API/get.json.php?APIName=decryptString Content-Type: application/x-www-form-urlencoded string=<playLink ciphertext>
Impact
Any encrypted payload produced by the platform can be decrypted by anyone.
Leaks tokens/links intended to be confidential; enables replay and tampering where secrecy was assumed.
Mitigation
Require API secret or authenticated/authorized user for decryptString, or remove the endpoint.
Prefer one-way signatures (HMAC) instead of exposing generic decryption.
Rotate encryption keys/salts after patch to invalidate exposed ciphertexts.
Update Impact
Minimal update. May introduce new vulnerabilities or breaking changes.
Ecosystem | Component | Affected version | Patched versions |
|---|---|---|---|
packagist | 29.0 |
Aliases
References