{"items":[{"id":"NVI-00002466","kind":"vulnerability","title":"AVideo Vulnerable to Wallet Balance Double-Spend via TOCTOU Race Condition in transferBalance","revision":1,"unknowns":["Customer inventory, deployment, reachability and exploitation have not been inspected."],"lifecycle":"active","identifiers":["GHSA-h54m-c522-h6qr","CVE-2026-34368"],"plain_summary":"OSV carries this publisher advisory for wwbn/avideo. This is an aggregated source copy; consult the original publisher and compare update dates.","review_status":"source_listed","control_topics":[],"public_actions":[{"summary":"Identify the exact component and deployed version, examine the linked publisher’s conditions, and retain evidence of any mitigation.","source_ids":["sr-199479fdc9cdf3997fad533936ec7480"],"action_type":"investigate","limitations":"Confirm current vendor support, compatibility and deployment evidence. This report has not tested a fix in your system.","current_supported_target":null}],"schema_version":"1.1.0","source_metrics":[],"why_it_matters":"Published affected context helps an owner decide what evidence to gather. This report has not examined your application.","related_sources":[{"id":"sr-199479fdc9cdf3997fad533936ec7480","url":"https://github.com/advisories/GHSA-h54m-c522-h6qr","basis":"vendor_advisory","notes":"GitHub-origin advisory, CC-BY-4.0; OSV is an aggregate copy, not independent corroboration.","title":"GHSA-h54m-c522-h6qr","publisher":"GitHub Advisory Database via OSV","observed_at":"2026-10-31T21:42:20.425Z"}],"affected_context":[{"certainty":"source_listed","source_ids":["sr-199479fdc9cdf3997fad533936ec7480"],"technology":"wwbn/avideo","known_exclusions":[],"conditions_summary":"## Summary\n\nThe `transferBalance()` method in `plugin/YPTWallet/YPTWallet.php` contains a Time-of-Check-Time-of-Use (TOCTOU) race condition. The method reads the sender's wallet balance, checks sufficiency in PHP, then writes the new balance — all without database transactions or row-level locking. An attacker with multiple authenticated sessions can send concurrent transfer requests that all read the same stale balance, each passing the balance check independently, resulting in only one deduction being applied while the recipient is credited multiple times.\n\n## Details\n\nThe vulnerable code path in `plugin/YPTWallet/YPTWallet.php:450-517`:\n\n```php\n// Line 473-474: READ - fetch current balance (plain SELECT, no FOR UPDATE)\n$senderWallet = self::getWallet($fromUserId);\n$senderBalance = $senderWallet->getBalance();\n$senderNewBalance = $senderBalance - $amount;\n\n// Line 477: CHECK - verify sufficient funds in PHP\nif ($senderNewBalance setBalance($senderNewBalance);\n$senderWalletId = $senderWallet->save();\n\n// Line 497-502: Credit receiver (also plain SELECT + UPDATE)\n$receiverWallet = sel","public_affected_ranges":["ECOSYSTEM: introduced 0; last_affected 26.0"]}],"null_published_at":"2026-10-31T22:00:33.891Z","source_updated_at":"2026-03-30T18:11:23.402Z","source_disclosed_at":"2026-03-30T17:51:12.000Z","is_synthetic_fixture":false,"null_last_reviewed_at":null,"public_change_summary":"First indexed by Null; source disclosure date is shown separately.","null_first_observed_at":"2026-10-31T21:42:20.425Z"}],"next_cursor":null,"snapshot_revision":"42594"}