Insufficient data authenticity validation In wwbn/avideo
Description
WWBN AVideo: Authenticated wallet credit bypass in AuthorizeNet processPayment endpoint
Summary
plugin/AuthorizeNet/processPayment.json.php credits the logged-in user's wallet based only on the attacker-controlled amount POST parameter.
The endpoint contains a TODO for real Authorize.Net charging, hardcodes $paymentSuccess = true, and then calls YPTWallet::addBalance() without validating
any Authorize.Net transaction, webhook signature, hosted payment token, nonce, or server-side payment record.
This allows any logged-in user to add arbitrary funds to their own AVideo wallet when the AuthorizeNet and YPTWallet plugins are enabled.
Details
Affected file:
plugin/AuthorizeNet/processPayment.json.php
Relevant code:
$amount = isset($_POST['amount']) ? floatval($_POST['amount']) : 0; $userData = isset($_POST['userData']) ? $_POST['userData'] : []; if ($amount <= 0) { echo json_encode(['error' => 'Invalid amount']); exit; } ...
Vulnerable flow:
$_POST['amount'] is read from the client.
The endpoint only checks that the amount is greater than zero.
The real Authorize.Net charge is not performed.
$paymentSuccess is hardcoded to true.
The logged-in user's wallet is credited with the client-supplied amount.
There is no verification of:
Authorize.Net transaction ID
payment token
webhook signature
pending payment record
expected server-side amount
currency
duplicate transaction/replay state
PoC
Prerequisites:
AVideo with AuthorizeNet plugin enabled
YPTWallet plugin enabled
Attacker has any valid user account
Steps:
Log in as a low-privileged user.
Open the wallet page and record the current balance.
Send the following request with the user's authenticated session cookie:
curl -i -s -b 'PHPSESSID=<user_session>' \ -X POST 'https://target.example/plugin/AuthorizeNet/processPayment.json.php' \ --data 'amount=9999&userData[note]=poc'
The endpoint returns:
{"success":true,"result":"Payment processed and wallet updated"}
Refresh the wallet page.
The wallet balance is increased by 9999.
No Authorize.Net hosted payment page, card payment, transaction confirmation, webhook, or server-side payment validation is required.
Impact
A normal authenticated user can mint arbitrary wallet balance.
Depending on the target site's configuration, this may allow the attacker to:
purchase paid videos or subscriptions without payment
abuse any feature backed by YPTWallet
transfer fake funds to other users
manipulate accounting or payout-related workflows
bypass monetization controls
Recommended fix
Remove or disable processPayment.json.php if it is obsolete.
Never credit wallet balance from client-supplied amount alone.
Use the existing Authorize.Net hosted token / webhook / transaction reconciliation flow.
Require a verified Authorize.Net transaction ID and server-side amount lookup before calling addBalance().
Add regression tests proving arbitrary POSTs cannot credit a wallet.
Mitigation
Update Impact
Minimal update. May introduce new vulnerabilities or breaking changes.
Ecosystem | Package | Affected version |
|---|---|---|
packagist |
Aliases
References