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

decentraland / world-storage-service / 31187258617
99%
main: 99%

Build:
Build:
LAST BUILD BRANCH: chore/signed-fetch-policy-followups
DEFAULT BRANCH: main
Ran 07 Aug 2026 02:23PM UTC
Jobs 1
Files 58
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

07 Aug 2026 02:22PM UTC coverage: 98.68%. Remained the same
31187258617

Pull #114

github

cyaiox
fix: reject non-canonical metadata signer and intent

Bump @dcl/crypto-middleware from ^4.1.1 to ^5.1.0, which requires the
top-level `signer` and `intent` metadata fields to arrive already
trimmed and lowercased.

The signed-fetch payload is lowercased before signing, so the signature
does not bind the casing a consumer reads back:
{"signer":"Decentraland-Kernel-Scene"} and
{"signer":"decentraland-kernel-scene"} produce a byte-identical signing
payload and share one valid signature. The scene gate in
controllers/routes.ts asserts a negative
(`signer !== 'decentraland-kernel-scene'`), so it fails open: a
mixed-case spelling escaped the check and a scene-originated request was
read as a directly user-signed one, reaching sceneContextMiddleware and
the world/player/env storage handlers as the user.

Whitespace is signature-bound rather than a third-party bypass — the
payload is never trimmed — but a padded value still slipped past the
same strict equality, so it is now rejected to prevent that silent
misclassification.

Add test/integration/auth/canonical-signer.spec.ts covering both halves
of the rule. The casing case signs the canonical form and rewrites the
delivered `x-identity-metadata` header afterwards, which is the attack
itself: the signature stays genuinely valid. The padding cases are signed
as delivered, because whitespace changes the signed bytes. Ordinary user
traffic is asserted to still reach the handler.

Claude-Session: https://claude.ai/code/session_01XTskziwD4er8Fq5qN6ZtDp
Pull Request #114: fix: reject non-canonical metadata signer and intent

424 of 438 branches covered (96.8%)

Branch coverage included in aggregate %.

1146 of 1153 relevant lines covered (99.39%)

71.29 hits per line

Jobs
ID Job ID Ran Files Coverage
1 31187258617.1 07 Aug 2026 02:23PM UTC 116
98.88
GitHub Action Run
Source Files on build 31187258617
  • Tree
  • List 58
  • Changed 34
  • Source Changed 0
  • Coverage Changed 34
Coverage ∆ File Lines Relevant Covered Missed Hits/Line Branch Hits Branch Misses
  • Back to Repo
  • Github Actions Build #31187258617
  • Pull Request #114
  • PR Base - main (#29354048524)
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