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

GHSA-r5xw-gcgw-hwp5

MEDIUMFix: YesWiki/yeswiki@1aa2710

GHSA-r5xw-gcgw-hwp5 is a medium-severity (CVSS 6.1) CWE-80 vulnerability in yeswiki/yeswiki. O3 Security confirms whether GHSA-r5xw-gcgw-hwp5 is actually reachable in your code before you act, and blocks exploitation at runtime until you patch.

YesWiki Vulnerable to Reflected XSS via Unescaped `id` Parameter in Bazar Widget HTML Attributes

Also known asCVE-2026-52774
Published
Jul 9, 2026
Updated
Jul 9, 2026
Affected
1 pkg
Patched
1 / 1
Exploits
None indexed
Exploitation data as of Sep 7, 2026 · OSV.dev, NVD, FIRST.org (EPSS)

EPSS Exploitation Probability

via FIRST.org ↗
0.5%probability of exploitation in next 30 days
Lower Risk0.00%
Lower risk than most CVEs41th percentile — riskier than 41% of all scored CVEsHighest risk

EPSS (Exploit Prediction Scoring System) is a daily probability model maintained by FIRST.org. It estimates the likelihood a CVE will be exploited in production environments within the next 30 days, derived from real-world threat intelligence signals.

How urgent is this, really

GHSA-r5xw-gcgw-hwp5 plotted by exploitation likelihood (EPSS) against impact (CVSS). The shaded corner — EPSS 50%+ and CVSS 7.0+ — is where this CVE doesn't sit, though severity or exploitability alone can still warrant action.

Where this sits among everything scored

Of 369,023 CVEs with a current EPSS score, this one falls in the < 10% band (highlighted). Real counts from FIRST.org, not a sample — log-scaled since the landscape is heavily right-skewed.

Real-World Exposure

1 pkg affected
🐘yeswiki/yeswiki

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

YesWiki's Bazar widget handler reflects the id GET parameter into HTML attributes using strip_tags() only. Because strip_tags() does not escape double quotes, an attacker can break out of the attribute value, inject an event handler such as onmouseover, and execute arbitrary JavaScript in the victim's browser.

This issue is reachable without authentication. During validation, the vulnerable widget route returned the injected HTML for both /HomePage/widget?id=... and /NoSuchPage/widget?id=..., which shows that no login, no page ownership, no edit rights, and not even a valid page tag were required. The only routing prerequisite observed was that the Bazar extension is enabled and the request includes an id parameter.

Details

The primary sink is in tools/bazar/presentation/templates/widget.tpl.html around lines 4-7, where $_GET['id'] is inserted into the data-formid attribute:

data-formid="<?php echo strip_tags($_GET['id']); ?>"

strip_tags() is not an output-encoding function. It removes HTML tags, but it does not escape characters such as double quotes, so an attacker can terminate the data-formid attribute and inject new attacker-controlled attributes.

The route is served by tools/bazar/handlers/__WidgetHandler.php around lines 14-26, which only checks whether $_GET['id'] is present:

if (!isset($_GET['id'])) {
    return null;
}

No HasAccess('read'), HasAccess('write'), or authentication check is performed before the vulnerable template is rendered.

There is also a second reflection path in the same handler. The handler builds:

$urlParams = 'id=' . strip_tags($_GET['id']) . ...

and then places the resulting value into the widget template's data-iframeUrl attribute:

data-iframeUrl="<?php echo $GLOBALS['wiki']->href('bazariframe', '', $urlparams, false); ?>"

During validation, a single payload injected into id was reflected into both data-formid and data-iframeUrl, which confirms that the handler exposes multiple attribute-level sinks from the same unsafely handled input.

This issue maps to CWE-79: Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting').

PoC

  1. Set up a vulnerable YesWiki instance with the bundled Bazar extension enabled. This was validated locally on the official doryphore 4.6.5 release.
  2. Confirm the minimum access requirements:
    • No account is required.
    • No read or write permission on a specific page is required.
    • No valid existing page tag is required.
    • No valid Bazar form identifier is required.
    • The only observed requirements were that the Bazar widget handler is present and the request includes an id parameter.
  3. Request the widget handler with an attribute-breaking payload in id, for example:
http://127.0.0.1:8085/NoSuchPage/widget?id=%22%20onmouseover=%22alert(1)%22%20x=%22
  1. Open the URL in a browser as an unauthenticated visitor.
  2. Observe that the server returns HTTP 200 and renders the Bazar widget page even though the page tag is arbitrary.
  3. Inspect the returned HTML. The response contains attacker-controlled attributes in the widget root element:
<div id="widgetapp" v-cloak
  data-formid="" onmouseover="alert(1)" x=""
  ...
  data-iframeUrl="http://127.0.0.1:8085/NoSuchPage/bazariframe&id=" onmouseover="alert(1)" x=""
>
  1. Move the mouse over the widgetapp element or otherwise trigger the injected event handler.
  2. The browser executes the injected JavaScript in the YesWiki origin.
<img width="1600" height="838" alt="image" src="https://github.com/user-attachments/assets/de592586-a6ee-48f4-bbde-137ab07aaa71" />

Impact

This is a reflected XSS vulnerability in the Bazar widget handler with very low attacker prerequisites.

The practical access model is:

  • The attacker only needs to send a crafted public URL.
  • The victim does not need to authenticate.
  • The attacker does not need edit rights, ownership, or a valid page tag.
  • The route only needs to be reachable on a YesWiki instance with Bazar enabled.

An attacker may be able to:

  • Execute arbitrary JavaScript in the victim's browser.
  • Steal browser-accessible sensitive data.
  • Perform actions in the victim's session if the victim is logged in.
  • Target public visitors and authenticated users alike because the route is reachable without access-control checks.

Affected Packages

1 total 1 fixed
EcosystemPackageVulnerable rangeFix
🐘Packagistyeswiki/yeswikiall versions4.6.6

Detection & mitigation playbook

Open-source dependency
  1. Detect

    Scan your dependency tree (package-lock.json, pnpm-lock.yaml, requirements.txt, go.sum, etc.) for yeswiki/yeswiki. O3's reachability analysis confirms whether the vulnerable code path is actually invoked in your application, so you act on real exposure instead of every transitive match.

  2. Fix

    Update yeswiki/yeswiki to 4.6.6 or later, then make sure no transitive (indirect) dependency still pins the vulnerable range — O3 confirms GHSA-r5xw-gcgw-hwp5 is resolved across your whole dependency graph.

  3. Workarounds

    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.

  4. How O3 protects you

    O3 pinpoints whether GHSA-r5xw-gcgw-hwp5 is reachable in your code and exactly where to fix it, then blocks exploitation in production at runtime until the patched version is deployed.

Tailored to GHSA-r5xw-gcgw-hwp5. Runtime protection reduces exposure until a permanent patch is applied and verified — it complements patching, it doesn't replace it.

Frequently Asked Questions

### Summary YesWiki's Bazar widget handler reflects the `id` `GET` parameter into HTML attributes using `strip_tags()` only. Because `strip_tags()` does not escape double quotes, an attacker can break out of the attribute value, inject an event handler such as `onmouseover`, and execute arbitrary JavaScript in the victim's browser. This issue is reachable without authentication. During validation, the vulnerable `widget` route returned the injected HTML for both `/HomePage/widget?id=...` and `/NoSuchPage/widget?id=...`, which shows that no login, no page ownership, no edit rights, and not eve
O3 Security · Impact-Aware SCA

Is GHSA-r5xw-gcgw-hwp5 in your dependencies?

O3 detects GHSA-r5xw-gcgw-hwp5 across Packagist dependencies and uses function-level reachability to confirm whether the vulnerable code path is actually reachable — not just present. No false positives.

GHSA-r5xw-gcgw-hwp5: yeswiki/yeswiki… | O3 Security