CVE-2026-43876
WWBN AVideo: HTML Injection in notifySubscribers.json.php Enables Platform-Branded Phishing Emails to Channel Subscribers
WWBN AVideo is an open source video platform. In versions up to and including 29.0, objects/notifySubscribers.json.php takes the raw message POST parameter and passes it into sendSiteEmail(), which substitutes it directly into an HTML email template (via str_replace on the {message} placeholder) and renders it with PHPMailer::msgHTML(). There is no HTML sanitization, character escaping, or output encoding on the attacker-controlled message between $_POST['message'] and the rendered email. Any authenticated user with upload permission can therefore broadcast arbitrary HTML — phishing links, tracking pixels, CSS/UI spoofing — to every subscriber on their channel (up to 10,000 recipients per invocation). The email is sent From: the platform's configured contact address and wrapped in the site's official logo and title, so attacker-supplied HTML arrives with the appearance of an official platform communication. Commit https://github.com/WWBN/AVideo/commit/ contains an updated fix.
Attack profile
How easy it is to exploit
- Attack vector
- Network
- Complexity
- Low
- Privileges needed
- Low
- User interaction
- None
What an attacker can affect
- Confidentiality
- Low
- Integrity
- Low
- Availability
- None
Exploit likelihood
What each source reports
CVE List Score used
6.4
WWBN AVideo: HTML Injection in notifySubscribers.json.php Enables Platform-Branded Phishing Emails to Channel Subscribers
WWBN AVideo is an open source video platform. In versions up to and including 29.0, objects/notifySubscribers.json.php takes the raw message POST parameter and passes it into sendSiteEmail(), which substitutes it directly into an HTML email template (via str_replace on the {message} placeholder) and renders it with PHPMailer::msgHTML(). There is no HTML sanitization, character escaping, or output encoding on the attacker-controlled message between $_POST['message'] and the rendered email. Any authenticated user with upload permission can therefore broadcast arbitrary HTML — phishing links, tracking pixels, CSS/UI spoofing — to every subscriber on their channel (up to 10,000 recipients per invocation). The email is sent From: the platform's configured contact address and wrapped in the site's official logo and title, so attacker-supplied HTML arrives with the appearance of an official platform communication. Commit https://github.com/WWBN/AVideo/commit/ contains an updated fix.
- Record
CVE-2026-43876- CVSS 3.1
- 6.4 Medium
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:L/I:L/A:N - Weakness
- CWE-79
- Updated
- 2026-11-02
EUVDEUVD-2026-29312
6.4
WWBN AVideo is an open source video platform. In versions up to and including 29.0, objects/notifySubscribers.json.php takes the raw message POST parameter and passes it into sendSiteEmail(), which substitutes it directly into an HTML email template (via str_replace on the {message} placeholder) and renders it with PHPMailer::msgHTML(). There is no HTML sanitization, character escaping, or output encoding on the attacker-controlled message between $_POST['message'] and the rendered email. Any authenticated user with upload permission can therefore broadcast arbitrary HTML — phishing links, tracking pixels, CSS/UI spoofing — to every subscriber on their channel (up to 10,000 recipients per invocation). The email is sent From: the platform's configured contact address and wrapped in the site's official logo and title, so attacker-supplied HTML arrives with the appearance of an official platform communication. Commit https://github.com/WWBN/AVideo/commit/ contains an updated fix.
- Record
EUVD-2026-29312- CVSS 3.1
- 6.4 Medium
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:L/I:L/A:N - Updated
- 2026-11-02
GitHub AdvisoriesGHSA-g9cm-rxp7-6gv5
6.4
AVideo: HTML Injection in notifySubscribers.json.php Allows Platform-Branded Phishing Emails to Channel Subscribers
Summary
objects/notifySubscribers.json.php takes the raw message POST parameter and passes it into sendSiteEmail(), which substitutes it directly into an HTML email template (via str_replace on the {message} placeholder) and renders it with PHPMailer::msgHTML(). There is no HTML sanitization, character escaping, or output encoding on the attacker-controlled message between $_POST['message'] and the rendered email. Any authenticated user with upload permission can therefore broadcast arbitrary HTML — phishing links, tracking pixels, CSS/UI spoofing — to every subscriber on their channel (up to 10,000 recipients per invocation). The email is sent From: the platform's configured contact address and wrapped in the site's official logo and title, so attacker-supplied HTML arrives with the appearance of an official platform communication.
Details
File: objects/notifySubscribers.json.php
10: if (!User::canUpload()) {
11: forbiddenPage('You can not notify');
12: }
13: forbidIfIsUntrustedRequest('notifySubscribers');
14: $user_id = User::getId();
15: // if admin bring all subscribers
16: if (User::isAdmin()) {
17: $user_id = '';
18: }
19:
20: require_once 'subscribe.php';
21: setRowCount(10000);
...
23: $Subscribes = Subscribe::getAllSubscribes($user_id);
...
34: $subject = 'Message From Site ' . $config->getWebSiteTitle();
35: $message = $_POST['message'];
36:
37: $resp = sendSiteEmail($to, $subject, $message);
Controls present at the entry point:
User::canUpload()— gates access to any account that can upload (a baseline authenticated uploader role; in typical AVideo configurations whereauthCanUploadVideosis enabled, this is any logged-in user with a verified email).forbidIfIsUntrustedRequest('notifySubscribers')— inobjects/functionsSecurity.php:138-165, this delegates toisUntrustedRequest()which only validates same-origin viarequestComesFromSameDomainAsMyAVideo()(objects/functionsAVideo.php:199-206), i.e. a Referer/Origin header check. It is not a CSRF token. An attacker acting on their own authenticated browser session trivially satisfies the Referer check.
There is no CAPTCHA, no rate limit, no per-recipient quota, and no unsubscribe link. setRowCount(10000) allows up to 10,000 subscriber rows to be pulled and mailed in a single request. For admin callers (User::isAdmin() → $user_id = ''), Subscribe::getAllSubscribes('') returns the entire subscriber set for the platform rather than the caller's channel.
File: objects/functionsMail.php
59: function sendSiteEmail($to, $subject, $message, $fromEmail = '', $fromName = '')
60: {
...
78: $subject = UTF8encode($subject);
79: $message = UTF8encode($message); // UTF-8 normalization, no HTML handling
80: $message = createEmailMessageFromTemplate($message);
...
119: $mail = new \PHPMailer\PHPMailer\PHPMailer();
120: setSiteSendMessage($mail);
...
125: $systemEmail = $config->getContactEmail();
126: $systemName = $config->getWebSiteTitle();
...
136: $mail->setFrom($systemEmail, !empty($fromName) ? $fromName : $systemName);
...
143: $mail->msgHTML($message); // renders as HTML
...
162: $resp = $mail->send();
266: function createEmailMessageFromTemplate($message)
267: {
268: if (preg_match("/html>/i", $message)) {
269: return $message; // attacker-supplied full-HTML is returned verbatim
270: }
...
274: $text = file_get_contents("{$global['systemRootPath']}view/include/emailTemplate.html");
...
279: $words = [$logo, $message, $siteTitle];
280: $replace = ['{logo}', '{message}', '{siteTitle}'];
281:
282: return str_replace($replace, $words, $text); // raw substitution into HTML template
283: }
Execution flow from attacker input to sink:
$_POST['message']→…
- Record
GHSA-g9cm-rxp7-6gv5- CVSS 3.1
- 6.4 Medium
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:L/I:L/A:N - Weakness
- CWE-79
- Updated
- 2026-11-02
NVD
6.4
WWBN AVideo is an open source video platform. In versions up to and including 29.0, objects/notifySubscribers.json.php takes the raw message POST parameter and passes it into sendSiteEmail(), which substitutes it directly into an HTML email template (via str_replace on the {message} placeholder) and renders it with PHPMailer::msgHTML(). There is no HTML sanitization, character escaping, or output encoding on the attacker-controlled message between $_POST['message'] and the rendered email. Any authenticated user with upload permission can therefore broadcast arbitrary HTML — phishing links, tracking pixels, CSS/UI spoofing — to every subscriber on their channel (up to 10,000 recipients per invocation). The email is sent From: the platform's configured contact address and wrapped in the site's official logo and title, so attacker-supplied HTML arrives with the appearance of an official platform communication. Commit https://github.com/WWBN/AVideo/commit/ contains an updated fix.
- Record
CVE-2026-43876- CVSS 3.1
- 6.4 Medium
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:L/I:L/A:N - Weakness
- CWE-79
- Updated
- 2026-11-02
OSV
6.4
WWBN AVideo: HTML Injection in notifySubscribers.json.php Enables Platform-Branded Phishing Emails to Channel Subscribers
WWBN AVideo is an open source video platform. In versions up to and including 29.0, objects/notifySubscribers.json.php takes the raw message POST parameter and passes it into sendSiteEmail(), which substitutes it directly into an HTML email template (via str_replace on the {message} placeholder) and renders it with PHPMailer::msgHTML(). There is no HTML sanitization, character escaping, or output encoding on the attacker-controlled message between $_POST['message'] and the rendered email. Any authenticated user with upload permission can therefore broadcast arbitrary HTML — phishing links, tracking pixels, CSS/UI spoofing — to every subscriber on their channel (up to 10,000 recipients per invocation). The email is sent From: the platform's configured contact address and wrapped in the site's official logo and title, so attacker-supplied HTML arrives with the appearance of an official platform communication. Commit https://github.com/WWBN/AVideo/commit/ contains an updated fix.
- Record
CVE-2026-43876- CVSS 3.1
- 6.4 Medium
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:L/I:L/A:N - Weakness
- CWE-79
- Updated
- 2026-11-02
OSVGHSA-g9cm-rxp7-6gv5
6.4
AVideo: HTML Injection in notifySubscribers.json.php Allows Platform-Branded Phishing Emails to Channel Subscribers
Summary
objects/notifySubscribers.json.php takes the raw message POST parameter and passes it into sendSiteEmail(), which substitutes it directly into an HTML email template (via str_replace on the {message} placeholder) and renders it with PHPMailer::msgHTML(). There is no HTML sanitization, character escaping, or output encoding on the attacker-controlled message between $_POST['message'] and the rendered email. Any authenticated user with upload permission can therefore broadcast arbitrary HTML — phishing links, tracking pixels, CSS/UI spoofing — to every subscriber on their channel (up to 10,000 recipients per invocation). The email is sent From: the platform's configured contact address and wrapped in the site's official logo and title, so attacker-supplied HTML arrives with the appearance of an official platform communication.
Details
File: objects/notifySubscribers.json.php
10: if (!User::canUpload()) {
11: forbiddenPage('You can not notify');
12: }
13: forbidIfIsUntrustedRequest('notifySubscribers');
14: $user_id = User::getId();
15: // if admin bring all subscribers
16: if (User::isAdmin()) {
17: $user_id = '';
18: }
19:
20: require_once 'subscribe.php';
21: setRowCount(10000);
...
23: $Subscribes = Subscribe::getAllSubscribes($user_id);
...
34: $subject = 'Message From Site ' . $config->getWebSiteTitle();
35: $message = $_POST['message'];
36:
37: $resp = sendSiteEmail($to, $subject, $message);
Controls present at the entry point:
User::canUpload()— gates access to any account that can upload (a baseline authenticated uploader role; in typical AVideo configurations whereauthCanUploadVideosis enabled, this is any logged-in user with a verified email).forbidIfIsUntrustedRequest('notifySubscribers')— inobjects/functionsSecurity.php:138-165, this delegates toisUntrustedRequest()which only validates same-origin viarequestComesFromSameDomainAsMyAVideo()(objects/functionsAVideo.php:199-206), i.e. a Referer/Origin header check. It is not a CSRF token. An attacker acting on their own authenticated browser session trivially satisfies the Referer check.
There is no CAPTCHA, no rate limit, no per-recipient quota, and no unsubscribe link. setRowCount(10000) allows up to 10,000 subscriber rows to be pulled and mailed in a single request. For admin callers (User::isAdmin() → $user_id = ''), Subscribe::getAllSubscribes('') returns the entire subscriber set for the platform rather than the caller's channel.
File: objects/functionsMail.php
59: function sendSiteEmail($to, $subject, $message, $fromEmail = '', $fromName = '')
60: {
...
78: $subject = UTF8encode($subject);
79: $message = UTF8encode($message); // UTF-8 normalization, no HTML handling
80: $message = createEmailMessageFromTemplate($message);
...
119: $mail = new \PHPMailer\PHPMailer\PHPMailer();
120: setSiteSendMessage($mail);
...
125: $systemEmail = $config->getContactEmail();
126: $systemName = $config->getWebSiteTitle();
...
136: $mail->setFrom($systemEmail, !empty($fromName) ? $fromName : $systemName);
...
143: $mail->msgHTML($message); // renders as HTML
...
162: $resp = $mail->send();
266: function createEmailMessageFromTemplate($message)
267: {
268: if (preg_match("/html>/i", $message)) {
269: return $message; // attacker-supplied full-HTML is returned verbatim
270: }
...
274: $text = file_get_contents("{$global['systemRootPath']}view/include/emailTemplate.html");
...
279: $words = [$logo, $message, $siteTitle];
280: $replace = ['{logo}', '{message}', '{siteTitle}'];
281:
282: return str_replace($replace, $words, $text); // raw substitution into HTML template
283: }
Execution flow from attacker input to sink:
$_POST['message']→…
- Record
GHSA-g9cm-rxp7-6gv5- CVSS 3.1
- 6.4 Medium
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:L/I:L/A:N - Weakness
- CWE-79
- Updated
- 2026-11-02
Affected products
Affected packages
| Package | Affected | Fixed |
|---|---|---|
wwbn/avideoPackagist |
through 29.0 | None known |
wwbn/avideoPackagist |
through 29.0, plus listed versions 10.410.81111.111.1.1 Show 12 moreShow less11.511.612.414.314.3.114.418.021.022.024.025.026.0 |
None known |
History
| Recorded | Changed | Sources |
|---|---|---|
| first indexed | CVE List, EUVD, GitHub Advisories, NVD, OSV |
Dates are when Every CVE recorded each change. Upstream dates may differ.
In short
CVE-2026-43876 is a medium vulnerability (CVSS 6.4) in Wwbn Avideo, published May 5, 2026. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 0.19%, the 8th percentile. No source names a fixed version.
References
github.com/WWBN/AVideo/security/advisories/GHSA-g9cm-rxp7-6gv5
github.com/WWBN/AVideo/commit/078c4342eb9969a70425a9cdca3eefa7f8a86d53
nvd.nist.gov/vuln/detail/CVE-2026-43876
github.com/advisories/GHSA-g9cm-rxp7-6gv5
github.com/CVEProject/cvelistV5/tree/main/cves/2026/43xxx/CVE-2026-43876.json
github.com/WWBN/AVideo
Left out here: the rest of 2 source descriptions. The JSON record has them.