SIGN IN SIGN UP
appsmithorg / appsmith UNCLAIMED

Platform to build admin panels, internal tools, and dashboards. Integrates with 25+ databases and any API.

0 0 68 TypeScript

fix(security): mitigate CVE-2026-22732 — Spring Security HTTP headers not written (#41669)

## Description

**TL;DR:** Upgrades Spring Boot from 3.5.11 to 3.5.12 to mitigate
[CVE-2026-22732](https://spring.io/security/cve-2026-22732) (CVSS 9.1 —
Critical), a vulnerability where Spring Security HTTP response headers
may not be written under certain conditions.

### What is CVE-2026-22732?

Under some conditions, Spring Security fails to write HTTP response
headers (such as `Cache-Control`, `Pragma`, `X-Content-Type-Options`)
for servlet applications. This can expose applications to:

- **Data leakage** through browser and proxy caching mechanisms
- **Clickjacking** due to missing frame-options headers
- **XSS via MIME-sniffing** due to missing content-type-options headers

**Affected versions:** Spring Security 6.5.0 – 6.5.8  
**Fix version:** Spring Security **6.5.9**  
**Advisory:** https://spring.io/security/cve-2026-22732

### Why upgrade Spring Boot instead of just overriding
`spring-security.version`?

Two approaches were evaluated:

| Approach | Pros | Cons |
|---|---|---|
| Override `spring-security.version` to 6.5.9 | Narrowest change |
Creates version skew — Security 6.5.9 was tested with Framework 6.2.17,
not 6.2.16. Breaks the BOM compatibility contract. |
| **Upgrade Spring Boot 3.5.11 → 3.5.12** | All dependencies tested
together by the Spring Boot team. Gets both Security 6.5.9 + Framework
6.2.17. | More transitive dependency changes (all patch-level). |

**We chose Option B** because:

1. **Spring Boot 3.5.12** was released on March 19, 2026 — the same day
as the CVE disclosure — specifically to address this vulnerability
2. All dependency changes are **patch-level bumps** within the same
minor versions (Reactor 2024.0.15→16, Micrometer 1.15.9→10, etc.)
3. The libraries that changed beyond Spring itself (Kafka, Hibernate,
Jetty, Pulsar) are **not direct dependencies** of the Appsmith server
module — zero runtime impact
4. Keeps the BOM's **tested-together guarantee** intact rather than
introducing manual version overrides

### Lombok pin

Spring Boot 3.5.12 bumps Lombok from 1.18.42 to 1.18.44. Lombok 1.18.44
introduced a breaking change where `@FieldNameConstants` generates inner
`Fields` classes with **private constructors**, which broke the
project's pattern of subclassing `BaseDomain.Fields` across 13 domain
classes. The fix pins Lombok back to 1.18.42 via
`<lombok.version>1.18.42</lombok.version>` — the same pattern already
used in the project for Jackson and SnakeYAML overrides.

### Applicability note

While the CVE advisory specifically states "servlet applications" and
Appsmith uses **WebFlux (reactive)**, the vulnerable
`spring-security-web` jar is on the classpath. Upgrading is prudent for
compliance, defense-in-depth, and because the reactive header-writing
code shares internals with the servlet path.

### Changes

- `app/server/pom.xml`: Bump `spring-boot-starter-parent` from `3.5.11`
→ `3.5.12`
- `app/server/pom.xml`: Pin `<lombok.version>1.18.42</lombok.version>`
to avoid `@FieldNameConstants` breakage

### Verification

| Check | Result |
|---|---|
| Spring Security version | 6.5.9 (patched) |
| Spring Framework version | 6.2.17 (patched) |
| Lombok version | 1.18.42 (pinned) |
| Full project build (`./build.sh -DskipTests -T 8`, 31 modules) | BUILD
SUCCESS |
| Unit tests (reactive-caching, appsmith-interfaces, appsmith-git) | All
68 passed |
| appsmith-server unit tests (non-Spring-context) | All passed |

Fixes https://spring.io/security/cve-2026-22732
Fixes
https://linear.app/appsmith/issue/APP-15061/critical-cve-2026-22732-spring-security-http-headers-not-written

## Automation

/ok-to-test tags="@tag.All"

### :mag: Cypress test results
<!-- This is an auto-generated comment: Cypress test results  -->
> [!TIP]
> 🟢 🟢 🟢 All cypress tests have passed! 🎉 🎉 🎉
> Workflow run:
<https://github.com/appsmithorg/appsmith/actions/runs/23677516478>
> Commit: e2bec36597795a5b783a2bec0e685d56a22c68a3
> <a
href="https://internal.appsmith.com/app/cypress-dashboard/rundetails-65890b3c81d7400d08fa9ee5?branch=master&workflowId=23677516478&attempt=3"
target="_blank">Cypress dashboard</a>.
> Tags: `@tag.All`
> Spec:
> <hr>Sat, 28 Mar 2026 09:31:55 UTC
<!-- end of auto-generated comment: Cypress test results  -->


## Communication
Should the DevRel and Marketing teams inform users about this change?
- [ ] Yes
- [x] No

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **Chores**
  * Updated Spring Boot parent version to 3.5.12.
* Added and set Lombok version to 1.18.42 and configured the build to
use this Lombok version for compilation.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
S
subratadeypappu committed
344cc418755801054a4ed92b2ad7efaf9cf2e238
Parent: b47d782
Committed by GitHub <noreply@github.com> on 3/30/2026, 6:28:38 AM