Skip to content

security(maven): 🛡️ minor 🛡️ vulnerability [medium]#65

Open
renovate[bot] wants to merge 1 commit into
mainfrom
renovate/vulnerability-medium
Open

security(maven): 🛡️ minor 🛡️ vulnerability [medium]#65
renovate[bot] wants to merge 1 commit into
mainfrom
renovate/vulnerability-medium

Conversation

@renovate

@renovate renovate Bot commented Mar 2, 2026

Copy link
Copy Markdown
Contributor

This PR contains the following updates:

Package Change Age Adoption Passing Confidence
net.sourceforge.pmd:pmd-core (source) 7.10.07.22.0 age adoption passing confidence
org.springframework:spring-web 6.0.236.1.0 age adoption passing confidence

PMD Designer has Stored XSS in VBHTMLRenderer and YAHTMLRenderer via unescaped violation messages

CVE-2026-28338 / GHSA-8rr6-2qw5-pc7r

More information

Details

Summary

PMD's vbhtml and yahtml report formats insert rule violation messages into HTML output without escaping. When PMD analyzes untrusted source code containing crafted string literals, the generated HTML report contains executable JavaScript that runs when opened in a browser.

While the default html format is not affected via rule violation messages (it correctly uses StringEscapeUtils.escapeHtml4()), it has a similar problem when rendering suppressed violations. The user supplied message (the reason for the suppression) was not escaped.

Details

VBHTMLRenderer.java line 71 appends rv.getDescription() directly into HTML:

sb.append("<td><font class=body>").append(rv.getDescription()).append("</font></td>");

YAHTMLRenderer.java lines 196–203 does the same via renderViolationRow():

private String renderViolationRow(String name, String value) {
    return "<tr><td><b>" + name + "</b></td>" + "<td>" + value + "</td></tr>";
}

Called at line 172:

out.print(renderViolationRow("Description:", violation.getDescription()));

The violation message originates from AvoidDuplicateLiteralsRule.java line 91, which embeds raw string literal values via first.toPrintableString(). This calls StringUtil.escapeJava() (line 476–480), which is a Java source escaper — it passes <, >, and & through unchanged because they are printable ASCII (0x20–0x7e).

By contrast, HTMLRenderer.java line 143 properly escapes:

String d = StringEscapeUtils.escapeHtml4(rv.getDescription());
PoC
  1. Create a Java file with 4+ duplicate string literals containing an HTML payload:
public class Exploit {
    String a = "<img src=x onerror=alert(document.domain)>";
    String b = "<img src=x onerror=alert(document.domain)>";
    String c = "<img src=x onerror=alert(document.domain)>";
    String d = "<img src=x onerror=alert(document.domain)>";
}
  1. Run PMD with the vbhtml format:
pmd check -R category/java/errorprone.xml -f vbhtml -d Exploit.java -r report.html
  1. Open report.html in a browser. A JavaScript alert executes showing document.domain.

The generated HTML contains the unescaped tag:

<td><font class=body>The String literal "<img src=x onerror=alert(document.domain)>" appears 4 times in this file</font></td>

Tested and confirmed on PMD 7.22.0-SNAPSHOT (commit bcc646c53d).

Impact

Stored cross-site scripting (XSS). Affects CI/CD pipelines that run PMD with --format vbhtml or --format yahtml on untrusted source code (e.g., pull requests from external contributors) and expose the HTML report as a build artifact. JavaScript executes in the browser context of anyone who opens the report.

Practical impact is limited because vbhtml and yahtml are legacy formats rarely used in practice. The default html format has a similar issue with user messages from suppressed violations.

Fixes
  • See #​6475: [core] Fix stored XSS in VBHTMLRenderer and YAHTMLRenderer

Severity

  • CVSS Score: 6.8 / 10 (Medium)
  • Vector String: CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:U/C:H/I:H/A:N

References

This data is provided by the GitHub Advisory Database (CC-BY 4.0).


PMD Designer has Stored XSS in VBHTMLRenderer and YAHTMLRenderer via unescaped violation messages

CVE-2026-28338 / GHSA-8rr6-2qw5-pc7r

More information

Details

Summary

PMD's vbhtml and yahtml report formats insert rule violation messages into HTML output without escaping. When PMD analyzes untrusted source code containing crafted string literals, the generated HTML report contains executable JavaScript that runs when opened in a browser.

While the default html format is not affected via rule violation messages (it correctly uses StringEscapeUtils.escapeHtml4()), it has a similar problem when rendering suppressed violations. The user supplied message (the reason for the suppression) was not escaped.

Details

VBHTMLRenderer.java line 71 appends rv.getDescription() directly into HTML:

sb.append("<td><font class=body>").append(rv.getDescription()).append("</font></td>");

YAHTMLRenderer.java lines 196–203 does the same via renderViolationRow():

private String renderViolationRow(String name, String value) {
    return "<tr><td><b>" + name + "</b></td>" + "<td>" + value + "</td></tr>";
}

Called at line 172:

out.print(renderViolationRow("Description:", violation.getDescription()));

The violation message originates from AvoidDuplicateLiteralsRule.java line 91, which embeds raw string literal values via first.toPrintableString(). This calls StringUtil.escapeJava() (line 476–480), which is a Java source escaper — it passes <, >, and & through unchanged because they are printable ASCII (0x20–0x7e).

By contrast, HTMLRenderer.java line 143 properly escapes:

String d = StringEscapeUtils.escapeHtml4(rv.getDescription());
PoC
  1. Create a Java file with 4+ duplicate string literals containing an HTML payload:
public class Exploit {
    String a = "<img src=x onerror=alert(document.domain)>";
    String b = "<img src=x onerror=alert(document.domain)>";
    String c = "<img src=x onerror=alert(document.domain)>";
    String d = "<img src=x onerror=alert(document.domain)>";
}
  1. Run PMD with the vbhtml format:
pmd check -R category/java/errorprone.xml -f vbhtml -d Exploit.java -r report.html
  1. Open report.html in a browser. A JavaScript alert executes showing document.domain.

The generated HTML contains the unescaped tag:

<td><font class=body>The String literal "<img src=x onerror=alert(document.domain)>" appears 4 times in this file</font></td>

Tested and confirmed on PMD 7.22.0-SNAPSHOT (commit bcc646c53d).

Impact

Stored cross-site scripting (XSS). Affects CI/CD pipelines that run PMD with --format vbhtml or --format yahtml on untrusted source code (e.g., pull requests from external contributors) and expose the HTML report as a build artifact. JavaScript executes in the browser context of anyone who opens the report.

Practical impact is limited because vbhtml and yahtml are legacy formats rarely used in practice. The default html format has a similar issue with user messages from suppressed violations.

Fixes
  • See #​6475: [core] Fix stored XSS in VBHTMLRenderer and YAHTMLRenderer

Severity

  • CVSS Score: 6.8 / 10 (Medium)
  • Vector String: CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:U/C:H/I:H/A:N

References

This data is provided by OSV and the GitHub Advisory Database (CC-BY 4.0).


Spring Framework vulnerable to a reflected file download (RFD)

CVE-2025-41234 / GHSA-6r3c-xf4w-jxjm

More information

Details

Description

In Spring Framework, versions 6.0.x as of 6.0.5, versions 6.1.x and 6.2.x, an application is vulnerable to a reflected file download (RFD) attack when it sets a “Content-Disposition” header with a non-ASCII charset, where the filename attribute is derived from user-supplied input.

Specifically, an application is vulnerable when all the following are true:

  • The header is prepared with org.springframework.http.ContentDisposition.
  • The filename is set via ContentDisposition.Builder#filename(String, Charset).
  • The value for the filename is derived from user-supplied input.
  • The application does not sanitize the user-supplied input.
  • The downloaded content of the response is injected with malicious commands by the attacker (see RFD paper reference for details).

An application is not vulnerable if any of the following is true:

  • The application does not set a “Content-Disposition” response header.
  • The header is not prepared with org.springframework.http.ContentDisposition.
  • The filename is set via one of:
    • ContentDisposition.Builder#filename(String), or
    • ContentDisposition.Builder#filename(String, ASCII)
  • The filename is not derived from user-supplied input.
  • The filename is derived from user-supplied input but sanitized by the application.
  • The attacker cannot inject malicious content in the downloaded content of the response.
Affected Spring Products and VersionsSpring Framework
  • 6.2.0 - 6.2.7
  • 6.1.0 - 6.1.20
  • 6.0.5 - 6.0.28
  • Older, unsupported versions are not affected
Mitigation

Users of affected versions should upgrade to the corresponding fixed version.

Affected version(s) Fix version Availability
6.2.x 6.2.8 OSS
6.1.x 6.1.21 OSS
6.0.x 6.0.29 Commercial

No further mitigation steps are necessary.

Severity

  • CVSS Score: 6.5 / 10 (Medium)
  • Vector String: CVSS:3.1/AV:N/AC:H/PR:L/UI:R/S:C/C:H/I:L/A:N

References

This data is provided by OSV and the GitHub Advisory Database (CC-BY 4.0).


Spring Framework DataBinder Case Sensitive Match Exception

CVE-2024-38820 / GHSA-4gc7-5j7h-4qph

More information

Details

The fix for CVE-2022-22968 made disallowedFields patterns in DataBinder case insensitive. However, String.toLowerCase() has some Locale dependent exceptions that could potentially result in fields not protected as expected.

Severity

  • CVSS Score: 5.3 / 10 (Medium)
  • Vector String: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:N

References

This data is provided by OSV and the GitHub Advisory Database (CC-BY 4.0).


Release Notes

spring-projects/spring-framework (org.springframework:spring-web)

v6.1.0

⭐ New Features

  • When using Oracle, JdbcClient.update(KeyHolder) does not work without explicit key column names #​31607
  • Introduce way to convert ClientHttpResponse to desired type #​31597
  • Property-driven onRefresh exit for AppCDS purpose #​31595
  • No Micrometer traceId in JMS listener container errorHandler #​31559
  • Register Hibernate @EmbeddableInstantiators registered on JPA embeddables for reflection #​31534
  • Improve method validation support for errors on elements within a container #​31530
  • Support pattern matching for method names in ControlFlowPointcut #​31435
  • Review reachability metadata contributions after GraalVM changes #​31213
  • handleEmptyBody of RequestBodyAdvice should apply also when content-type is not set #​30522

🐞 Bug Fixes

  • Regression with @EnableJpaAuditing using Spring Boot 3.2-RC2 in native image #​31575
  • Retrieving the response body as a List of POJOs fails with RestClient but passes with WebTestClient #​31574
  • ExecutorLifecycleDelegate should call ExecutorService.isTerminated() in ?.isRunning() #​31549
  • RestTemplate POST to endpoint using Digest Auth no longer works in 6.1 #​31516
  • Code generation for constructor arguments must cast null indexed argument value #​31508
  • \n in form model when using Jetty 12 client and multipart/form-data #​31361
  • Add status handler to recognize unknown status codes outside of 4xx/5? #​31202

📔 Documentation

  • Document how to log @Sql scripts and statements #​31589
  • Link to KDoc API documentation from Javadoc overview #​31587
  • Fix link in Javadoc of ConfigurableMockMvcBuilder #​31542
  • Add note about @[Enabled|Disabled]InNativeImage in reference manual #​31438
  • Document @DisabledInAotMode in the reference manual #​31437
  • Document @Sql class-level execution phase support in the reference manual #​31377
  • Document that Micrometer's "error" tag should be preferred vs. legacy "exception" tag #​31514

🔨 Dependency Upgrades

❤️ Contributors

Thank you to all the contributors who worked on this release:

@​Young-Zen, @​duesenklipper, @​izeye, @​k-seth, and @​wakingrufus


Configuration

📅 Schedule: (in timezone America/Chicago)

  • Branch creation
    • At any time (no schedule defined)
  • Automerge
    • At any time (no schedule defined)

🚦 Automerge: Enabled.

Rebasing: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.

👻 Immortal: This PR will be recreated if closed unmerged. Get config help if that's undesired.


This PR was generated by Mend Renovate. View the repository job log.

@snyk-io

snyk-io Bot commented Mar 2, 2026

Copy link
Copy Markdown
Contributor

Snyk checks have failed. 3 issues have been found so far.

Status Scan Engine Critical High Medium Low Total (3)
Open Source Security 0 3 0 0 3 issues
Licenses 0 0 0 0 0 issues
Code Security 0 0 0 0 0 issues

💻 Catch issues earlier using the plugins for VS Code, JetBrains IDEs, Visual Studio, and Eclipse.

@renovate
renovate Bot force-pushed the renovate/vulnerability-medium branch from 2b6a6fd to 0b0e4bf Compare March 27, 2026 16:53
@renovate
renovate Bot force-pushed the renovate/vulnerability-medium branch 2 times, most recently from 03a86b1 to 5606b2e Compare April 19, 2026 08:50
@renovate
renovate Bot force-pushed the renovate/vulnerability-medium branch 4 times, most recently from d4d3445 to 453b3e3 Compare June 6, 2026 05:00
@renovate
renovate Bot force-pushed the renovate/vulnerability-medium branch 2 times, most recently from 5a40e36 to 44f8098 Compare July 20, 2026 09:55
@renovate
renovate Bot force-pushed the renovate/vulnerability-medium branch from 44f8098 to c373591 Compare July 22, 2026 02:59
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants