Skip to content

Security dependencies: jwt, kin-openapi, Common v0.4.26 - #1

Merged
inkly merged 8 commits into
mainfrom
chore/security-deps
Sep 22, 2026
Merged

inkly merged 8 commits into
mainfrom
chore/security-deps

Conversation

@inkly

@inkly inkly commented Sep 22, 2026

Copy link
Copy Markdown
Collaborator
  • CI and releases build with the latest Go 1.26 patch; the module requires Go 1.26.8.
  • jwt, kin-openapi and Common v0.4.26.
  • The message bus client sends the internal secret.
  • A test proves a valid request still gets through auth and validation; the docs no longer say loopback is trusted.
  • The unused npm SDK scaffolding is gone.

setup-go used go-version-file: go.mod, which installs exactly the go directive (1.26.0), so released binaries missed the standard library security fixes shipped in later 1.26 patch releases. Ask for 1.26 with check-latest so CI always picks the newest patch.
Common v0.4.26 requires Go 1.26.8, so the go directive moves from 1.26.0 to 1.26.8. It also pulls golang-jwt/jwt/v4 up to v4.5.2, which fixes GO-2025-3553 (excessive memory allocation while parsing headers) and GO-2024-3250 (ParseWithClaims error handling).

This service did not use anything Common removed (jwt.JWT, file.AddFile), so no code changes.
v0.117.0 is affected by several openapi3filter advisories that the v2 request validator reaches from the HTTP server:
- GO-2025-3533 / GHSA-wq9g-9vfc-cfq9: unbounded decompression of request bodies (fixed in v0.131.0)
- GHSA-mmfr-pmjx-hw9w: nil-pointer panic on a malformed multipart body (fixed in v0.141.0)
- GO-2026-6112 / GHSA-jpcw-4wr7-c3vq: nil-pointer panic on a content parameter without a schema (fixed in v0.144.0)

GHSA-r277-6w6q-xmqw (ValidationHandler fails open with the no-op authentication function) is also cleared by the bump. This service does not use ValidationHandler: it passes NoopAuthenticationFunc to the validator on purpose, because the JWT middleware registered before it already does the authentication.

deepmap/oapi-codegen v1.12.4's echo middleware still compiles against v0.149.0, so it stays; codegen/ is not regenerated.
Checks that the JWT middleware answers before the OpenAPI validator, and that the validator still finds routes and checks parameters against the spec. Written for the kin-openapi bump; it passes on both v0.117.0 and v0.149.0.
The message bus is about to require the per-boot internal secret on loopback calls. Without it, the bus would refuse this service's event type registration at startup and the events it publishes when a user saves a config.

The generated message bus client now adds the secret through Common's InternalRequestEditor, which reads it from the runtime path on each request and only attaches it to loopback URLs. A test checks that the request reaching the bus carries a secret that IsInternalRequest accepts.
The README and the comment on the route test client still said the JWT middleware skips any request from 127.0.0.1 or ::1. Since v0.4.25 it skips only a loopback request that also carries the per-boot internal secret (external.IsInternalRequest). The README now says so, and that it covers /v2/users too.
TestV2AuthThenValidation only had requests that stop at the JWT middleware or at the OpenAPI validator, so it would still pass if the validator refused every request. It now has a real event store behind the rig and checks that a valid GET /v2/users/events reaches its handler (200), both with a user token and from loopback with the internal secret. It also pins the two halves of the internal check: the secret from a LAN address and loopback without the secret both get 401.
package.json and tsconfig.json built a TypeScript SDK from the OpenAPI spec for IceWhale's npm scope. The workflow that published it was removed with the release pipeline rework, and nothing in the build, the workflows or goreleaser reads either file. The .gitignore entries that only served them (node_modules/, .package-lock.json and a second dist/) go too; the first dist/ stays for goreleaser.
@inkly
inkly merged commit d62c845 into main Sep 22, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant