• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

hyperscale-stack / security / 38352993998
98%

Build:
DEFAULT BRANCH: master
Ran 13 Oct 2026 05:51AM UTC
Jobs 1
Files 195
Run time 1min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

13 Oct 2026 05:44AM UTC coverage: 98.031% (+0.4%) from 97.601%
38352993998

push

github

web-flow
fix(jwt)!: close the security audit findings of the JWT module

Harden the jwt module against the findings of the security audit of
2026-10-12:

- claims, JOSE headers and JWK Sets are strict JSON: duplicate and
  case-variant member names, invalid UTF-8 and unpaired surrogates are
  refused; claims are decoded case-sensitively (RFC 7519 §4, §10.1.1);
- tokens over 16 KiB, non-canonical encodings and crit/b64 headers are
  refused before parsing; values and third-party messages copied into
  errors and spans are clipped to 128 bytes;
- every verification key is bound to one algorithm and validated (RSA ≥
  2048 bits, the algorithm's curve, public keys only, HMAC keys as []byte);
  signers validate their key; the RFC 9068 signer requires its claims;
- exp is enforced strictly, NumericDates are bounded to 1970–9999 and the
  clock skew to 5 minutes;
- NewRemoteJWKS fetches through outbound, with every redirect pinned to
  the JWK Set URL's origin; one fetch at a time, never under a lock;
  bounded refresh, back-off and 24 h staleness; one refresh on an unknown
  kid; keys validated one by one; an outage is ErrKeySetUnavailable, a
  security.ErrUnavailable (503), never an invalid token;
- BearerVerifier requires an RFC 9068 verifier (issuer, audience, at+jwt,
  exp) and a sub; the bearer examples sign RFC 9068 access tokens;
- PublicKey and the remote provider print, log and encode no secret
  material and no URL userinfo or query.

NewSigner, NewOAuth2AccessTokenSigner and NewRemoteJWKS now return an
error; MIGRATION.md lists every breaking change.

Audit: JWT-01, JWT-02, JWT-03, JWT-04, JWT-05, JWT-06, JWT-07, JWT-08, JWT-09, JWT-10, JWT-I1, JWT-I2, JWT-I3, JWT-I4, JWT-I5, JWT-I6, JWT-I7, CORE-15.

712 of 722 new or added lines in 17 files covered. (98.61%)

12747 of 13003 relevant lines covered (98.03%)

4068.4 hits per line

Uncovered Changes

Lines Coverage ∆ File
4
93.33
jwt/compact.go
3
96.55
jwt/jwks_parse.go
2
95.54
-1.69% oidc/provider/idtoken.go
1
99.08
8.91% jwt/jwks.go
Jobs
ID Job ID Ran Files Coverage
1 38352993998.1 13 Oct 2026 05:51AM UTC 195
98.03
GitHub Action Run
Source Files on build 38352993998
  • Tree
  • List 195
  • Changed 15
  • Source Changed 0
  • Coverage Changed 15
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • 3b1e78db on github
  • Prev Build on master (#38351244129)
  • Next Build on master (#38354809306)
  • Delete
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc