GHSA-XR8C-XPP9-8M4H
Vulnerability from github – Published: 2026-07-29 12:31 – Updated: 2026-07-29 12:31The Booking System Trafft plugin for WordPress is vulnerable to Stored Cross-Site Scripting via the bookingWebsiteUrl setting in all versions up to, and including, 1.0.17 due to a missing capability check on the set_options AJAX action when the plugin is operating in agency mode. The trafftSetOptions() handler verifies a nonce that is exposed to any authenticated user (it is printed inline on every admin page, including profile.php) but performs no capability check before calling update_option('trafft_option', ['bookingWebsiteUrl' => ...]). This setting is then used by trafftAdminAssets() to enqueue <bookingWebsiteUrl>/embed.js as a script on every front-end page that renders the booking shortcode. This makes it possible for authenticated attackers, with Subscriber-level access and above, to point the embed-script URL at an attacker-controlled origin and execute arbitrary JavaScript in the browser of every site visitor (including admins).
{
"affected": [],
"aliases": [
"CVE-2026-8791"
],
"database_specific": {
"cwe_ids": [
"CWE-79"
],
"github_reviewed": false,
"github_reviewed_at": null,
"nvd_published_at": "2026-07-29T11:16:50Z",
"severity": "MODERATE"
},
"details": "The Booking System Trafft plugin for WordPress is vulnerable to Stored Cross-Site Scripting via the `bookingWebsiteUrl` setting in all versions up to, and including, 1.0.17 due to a missing capability check on the `set_options` AJAX action when the plugin is operating in agency mode. The `trafftSetOptions()` handler verifies a nonce that is exposed to any authenticated user (it is printed inline on every admin page, including profile.php) but performs no capability check before calling `update_option(\u0027trafft_option\u0027, [\u0027bookingWebsiteUrl\u0027 =\u003e ...])`. This setting is then used by `trafftAdminAssets()` to enqueue `\u003cbookingWebsiteUrl\u003e/embed.js` as a script on every front-end page that renders the booking shortcode. This makes it possible for authenticated attackers, with Subscriber-level access and above, to point the embed-script URL at an attacker-controlled origin and execute arbitrary JavaScript in the browser of every site visitor (including admins).",
"id": "GHSA-xr8c-xpp9-8m4h",
"modified": "2026-07-29T12:31:24Z",
"published": "2026-07-29T12:31:24Z",
"references": [
{
"type": "ADVISORY",
"url": "https://nvd.nist.gov/vuln/detail/CVE-2026-8791"
},
{
"type": "WEB",
"url": "https://plugins.trac.wordpress.org/browser/booking-system-trafft/tags/1.0.17/trafft.php#L139"
},
{
"type": "WEB",
"url": "https://plugins.trac.wordpress.org/browser/booking-system-trafft/tags/1.0.17/trafft.php#L155"
},
{
"type": "WEB",
"url": "https://plugins.trac.wordpress.org/browser/booking-system-trafft/tags/1.0.17/trafft.php#L176"
},
{
"type": "WEB",
"url": "https://plugins.trac.wordpress.org/browser/booking-system-trafft/tags/1.0.17/trafft.php#L325"
},
{
"type": "WEB",
"url": "https://plugins.trac.wordpress.org/browser/booking-system-trafft/tags/1.0.17/trafft.php#L354"
},
{
"type": "WEB",
"url": "https://plugins.trac.wordpress.org/browser/booking-system-trafft/trunk/trafft.php#L139"
},
{
"type": "WEB",
"url": "https://plugins.trac.wordpress.org/browser/booking-system-trafft/trunk/trafft.php#L155"
},
{
"type": "WEB",
"url": "https://plugins.trac.wordpress.org/browser/booking-system-trafft/trunk/trafft.php#L176"
},
{
"type": "WEB",
"url": "https://plugins.trac.wordpress.org/browser/booking-system-trafft/trunk/trafft.php#L325"
},
{
"type": "WEB",
"url": "https://plugins.trac.wordpress.org/browser/booking-system-trafft/trunk/trafft.php#L354"
},
{
"type": "WEB",
"url": "https://www.wordfence.com/threat-intel/vulnerabilities/id/e93060cf-2df3-4d45-a1f2-304f443d58bc?source=cve"
}
],
"schema_version": "1.4.0",
"severity": [
{
"score": "CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:L/I:L/A:N",
"type": "CVSS_V3"
}
]
}
Sightings
| Author | Source | Type | Date | Other |
|---|
Nomenclature
- Seen: The vulnerability was mentioned, discussed, or observed by the user.
- Confirmed: The vulnerability has been validated from an analyst's perspective.
- Published Proof of Concept: A public proof of concept is available for this vulnerability.
- Exploited: The vulnerability was observed as exploited by the user who reported the sighting.
- Patched: The vulnerability was observed as successfully patched by the user who reported the sighting.
- Not exploited: The vulnerability was not observed as exploited by the user who reported the sighting.
- Not confirmed: The user expressed doubt about the validity of the vulnerability.
- Not patched: The vulnerability was not observed as successfully patched by the user who reported the sighting.