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

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

Build:
Build:
LAST BUILD BRANCH: cyaiox/feat-enhance-read-access
DEFAULT BRANCH: main
Ran 29 Aug 2026 11:25PM UTC
Jobs 1
Files 59
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

25 Aug 2026 08:29PM UTC coverage: 98.683%. Remained the same
33280924052

push

github

web-flow
fix(auth): upgrade @dcl/crypto-middleware to 6.3 to close the folded signer-key bypass (#119)

`rejectIfSigner('decentraland-kernel-scene')` is built on `canonicalField`, which
reads the own property `signer`. Metadata delivering `{"Signer":"decentraland-kernel-scene"}`
therefore presented no `signer` at all, and every predicate read the field as
absent -- so the gate answered "allowed" for a request that visibly names the
signer it exists to refuse.

It is reachable on the strict, current-format path. Re-spelling the key changes
the signed bytes, so the request has to be signed that way -- which a malicious
scene-driven client can simply do. The bytes it delivers are then the bytes it
signed, signature verification has no objection to make, and the request is
served.

`canonicalMetadataKeys` already refused a re-spelled key via
`assertLegacyMetadataKeys`, but only on the legacy path, which `verify()` reaches
only after the current-format check fails. Signed in the current format the
fallback is never consulted, so that guard never ran.

6.3.0 adds a `hasFoldedVariant` check to `canonicalField` and
`requireCanonicalField`: a key that case-folds to the declared field without
being spelled exactly that is a rejection rather than an absence. Nothing is
folded -- the request is refused, not rewritten.

The lockfile change is the load-bearing part. The `^6.2.0` range already admitted
6.3.0, but the lockfile pinned 6.2.0, so the fix did not arrive without a refresh.
The declared range is bumped alongside it so the intent is explicit.

`scene-signer-gate.spec.ts` drives `verify()` with the `signedFetchPolicy` that
`routes.ts` wires. Against 6.2.0 its re-spelled-key cases resolve with a valid
authentication and hand the service `{"Signer":"decentraland-kernel-scene"}`;
against 6.3.0 they are refused.

One row of the existing table in `legacy-signed-payload.spec.ts` moves from
`Invalid chain metadata` to `Invalid metadata content`: the same 400 for a
re-spelle... (continued)

424 of 438 branches covered (96.8%)

Branch coverage included in aggregate %.

1149 of 1156 relevant lines covered (99.39%)

71.24 hits per line

Jobs
ID Job ID Ran Files Coverage
1 33280924052.1 29 Aug 2026 11:25PM UTC 118
98.89
GitHub Action Run
Source Files on build 33280924052
  • Tree
  • List 59
  • 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 #33280924052
  • 9edf61e4 on github
  • Prev Build on main (#32751312762)
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