Your RSA-2048 keys break in 2030. Find every one of them before attackers do.
🐘
🐘 Packagist
Not in CISA KEV
MEDIUM severity

WWBN AVideo: Authenticated wallet credit bypass in AuthorizeNet processPayment endpointGHSA-9392-pj54-qqf8

MEDIUMFix: WWBN/AVideo@8224024

GHSA-9392-pj54-qqf8 is a medium-severity (CVSS 4.3) CWE-345 vulnerability in WWBN/AVideo. No vendor fix is recorded yet; mitigation options are listed below.

Also known asCVE-2026-47696
Published
Updated
Affected
1 pkg
Patched
See advisory
Exploits
None indexed
Exploitation data as of Oct 17, 2026 · OSV.dev, NVD, FIRST.org (EPSS)

Exploitation Status

Proof-of-concept exploit code exists

  • CISA’s SSVC triage found public proof-of-concept exploit code for this CVE, though no confirmed active exploitation.
  • CISA assesses this as automatable — exploitation doesn’t require manual, per-target effort, which raises the odds of mass scanning and opportunistic attacks.

Exploitation and automatability from CISA’s SSVC triage for GHSA-9392-pj54-qqf8.

EPSS Exploitation Probability

via FIRST.org ↗
0.2%probability of exploitation in next 30 days
Lower Risk0.00%
Lower risk than most CVEs4th percentile — riskier than 4% of all scored CVEsHighest risk
0.00%0.22%0.44%0.65%0.0%0.2%Jun 26Sep 26Oct 26

Probability of exploitation in the next 30 days, from FIRST.org EPSS.

How urgent is this, really

GHSA-9392-pj54-qqf8 by exploitation likelihood (EPSS) against impact (CVSS). Outside the shaded patch-first corner.

Where this sits among everything scored

Of 390,400 CVEs with a current EPSS score, this one falls in the < 10% band (highlighted). Counts from FIRST.org, log-scaled.

Real-World Exposure

1 pkg affected
🐘WWBN/AVideo

Real-time download stats are indexed for npm and PyPI packages. This vulnerability affects Packagist packages — download data is not available via public APIs for these ecosystems.

Description

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;
}

// TODO: Implement payment logic using Authorize.Net API
// Example: Call Authorize.Net API here
// $result = $plugin->chargePayment($amount, $userData);

// Simulate payment success for now
$paymentSuccess = true;
$users_id = @User::getId();

if ($paymentSuccess && !empty($users_id)) {
    $walletPlugin = AVideoPlugin::loadPluginIfEnabled("YPTWallet");
    if ($walletPlugin) {
        $walletPlugin->addBalance($users_id, $amount, 'Authorize.Net one-time payment');
        echo json_encode(['success' => true, 'result' => 'Payment processed and wallet updated']);
        exit;
    }
}

Vulnerable flow:

  1. $_POST['amount'] is read from the client.
  2. The endpoint only checks that the amount is greater than zero.
  3. The real Authorize.Net charge is not performed.
  4. $paymentSuccess is hardcoded to true.
  5. 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:

  1. Log in as a low-privileged user.
  2. Open the wallet page and record the current balance.
  3. 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'
  1. The endpoint returns:
  {"success":true,"result":"Payment processed and wallet updated"}
  1. Refresh the wallet page.
  2. 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.

Affected Packages

1 total
EcosystemPackageVulnerable rangeFix
🐘PackagistWWBN/AVideoall versionsNo fix

Affected Products

1 product · 1 configurations
Application
avideowwbn
≤ 29.0
range

Detection & mitigation playbook

Open-source dependency
  1. Detect

    Scan your dependency tree (package-lock.json, pnpm-lock.yaml, requirements.txt, go.sum, etc.) for WWBN/AVideo, including transitive dependencies — a direct dependency you never call can still pull in a vulnerable version.

  2. Remediation status

    No patched version of WWBN/AVideo has shipped for GHSA-9392-pj54-qqf8 yet. Where your build allows, override or pin the dependency away from the vulnerable range, and apply any maintainer-recommended mitigation.

  3. Mitigate without a patch

    If you can't upgrade right away: gate or disable the affected feature, validate untrusted input at the boundary, and avoid passing attacker-controlled data into the vulnerable path. O3's runtime protection blocks exploitation in production as an interim safeguard until the upgrade lands.

Frequently Asked Questions

### 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 Affe
O3 Security · Impact-Aware SCA

Is GHSA-9392-pj54-qqf8 in your dependencies?

Find it across Packagist, including transitive dependencies.

WWBN AVideo: Authenticated wallet credit bypass in…