chore(deps): update devdependency @simplewebauthn/server to v13 [security] - #65
Open
renovate[bot] wants to merge 1 commit into
Open
renovate[bot] wants to merge 1 commit into
renovate[bot] wants to merge 1 commit into
Conversation
renovate
Bot
force-pushed
the
renovate/npm-simplewebauthn-server-vulnerability
branch
2 times, most recently
from
September 13, 2026 07:33
7d40f8b to
1351feb
Compare
renovate
Bot
force-pushed
the
renovate/npm-simplewebauthn-server-vulnerability
branch
from
September 20, 2026 03:42
1351feb to
4b72c18
Compare
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR contains the following updates:
^10.0.1→^13.0.0SimpleWebAuthn: Registration verification does not sufficiently ensure that attestation certificates chain to a trust anchor
GHSA-6hxq-p678-4hr2
More information
Details
Summary
validateCertificatePath()does not verify that an attestation's certificate chain actually terminates at a configured trust anchor. When walking the chain it stops at the first self-signed certificate it finds (which could be user-supplied), and exits early.This happens before the configured Apple/Google/etc trust anchor (which is concatenated to the end of the chain) is reached.
A user can therefore register a credential and have the server accept it as if it were backed by a genuine Apple / Android SafetyNet / Yubikey / etc.
Details
packages/server/src/helpers/validateCertificatePath.ts:The configured trust anchor is appended to the end of the untrusted chain (line 83):
The walk then verifies each cert was signed by the next, but breaks on the first self-signed cert (lines 104–116):
The success condition is therefore "the certs form an internally-consistent chain ending in some self-signed cert" Rather than "the chain terminates at one of the configured trust anchors."
Exploit shape
return true. The configured anchor never gets checked.As far as observed, all attestation enforcement uses validateCertificatePath when using MDS etc.
Severity
CVSS:4.0/AV:N/AC:L/AT:P/PR:L/UI:A/VC:N/VI:L/VA:N/SC:N/SI:N/SA:NReferences
This data is provided by the GitHub Advisory Database (CC-BY 4.0).
Release Notes
MasterKale/SimpleWebAuthn (@simplewebauthn/server)
v13.3.2Compare Source
This update fixes a CVSS v4 Low (2.0) security vulnerability identified in
@simplewebauthn/server. See the security advisory linked below for more information.
Changes:
verifyRegistrationResponse()allowing a maliciously-craftedattestation statement's
x5cto contain a self-signed "root certificate" instead of chaining backto an RP-specified trust anchor
(GHSA-6hxq-p678-4hr2)
v13.3.1Compare Source
Changes:
verifyRegistrationResponse()failing to verify some Packed andSafetyNet statements (#767)
v13.3.0Compare Source
Changes:
startRegistration()andstartAuthentication()will recognize punycode domainswhen trying to identify why an error occurred
(#750)
verifyMDSBlob()helper method has been added to verify and extract metadatastatements from FIDO MDS blobs. See
the docs here
for more info (#752)
v13.2.3Compare Source
Changes
"Cannot get schema"error that may occurwhen verifying responses after upgrading to v13.2.0+
(#747)
v13.2.2Compare Source
Changes
increased software supply chain transparency, both
libraries are now published via GitHub Actions workflows. Package listings on
JSR and
NPM feature build transparency logs at the
bottom of their respective pages (#725,
#726,
#727)
v13.2.1Compare Source
Changes:
generateRegistrationOptions()will now correctly encoded theuserIDargument tobase64url when it is an instance of Node's
Buffer(#724)
v13.2.0Compare Source
Changes
verifyRegistrationResponse()has been defined more strictlyto communicate that
registrationInfowill only ever be present ifverifiedistrue(#715)
verifyRegistrationResponse()can now verify attestations containing SHA256 hashesby using EC public keys with the P-384 curve
(#721)
by setting
attestationSafetyNetEnforceCTSCheck: falsewhen callingverifyRegistrationResponse(). This check remains enforced by default(#722)
generic typing for
Uint8Arrayvia TypeScript 5.7.SimpleWebAuthn values of type
Uint8Array_are equivalent toUint8Arrayin Deno 2.1 andearlier, and
Uint8Array<ArrayBuffer>in Deno 2.2 and later.(#717)
v13.1.2Compare Source
Changes
ResidentKeyRequirementtype to help with type inference(#704)
v13.1.1Compare Source
Changes:
"android-key"attestation statement verification has been modernized(#675)
"tpm"attestation statements(#673)
v13.1.0Compare Source
Changes:
cross-fetchdependency has been removed from the project to silence in theconsole
DeprecationWarning's about a "punycode" module(#661)
startRegistration()andstartAuthentication()will now warn about calls madeusing the pre-v11 call structure to encourage refactoring to use the current call structure, but
still try to handle such calls the best they can
(#664)
v13.0.0Compare Source
Hot on the heels of the last major release, v13 introduces support for registration hints! Refined
types and improved attestation trust anchor verification are also included. Last but not least, we
say goodbye to one of the project's packages for better docs and fewer dependencies to install. Read
on for more information, including refactor advice for dealing with the retirement of
@simplewebauthn/types.
Changes:
preferredAuthenticatorTypeargument can be set when callinggenerateRegistrationOptions()to generate options that encourage the browser to direct the userto register one of three types of authenticators:
'securityKey','localDevice', or'remoteDevice'(a.k.a. opinionatedWebAuthn hints
support) (#653)
startRegistration()will recognizehintsif specified inoptionsJSON(#652)
(#650)
within the browser and server packages. See Breaking Changes below for more info
(#655)
Breaking Changes
@typescript/types is being retired
Its types will now be included directly in @simplewebauthn/browser and
@simplewebauthn/server.
To refactor existing imports from /types, simply import them from /browser or /server
instead:
Before:
After:
[server]
attestationTypeno longer accepts'indirect'The benefits of indirect attestation are too minimal to be useful for Relying Parties. In practice
it is almost never used over ignoring the concept completely with
'none'or needing to beintentional and setting
'direct'.RP's that have been specifying
attestationType: 'indirect'when callinggenerateRegistrationOptions()will need to refactor their code to either omitattestationType(generateRegistrationOptions()will default toattestationType: 'none') or setattestationType: 'direct'instead:Before:
After:
-or-
v12.0.0Compare Source
All SimpleWebAuthn packages are now available for installation from the
JavaScript Registry (JSR)! JSR is an "open-source package registry
for modern JavaScript and TypeScript" - you can read more about this new package registry and its
ESM-centric capabilities here.
All packages in v12.0.0 are functionally identical to v11.0.0! And JSR package hosting is in
addition to existing package hosting on NPM. Nothing changes about package installation via
npm install. Read on for more information.Packages
Changes
imports are supported (#634)
@simplewebauthn/browser (#634)
To install from JSR, use
npx jsr add @simplewebauthn/...ordeno add jsr:@simplewebauthn/...depending on which package manager is available.
Projects using
npmfor package management:Projects using
denofor package management:Projects using HTTPS modules via deno.land/x:
v12.0.0 officially deprecates importing SimpleWebAuthn from deno.land/x. See Breaking Changes
below for refactor guidance.
Breaking Changes
Importing SimpleWebAuthn packages from
"https://deno.land/x/simplewebauthn/..."URLs is no longersupported. Please use Deno's native support for JSR imports instead, available in projects running
Deno v1.42 and higher.
Before:
After:
Alternatively, use
deno addto install these packages fromJSR:
# Deno v1.42 and higher deno add jsr:@simplewebauthn/serverv11.0.0Compare Source
Say hello to support for automatic passkey registration, support for valid conditional UI
<input>elements stashed away in web components, and to the new
WebAuthnCredentialtype that modernizessome logic within.
There are some breaking changes in this release! Please see Breaking Changes below for refactor
guidance.
Packages
Changes
useAutoRegisterargument has been added tostartRegistration()tosupport attempts to automatically register passkeys for users who just completed non-passkey auth.
verifyRegistrationResponse()has gained a newrequireUserPresenceoption that can be set tofalsewhen verifying responses fromstartRegistration({ useAutoRegister: true, ... })(#623)
verifyBrowserAutofillInputargument has been added tostartAuthentication()to disable throwing an error when a correctly configured<input>elementcannot be found (but perhaps a valid one is present in a web component shadow's DOM)
(#621)
AuthenticatorDevicetype has been renamed toWebAuthnCredentialandhas had its properties renamed. The return value out of
verifyRegistrationResponse()andcorresponding inputs into
verifyAuthenticationResponse()have been updated accordingly. SeeBreaking Changes below for refactor guidance
(#625)
verifyRegistrationResponse()now verifies that the authenticator data AAGUIDmatches the leaf cert's
id-fido-gen-ce-aaguidextension AAGUID when it is present(#609)
IBM (#610)
uvmanddpkhave been removed(#611)
Breaking Changes
[browser] Positional arguments in
startRegistration()andstartAuthentication()have been replaced by a single objectProperty names in the object match the names of the previously-positional arguments. To update
existing implementations, wrap existing options in an object with corresponding properties:
Before:
After:
[server] [types] The
AuthenticatorDevicetype has been renamed toWebAuthnCredentialAuthenticatorDevice.credentialIDandAuthenticatorDevice.credentialPublicKeyhave been shortenedto
WebAuthnCredential.idandWebAuthnCredential.publicKeyrespectively.verifyRegistrationResponse()has been updated accordingly to return a newcredentialvalue oftype
WebAuthnCredential. Update code that storescredentialID,credentialPublicKey, andcounterout ofverifyRegistrationResponse()to storecredential.id,credential.publicKey,and
credential.counterinstead:Before:
After:
Update calls to
verifyAuthenticationResponse()to match the newcredentialargument thatreplaces the
authenticatorargument:Before:
After:
Configuration
📅 Schedule: (UTC)
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR was generated by Mend Renovate. View the repository job log.