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

decentraland / decentraland-gatsby / 31192002944
58%

Build:
DEFAULT BRANCH: master
Ran 07 Aug 2026 03:43PM UTC
Jobs 1
Files 88
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 03:19PM UTC coverage: 56.068%. Remained the same
31192002944

push

github

web-flow
fix: reject non-canonical metadata signer and intent (#1328)

Bump @dcl/crypto-middleware from ^4.0.0 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. `verifySigner` in
entities/Auth/utils.ts asserts a negative — it throws only on an exact
match of 'decentraland-kernel-scene' — so it fails open: a mixed-case
spelling escaped the check and `withAuth` resolved with the real account
address, handing every consuming dapp a scene request as a directly
user-signed one.

Whitespace is signature-bound rather than a third-party bypass, since
the payload is never trimmed, but a padded value still slipped past that
same comparison. It is now rejected to prevent the misclassification.

No source changes. Every export this package uses from the middleware —
`verify`, `DecentralandSignatureData`, `VerifyAuthChainHeadersOptions`,
`AUTH_CHAIN_HEADER_PREFIX`, `AUTH_METADATA_HEADER`,
`AUTH_TIMESTAMP_HEADER` — is unchanged in v5. The only v5 removals are
the Express, Koa and Passport adapters, none of which this package uses;
it calls `verify()` directly. The deprecated `verifyMetadataContent`
compatibility shim in entities/Auth/utils.ts is untouched.

Extend withDecentralandAuth.test.ts to cover both halves of the rule
across `withAuth` (rejects) and `withAuthOptional` (falls through to
null). The mixed-case case signs the canonical form and rewrites the
delivered header afterwards, which keeps the signature genuinely valid;
the padded cases are signed as delivered, because whitespace changes the
signed bytes.

Note the 468/260 package-lock churn is almost entirely unrelated: a plain
`npm install` on unmodified master produces 46... (continued)

508 of 1115 branches covered (45.56%)

Branch coverage included in aggregate %.

1266 of 2049 relevant lines covered (61.79%)

12.09 hits per line

Jobs
ID Job ID Ran Files Coverage
1 31192002944.1 07 Aug 2026 03:43PM UTC 176
58.4
GitHub Action Run
Source Files on build 31192002944
  • Tree
  • List 88
  • Changed 74
  • Source Changed 0
  • Coverage Changed 74
Coverage ∆ File Lines Relevant Covered Missed Hits/Line Branch Hits Branch Misses
  • Back to Repo
  • Github Actions Build #31192002944
  • 365e08df on github
  • Prev Build on master (#29945298968)
  • Next Build on master (#32408978708)
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