Security Vulnerability Report
中文
CVE-2026-33488 CVSS 7.4 HIGH

CVE-2026-33488

Published: 2026-03-23 16:16:49
Last Modified: 2026-03-24 17:49:58

Description

WWBN AVideo is an open source video platform. In versions up to and including 26.0, the `createKeys()` function in the LoginControl plugin's PGP 2FA system generates 512-bit RSA keys, which have been publicly factorable since 1999. An attacker who obtains a target user's public key can factor the 512-bit RSA modulus on commodity hardware in hours, derive the complete private key, and decrypt any PGP 2FA challenge issued by the system — completely bypassing the second authentication factor. Additionally, the `generateKeys.json.php` and `encryptMessage.json.php` endpoints lack any authentication checks, exposing CPU-intensive key generation to anonymous users. Commit 00d979d87f8182095c8150609153a43f834e351e contains a patch.

CVSS Details

CVSS Score
7.4
Severity
HIGH
CVSS Vector
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/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
#!/usr/bin/env python3 # PoC for CVE-2026-33488: 512-bit RSA Key Factorization # This script simulates the attack vector described in the vulnerability. # Note: 512-bit RSA keys are insecure and can be factored using tools like RsaCtfTool or MSieve. import sys def simulate_attack(): # 1. Obtain Public Key from vulnerable endpoint # URL: http://target/AVideo/plugin/LoginControl/generateKeys.json.php # Response contains a 512-bit public key (n, e). print("[*] Step 1: Fetching 512-bit public key from target...") # n = ... (fetched from target) # e = 65537 # 2. Factorize the modulus (n) print("[*] Step 2: Factoring 512-bit modulus using GNFS/MSieve...") # Calculation happens here. For 512-bit keys, this takes hours on commodity hardware. # p = find_prime_factor(n) # q = n // p # 3. Derive Private Key print("[*] Step 3: Deriving private key (d)...") # phi = (p - 1) * (q - 1) # d = modular_inverse(e, phi) # 4. Decrypt 2FA Challenge print("[*] Step 4: Decrypting 2FA challenge to bypass authentication...") # plaintext = pow(challenge, d, n) print("[+] Success: 2FA bypassed. Access granted.") if __name__ == "__main__": simulate_attack()

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2026-33488", "sourceIdentifier": "[email protected]", "published": "2026-03-23T16:16:49.103", "lastModified": "2026-03-24T17:49:58.183", "vulnStatus": "Analyzed", "cveTags": [], "descriptions": [{"lang": "en", "value": "WWBN AVideo is an open source video platform. In versions up to and including 26.0, the `createKeys()` function in the LoginControl plugin's PGP 2FA system generates 512-bit RSA keys, which have been publicly factorable since 1999. An attacker who obtains a target user's public key can factor the 512-bit RSA modulus on commodity hardware in hours, derive the complete private key, and decrypt any PGP 2FA challenge issued by the system — completely bypassing the second authentication factor. Additionally, the `generateKeys.json.php` and `encryptMessage.json.php` endpoints lack any authentication checks, exposing CPU-intensive key generation to anonymous users. Commit 00d979d87f8182095c8150609153a43f834e351e contains a patch."}, {"lang": "es", "value": "WWBN AVideo es una plataforma de video de código abierto. En versiones hasta la 26.0 inclusive, la función `createKeys()` en el sistema PGP 2FA del plugin LoginControl genera claves RSA de 512 bits, que han sido factorizables públicamente desde 1999. Un atacante que obtiene la clave pública de un usuario objetivo puede factorizar el módulo RSA de 512 bits en hardware comercial en horas, derivar la clave privada completa y descifrar cualquier desafío PGP 2FA emitido por el sistema — eludiendo completamente el segundo factor de autenticación. Además, los endpoints `generateKeys.json.php` y `encryptMessage.json.php` carecen de cualquier verificación de autenticación, exponiendo la generación de claves que consume mucha CPU a usuarios anónimos. El commit 00d979d87f8182095c8150609153a43f834e351e contiene un parche."}], "metrics": {"cvssMetricV31": [{"source": "[email protected]", "type": "Secondary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N", "baseScore": 7.4, "baseSeverity": "HIGH", "attackVector": "NETWORK", "attackComplexity": "HIGH", "privilegesRequired": "NONE", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "HIGH", "integrityImpact": "HIGH", "availabilityImpact": "NONE"}, "exploitabilityScore": 2.2, "impactScore": 5.2}, {"source": "[email protected]", "type": "Primary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H", "baseScore": 8.1, "baseSeverity": "HIGH", "attackVector": "NETWORK", "attackComplexity": "HIGH", "privilegesRequired": "NONE", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "HIGH", "integrityImpact": "HIGH", "availabilityImpact": "HIGH"}, "exploitabilityScore": 2.2, "impactScore": 5.9}]}, "weaknesses": [{"source": "[email protected]", "type": "Secondary", "description": [{"lang": "en", "value": "CWE-326"}]}], "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/00d979d87f8182095c8150609153a43f834e351e", "source": "[email protected]", "tags": ["Patch"]}, {"url": "https://github.com/WWBN/AVideo/security/advisories/GHSA-6m5f-j7w2-w953", "source": "[email protected]", "tags": ["Exploit", "Mitigation", "Vendor Advisory"]}, {"url": "https://github.com/WWBN/AVideo/security/advisories/GHSA-6m5f-j7w2-w953", "source": "134c704f-9b21-4f2e-91b3-4a467353bcc0", "tags": ["Exploit", "Mitigation", "Vendor Advisory"]}]}}