Register for the AI for Security Summit: Join Figma, Perplexity & Wiz

CVE-2026-55847
Java vulnerability analysis and mitigation

Overview

CVE-2026-55847 is a stored Cross-Site Scripting (XSS) vulnerability in the allure-generator component of the Allure Report framework (Maven package io.qameta.allure:allure-generator). The flaw allows an attacker who can influence test result content — such as JUnit XML failure messages — to inject arbitrary JavaScript that executes in the browser of anyone viewing the generated Allure report. All versions up to and including 2.38.1 are affected; version 2.39.0 contains the fix. It was published on June 16, 2026, and has a CVSS v3.1 base score of 6.1 (Medium) (GitHub Advisory, Allure2 Advisory).

Technical details

The root cause is CWE-79 (Improper Neutralization of Input During Web Page Generation). The ansi.js Handlebars helper in allure-generator passes user-controlled statusMessage and statusTrace values through the ansi-to-html library (v0.7.2), which defaults escapeForHtml to false, meaning raw HTML entities pass through unchanged. The output is then wrapped in Handlebars SafeString, which explicitly suppresses Handlebars' auto-escaping, delivering unescaped HTML directly to the browser. This is an incomplete fix: a prior commit (4c64b19, PR #3271) added escapeExpression() to linky.js and text-with-links.js but left the identical pattern in ansi.js unaddressed. The vulnerable sink is allure-generator/src/main/javascript/helpers/ansi.js:10-11, and the tainted data originates from XML attributes read without sanitization in JunitXmlPlugin.java:307-308; the same pattern exists in TRX, xUnit XML, xctest, and Allure1/2 plugins (GitHub Advisory).

Impact

Successful exploitation results in arbitrary JavaScript execution in the browser of any user who views the generated Allure report. This can lead to cookie theft and session hijacking if the report is hosted on a domain with active sessions (e.g., Jenkins, GitLab, or GitHub Actions CI dashboards), as well as full data exfiltration of report content to an attacker-controlled server. Attack vectors include malicious dependencies throwing crafted exception messages, CI pipelines processing test results from untrusted pull requests, or contributors submitting test files with XSS payloads (Allure2 Advisory).

Exploitability

A public proof-of-concept is included in the official advisory, demonstrating exploitation via a crafted JUnit XML file with an HTML payload in the stack trace field (e.g., <img src=x onerror=alert('statusTrace_XSS')>). No privileges are required to craft the malicious test result file, though a victim must open the generated report (user interaction required). No in-the-wild exploitation, threat actor attribution, or CISA KEV listing has been reported at this time (GitHub Advisory).

Exploitation steps

  1. Craft malicious test result: Create a JUnit XML file with an XSS payload embedded in the message attribute or element value of a <failure> or <error> tag, e.g.:
<testcase name="evil">
  <failure message="&lt;img src=x onerror=alert('XSS')&gt;">Stack trace: &lt;img src=x onerror=alert('statusTrace_XSS')&gt;</failure>
</testcase>
  1. Introduce the file into the CI pipeline: Submit the malicious XML as a test result artifact — via a pull request, a compromised dependency that throws crafted exception messages, or direct file placement in the results directory.
  2. Trigger report generation: The CI system runs allure generate /path/to/results/ -o /output/allure-report, causing JunitXmlPlugin to read the unsanitized message attribute and element value into statusMessage and statusTrace.
  3. Payload reaches the browser: When the report is rendered, status-details.hbs calls {{ansi statusMessage}} and {{ansi statusTrace}}, which passes the values through ansi-to-html (with escapeForHtml: false) and wraps them in SafeString, bypassing Handlebars escaping.
  4. Victim views the report: Any user who opens the Allure report and navigates to the affected test case triggers the injected JavaScript, enabling cookie theft, session hijacking, or data exfiltration (Allure2 Advisory).

Indicators of compromise

  • File System: JUnit XML (or TRX, xUnit XML, xctest, Allure1/2 result) files containing HTML tags or JavaScript event handlers (e.g., onerror=, <script>, <img src=x) in message attributes or stack trace values.
  • Generated Report Files: Allure report HTML files (e.g., index.html, test case detail pages) containing unescaped <script> blocks or inline event handlers within status detail sections.
  • Network: Outbound HTTP requests from a report viewer's browser to unexpected external domains shortly after opening an Allure report, potentially carrying exfiltrated cookie or session data.
  • Logs: CI pipeline logs showing test result files sourced from untrusted branches or external contributors that contain unusual characters (<, >, &) in failure message fields.

Mitigation and workarounds

Upgrade io.qameta.allure:allure-generator to version 2.39.0, which fixes the vulnerability by configuring AnsiToHtml with escapeForHtml: true. No configuration-based workaround is available for unpatched versions; the only effective mitigation is upgrading. As an interim measure, restrict access to generated Allure reports to trusted users only, and avoid hosting reports from untrusted test result sources on domains with active authenticated sessions (GitHub Advisory, Allure2 Advisory).

Additional resources

Linux Distribution fix status

Fix availability across major Linux distributions and their releases.

Ubuntu

Unknown

bionic (esm-apps)

allure

Unknown

devel

allure

Unknown

focal (esm-apps)

allure

Unknown

jammy

allure

Unknown

jammy (esm-apps)

allure

Unknown

noble

allure

Unknown

noble (esm-apps)

allure

Unknown

resolute

allure

Unknown

SourceThis report was generated using AI

Related Java vulnerabilities:

CVE ID

Severity

Score

Technologies

Component name

CISA KEV exploit

Has fix

Published date

CVE-2025-53837CRITICAL9.9
  • Java logoJava
  • org.xwiki.rendering:xwiki-rendering-xml
NoYesSep 18, 2026
CVE-2026-77615HIGH8.7
  • JavaScript logoJavaScript
  • org.opencastproject:opencast-engage-paella-player-7
NoYesSep 17, 2026
CVE-2026-54148HIGH8.1
  • Java logoJava
  • org.http4k:http4k-security-digest
NoYesSep 18, 2026
CVE-2026-85058HIGH7.5
  • Java logoJava
  • io.moquette:moquette-broker
NoYesSep 18, 2026
CVE-2026-54147MEDIUM6.5
  • Java logoJava
  • org.http4k:http4k-security-digest
NoYesSep 18, 2026

Free Vulnerability Assessment

Benchmark your Cloud Security Posture

Evaluate your cloud security practices across 9 security domains to benchmark your risk level and identify gaps in your defenses.

Request assessment

Get a personalized demo

Ready to see Wiz in action?

"Best User Experience I have ever seen, provides full visibility to cloud workloads."
David EstlickCISO
"Wiz provides a single pane of glass to see what is going on in our cloud environments."
Adam FletcherChief Security Officer
"We know that if Wiz identifies something as critical, it actually is."
Greg PoniatowskiHead of Threat and Vulnerability Management