{"id":"CVE-2026-55691","aliases":["EUVD-2026-78832","GHSA-7h5p-637f-jfr7"],"status":"published","title":"EmbedVideo Extension : Stored XSS via unsanitized class passed to template","description":"The EmbedVideo Extension is a MediaWiki extension which adds a parser function called #ev and various parser tags for embedding video clips from various video sharing services. Prior to 4.1.0, EmbedHtmlFormatter::toHtml in includes/EmbedService/EmbedHtmlFormatter.php passes the user-supplied class value directly to sprintf while constructing a figure element. A quote in the class value can terminate the class attribute and inject arbitrary HTML attributes or markup into the rendered page. A user able to edit a wiki page can store JavaScript that executes for visitors who render the affected content. This issue is fixed in version 4.1.0.","severity":{"version":"3.1","score":8.6,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:L/A:L","level":"high","assessor":"cna","from":"cve"},"epss":{"day":"2026-11-11","score":0.00484,"percentile":0.4219,"model":"v2026.06.15"},"facts":{"in_kev":false,"known_exploited":false,"public_exploit":false,"fix_available":true},"cwes":["CWE-79","CWE-80"],"published":"2026-06-19T21:15:03Z","modified":"2026-10-28T02:30:50Z","fixes":[{"ecosystem":"Packagist","package":"starcitizenwiki/embedvideo","fixed_in":["4.1.0"],"sources":["ghsa","osv"]}],"affected":[{"source":"ghsa","ecosystem":"Packagist","package":"starcitizenwiki/embedvideo","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"last_affected":"4.0.0"},{"fixed":"4.1.0"}]}]},{"source":"osv","ecosystem":"Packagist","package":"starcitizenwiki/embedvideo","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"4.1.0"}]}],"versions":["3.0.0","3.0.1","3.0.2","3.0.3","3.0.4","3.0.5","3.0.6","3.0.7","3.0.8","3.0.9","3.1.0","3.2.0","3.2.1","3.2.2","3.2.3","3.2.4","3.2.5","3.2.6","3.2.7","3.2.8","3.3.0","3.4.0","3.4.1","3.4.2","3.4.3","4.0.0"]}],"products":[{"vendor":"starcitizenwiki","product":"mediawiki-extensions-embedvideo"}],"references":[{"url":"https://github.com/StarCitizenWiki/mediawiki-extensions-EmbedVideo/security/advisories/GHSA-7h5p-637f-jfr7","tags":["x_refsource_CONFIRM","exploit","advisory","web"]},{"url":"https://github.com/StarCitizenWiki/mediawiki-extensions-EmbedVideo/commit/370156335b325bb81d14d89edf0a1f2643d50a84","tags":["x_refsource_MISC","fix","web"]},{"url":"https://github.com/StarCitizenWiki/mediawiki-extensions-EmbedVideo/releases/tag/v4.1.0","tags":["x_refsource_MISC","web"]},{"url":"https://github.com/advisories/GHSA-7h5p-637f-jfr7"},{"url":"https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/55xxx/CVE-2026-55691.json","tags":["advisory"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-55691","tags":["advisory"]},{"url":"https://github.com/StarCitizenWiki/mediawiki-extensions-EmbedVideo","tags":["package"]}],"sources":{"cve":[{"id":"CVE-2026-55691","title":"EmbedVideo Extension : Stored XSS via unsanitized class passed to template","description":"The EmbedVideo Extension is a MediaWiki extension which adds a parser function called #ev and various parser tags for embedding video clips from various video sharing services. Prior to 4.1.0, EmbedHtmlFormatter::toHtml in includes/EmbedService/EmbedHtmlFormatter.php passes the user-supplied class value directly to sprintf while constructing a figure element. A quote in the class value can terminate the class attribute and inject arbitrary HTML attributes or markup into the rendered page. A user able to edit a wiki page can store JavaScript that executes for visitors who render the affected content. This issue is fixed in version 4.1.0.","status":"published","published":"2026-09-15T16:34:59.998Z","modified":"2026-09-16T15:44:27.031Z","cvss":[{"version":"3.1","score":8.6,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:L/A:L","level":"high","assessor":"cna"}],"cwes":["CWE-79"],"updated_at":"2026-11-02T14:20:11.925815Z"}],"euvd":[{"id":"EUVD-2026-78832","description":"The EmbedVideo Extension is a MediaWiki extension which adds a parser function called #ev and various parser tags for embedding video clips from various video sharing services. Prior to 4.1.0, EmbedHtmlFormatter::toHtml in includes/EmbedService/EmbedHtmlFormatter.php passes the user-supplied class value directly to sprintf while constructing a figure element. A quote in the class value can terminate the class attribute and inject arbitrary HTML attributes or markup into the rendered page. A user able to edit a wiki page can store JavaScript that executes for visitors who render the affected content. This issue is fixed in version 4.1.0.","status":"published","published":"2026-09-15T16:34:59Z","modified":"2026-09-16T15:44:27Z","cvss":[{"version":"3.1","score":8.6,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:L/A:L","level":"high"}],"updated_at":"2026-11-02T17:28:15.407859Z"}],"ghsa":[{"id":"GHSA-7h5p-637f-jfr7","title":"StarCitizenWiki Extension Embed Video: Stored XSS via unsanitized class passed to template","description":"### Summary\nThe user supplied class value is fed directly into the sprintf call that creates HTML. You can add a quote to escape the class and then inject arbitrary html/javascript to the final output.\n\n### Details\nThe template [here](https://github.com/StarCitizenWiki/mediawiki-extensions-EmbedVideo/blob/a573a16d925ee0ea0d34b360856dc8ab0b88f822/includes/EmbedService/EmbedHtmlFormatter.php#L138) adds a figure with a class that is substituted in. This value is provided to sprintf [here](https://github.com/StarCitizenWiki/mediawiki-extensions-EmbedVideo/blob/a573a16d925ee0ea0d34b360856dc8ab0b88f822/includes/EmbedService/EmbedHtmlFormatter.php#L156), an unescaped version of the class supplied by the user.\n\n```\n$template = \u003c\u003c\u003cHTML\n    \u003cfigure class=\"%s\" data-service=\"%s\" %s %s\u003e\n        \u003cdiv class=\"embedvideo-wrapper\" %s\u003e%s%s%s\u003c/div\u003e%s\n    \u003c/figure\u003e\nHTML;\n```\n\n### PoC\nNote the double quote immediately following the single quote to escape the class attribute in the template:\n```\n\u003cyoutube class='\" onmouseover=\"alert(document.domain)' id=\"dQw4w9WgXcQ\"\u003edQw4w9WgXcQ\u003c/youtube\u003e\n```\n\n### Impact\nArbitrary HTML can be inserted into the DOM by any user on any page, allowing for JavaScript to be executed.","status":"published","published":"2026-06-19T21:15:03Z","modified":"2026-10-13T20:50:34Z","cvss":[{"version":"3.1","score":8.6,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:L/A:L","level":"high"}],"cwes":["CWE-79","CWE-80"],"updated_at":"2026-11-02T14:41:31.175024Z"}],"nvd":[{"id":"CVE-2026-55691","description":"The EmbedVideo Extension is a MediaWiki extension which adds a parser function called #ev and various parser tags for embedding video clips from various video sharing services. Prior to 4.1.0, EmbedHtmlFormatter::toHtml in includes/EmbedService/EmbedHtmlFormatter.php passes the user-supplied class value directly to sprintf while constructing a figure element. A quote in the class value can terminate the class attribute and inject arbitrary HTML attributes or markup into the rendered page. A user able to edit a wiki page can store JavaScript that executes for visitors who render the affected content. This issue is fixed in version 4.1.0.","status":"published","published":"2026-09-15T17:17:22.187Z","modified":"2026-09-30T17:51:56.193Z","cvss":[{"version":"3.1","score":8.6,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:L/A:L","level":"high","assessor":"secondary"}],"cwes":["CWE-79"],"updated_at":"2026-11-02T14:12:47.668237Z"}],"osv":[{"id":"CVE-2026-55691","title":"EmbedVideo Extension : Stored XSS via unsanitized class passed to template","description":"The EmbedVideo Extension is a MediaWiki extension which adds a parser function called #ev and various parser tags for embedding video clips from various video sharing services. Prior to 4.1.0, EmbedHtmlFormatter::toHtml in includes/EmbedService/EmbedHtmlFormatter.php passes the user-supplied class value directly to sprintf while constructing a figure element. A quote in the class value can terminate the class attribute and inject arbitrary HTML attributes or markup into the rendered page. A user able to edit a wiki page can store JavaScript that executes for visitors who render the affected content. This issue is fixed in version 4.1.0.","status":"published","published":"2026-09-15T16:34:59.998Z","modified":"2026-10-28T02:30:50.149014924Z","cvss":[{"version":"3.1","score":8.6,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:L/A:L","level":"high"}],"cwes":["CWE-79"],"updated_at":"2026-11-02T15:45:11.22012Z"},{"id":"GHSA-7h5p-637f-jfr7","title":"StarCitizenWiki Extension Embed Video: Stored XSS via unsanitized class passed to template","description":"### Summary\nThe user supplied class value is fed directly into the sprintf call that creates HTML. You can add a quote to escape the class and then inject arbitrary html/javascript to the final output.\n\n### Details\nThe template [here](https://github.com/StarCitizenWiki/mediawiki-extensions-EmbedVideo/blob/a573a16d925ee0ea0d34b360856dc8ab0b88f822/includes/EmbedService/EmbedHtmlFormatter.php#L138) adds a figure with a class that is substituted in. This value is provided to sprintf [here](https://github.com/StarCitizenWiki/mediawiki-extensions-EmbedVideo/blob/a573a16d925ee0ea0d34b360856dc8ab0b88f822/includes/EmbedService/EmbedHtmlFormatter.php#L156), an unescaped version of the class supplied by the user.\n\n```\n$template = \u003c\u003c\u003cHTML\n    \u003cfigure class=\"%s\" data-service=\"%s\" %s %s\u003e\n        \u003cdiv class=\"embedvideo-wrapper\" %s\u003e%s%s%s\u003c/div\u003e%s\n    \u003c/figure\u003e\nHTML;\n```\n\n### PoC\nNote the double quote immediately following the single quote to escape the class attribute in the template:\n```\n\u003cyoutube class='\" onmouseover=\"alert(document.domain)' id=\"dQw4w9WgXcQ\"\u003edQw4w9WgXcQ\u003c/youtube\u003e\n```\n\n### Impact\nArbitrary HTML can be inserted into the DOM by any user on any page, allowing for JavaScript to be executed.","status":"published","published":"2026-06-19T21:15:03Z","modified":"2026-09-10T03:50:48.73062359Z","cvss":[{"version":"3.1","score":8.6,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:L/A:L","level":"high"}],"cwes":["CWE-79","CWE-80"],"updated_at":"2026-11-02T15:46:41.002603Z"}]}}
