Update release notes

Entire-Checkpoint: 14328c112325
This commit is contained in:
2026-06-04 20:19:09 +02:00
parent 3bef199cbe
commit 6cfa511348

View File

@@ -2,8 +2,8 @@
Supports job archive version 3 and database version 11. Supports job archive version 3 and database version 11.
This is a bugfix release of `cc-backend`, the API backend and frontend This is a security and bugfix release of `cc-backend`, the API backend and
implementation of ClusterCockpit. frontend implementation of ClusterCockpit.
For release specific notes visit the [ClusterCockpit Documentation](https://clusterockpit.org/docs/release/). For release specific notes visit the [ClusterCockpit Documentation](https://clusterockpit.org/docs/release/).
If you are upgrading from v1.5.1 no database migration is required. If you are upgrading from v1.5.1 no database migration is required.
If you are upgrading from v1.5.0 you need to do another DB migration. This If you are upgrading from v1.5.0 you need to do another DB migration. This
@@ -17,6 +17,48 @@ This is also the default.
## Changes in 1.5.4 ## Changes in 1.5.4
### Security fixes
- **JWT HMAC empty-key bypass (critical)**: `jwtSession.go` now refuses to
register when `CROSS_LOGIN_JWT_HS512_KEY` is unset. Previously, an empty HMAC
key allowed unauthenticated admin token forgery because `golang-jwt` verifies
any HS256/HS512 signature against an empty key.
- **SQL injection via metric names (critical)**: Metric names supplied through
GraphQL (`[String!]`) were interpolated raw into `json_extract` SQL expressions.
Names are now validated against `^[a-zA-Z0-9_]+$` in
`jobsMetricStatisticsHistogram` and `buildFloatJSONCondition`.
- **Path traversal via line-protocol tags (critical)**: `cluster` and `host`
tags from the metric line protocol flowed unvalidated into `path.Join` for
checkpoint/WAL file paths, enabling arbitrary file writes outside the
checkpoint root via NATS (unauthenticated) or `POST /api/write`. Path-traversal
sequences are now rejected in `DecodeLine` before the tags become path
components.
- **CORS `AllowCredentials` disabled**: CORS middleware no longer sets
`AllowCredentials: true`, which was incompatible with `AllowedOrigins: ["*"]`
and could enable cross-origin credential theft.
- **HSTS header added**: `Strict-Transport-Security` is now set for all
HTTPS connections.
- **Security response headers**: Added `X-Content-Type-Options: nosniff`,
`X-Frame-Options: DENY`, `Referrer-Policy: same-origin`, and a conservative
`Content-Security-Policy` (blocks `frame-ancestors`, `object-src`, `base-uri`)
to harden against clickjacking and base-tag injection.
- **Stored XSS in job message**: `job.metaData.message` is now rendered as
escaped text (CSS `white-space: pre-wrap`) instead of raw `{@html ...}` in
`Job.root` and `JobFootprint`.
- **SQL injection in tag queries**: The tag-scope `IN` list and manager project
subquery in `CountTags` are now parameterized instead of interpolating
`user.Username` / `user.Projects` values sourced from OIDC/LDAP.
- **GraphQL DoS hardening**: Query cost is bounded with `FixedComplexityLimit`
(5000). Non-positive `items-per-page` and `page` values are rejected with HTTP
400 to prevent integer underflow into unbounded `LIMIT`/`OFFSET` queries.
- **CSRF defense-in-depth**: State-changing requests with a cross-site
`Sec-Fetch-Site` header are now rejected (fails open for non-browser clients),
complementing the existing `SameSite=Lax` session cookie.
- **NATS API security warning**: A startup warning is now logged when NATS
subscriptions are enabled, reminding operators that the NATS API has no
application-layer authentication and that publish ACLs must be restricted at
the broker.
### Bug fixes ### Bug fixes
- **Roofline legend placement**: Roofline plot legends now use fixed - **Roofline legend placement**: Roofline plot legends now use fixed