The 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.
The template here adds a figure with a class that is substituted in. This value is provided to sprintf here, an unescaped version of the class supplied by the user.
$template = <<<HTML
<figure class="%s" data-service="%s" %s %s>
<div class="embedvideo-wrapper" %s>%s%s%s</div>%s
</figure>
HTML;
Note the double quote immediately following the single quote to escape the class attribute in the template:
<youtube class='" onmouseover="alert(document.domain)' id="dQw4w9WgXcQ">dQw4w9WgXcQ</youtube>
Arbitrary HTML can be inserted into the DOM by any user on any page, allowing for JavaScript to be executed.
{
"nvd_published_at": null,
"github_reviewed_at": "2026-06-19T21:15:03Z",
"github_reviewed": true,
"severity": "HIGH",
"cwe_ids": [
"CWE-79",
"CWE-80"
]
}