GHSA-h4fw-6r7f-w494: Web auth/webauthn framework Webauthn Has A User Verification Vulnerability
LOWGHSA-h4fw-6r7f-w494 is a LOW (CVSS 2.1) webauthn has a user verification vulnerability (CWE-863: Incorrect Authorization) affecting Web auth/webauthn framework libraries in the Packagist ecosystem. The issue involves webauthn has a user verification downgrade via default-open clientoverridepolicy. Remediation is available by upgrading affected packages to version 5.3.1.
GHSA-h4fw-6r7f-w494 at a Glance
Security Impact
CVSS: 2.1
The security impact metrics below are parsed directly from the CVSS v3.1 vector string (CVSS:3.1/AV:P/AC:L/PR:N/UI:R/S:U/C:N/I:L/A:N).
How to Fix GHSA-h4fw-6r7f-w494
To remediate this vulnerability, upgrade all affected Web auth/webauthn framework dependencies to a patched release. Both direct and transitive dependencies should be checked, as frameworks or security libraries may pull in vulnerable versions transitively.
Upgrade web-auth/webauthn-framework to 5.3.1
Run the following command in your project directory to verify that all resolved dependencies use the patched release:
inspect dependencies for web-auth/webauthn-framework
How to Check if You Are Affected
To determine whether your application is affected by GHSA-h4fw-6r7f-w494, inspect your project dependencies for Web auth/webauthn framework:
inspect dependencies for web-auth/webauthn-framework
Analyze the terminal output to locate any version of Web auth/webauthn framework in your dependency tree. If any resolved version matches the vulnerable ranges listed in the table below (for example, versions earlier than 5.3.1), your application is affected.
Note: Verify declared build manifests and deployed runtime container environments.
Technical Details
Vulnerability Mechanism & Technical Analysis
This vulnerability is classified under CWE-863: Incorrect Authorization, where the product performs an authorization check when an actor attempts to access a resource or perform an action, but it does not correctly perform the check. In Web auth/webauthn framework, software state validation or input boundaries are circumvented during processing. Review the official source advisory statement below for specific affected components, classes, and reproduction details.
Source Advisory Statement
GHSA-h4fw-6r7f-w494 Affected Web auth/webauthn framework Versions
1 component(s)| Product / Package | Ecosystem | Affected Versions | Fixed Version |
|---|---|---|---|
|
web-auth/webauthn-framework
|
Packagist |
≥ 5.3.0
< 5.3.1
|
5.3.1
|
References
Frequently Asked Questions
What is GHSA-h4fw-6r7f-w494?
Which Web auth/webauthn framework versions are affected?
What version fixes GHSA-h4fw-6r7f-w494?
Is web-auth/webauthn-framework affected?
What is the CVSS score of GHSA-h4fw-6r7f-w494?
What CWE is associated with GHSA-h4fw-6r7f-w494?
How can I check Packagist dependencies for GHSA-h4fw-6r7f-w494?
Machine-readable OSV JSON
OSV v1.5 Schema
{
"schema_version" : "1.4.0",
"id" : "GHSA-h4fw-6r7f-w494",
"modified" : "2026-05-07T21:05:33Z",
"published" : "2026-05-07T21:05:33Z",
"aliases" : [ ],
"summary" : "Webauthn has a User Verification Downgrade via Default-Open ClientOverridePolicy",
"details" : "## Summary\n\nIn version 5.3.0 of the Symfony bundle, `Webauthn\\Bundle\\Policy\\ClientOverridePolicy` defaulted to allowing all client overrides, including `userVerification`. A client could send `{\"userVerification\": \"discouraged\"}` in the assertion or attestation options request to override a server-configured `userVerification: required`, causing the emitted WebAuthn options to instruct the authenticator to skip user verification. The `CheckUserVerification` ceremony step then read the same downgraded options and skipped its check.\n\n## Affected versions\n\n- **Vulnerable**: 5.3.0\n- **Patched**: 5.3.1\n\n5.3.0 was released on 2026-05-01 and 5.3.1 was published roughly 18 hours later, on 2026-05-02. Practical exposure window was minimal.\n\n## Note on earlier 5.x versions\n\nVersions 5.0.0 to 5.2.x did not ship `ClientOverridePolicy` (introduced in 5.3.0), so the exact code path described above does not apply. However, on those versions the `ProfileBasedRequestOptionsBuilder` and `ProfileBasedCreationOptionsBuilder` already passed the client-supplied `userVerification` value directly to the options factory, where the profile value is only applied via `??=`. The functional outcome (a client can downgrade `userVerification`) is the same. The recommended mitigation (see below) applies regardless of the version, and users on 5.0.x – 5.2.x are encouraged to upgrade to 5.3.1 or later.\n\n## Severity\n\nThis is a **defense-in-depth** issue rather than a primitive that grants authentication on its own:\n\n- The attacker must already possess the victim's authenticator (a stolen security key, an unlocked device). Without that, the downgrade is inconsequential.\n- The framework exposes the actual UV outcome on the returned authenticator data (`AuthenticatorData::isUserVerified()`). Applications that gate sensitive operations on this flag — as documented — remain protected even on the vulnerable version.\n\n## Mitigation\n\nApplications gating sensitive operations on user verification MUST re-check the `UV` flag on the returned authenticator data after a\nsuccessful ceremony, regardless of what was requested in the options:\n\n```php\nif (! $authenticatorData->isUserVerified()) {\n throw new AccessDeniedHttpException('User verification is required.');\n}\n```\n\nThis is the authoritative signal that user verification actually occurred. The hardened default in 5.3.1 closes the implicit profile-bypass; the application-level check remains the recommended defense in depth and is now documented explicitly in the\n[User Verification](https://webauthn-doc.spomky-labs.com/webauthn-in-a-nutshell/user-verification#checking-the-uv-flag) guide.\n\n## Fix\n\n`ClientOverridePolicy::canOverride()` now defaults to `false` instead of `true`. The Symfony bundle DI configuration ships `user_verification` overrides as **disabled by default**, with a default `allowed_values` list that excludes `discouraged` even when an operator opts in.\n\n## Credit\n\nReported by @offset.",
"severity" : [ {
"type" : "CVSS_V3",
"score" : "CVSS:3.1/AV:P/AC:L/PR:N/UI:R/S:U/C:N/I:L/A:N"
} ],
"affected" : [ {
"package" : {
"ecosystem" : "Packagist",
"name" : "web-auth/webauthn-framework"
},
"ranges" : [ {
"type" : "ECOSYSTEM",
"events" : [ {
"introduced" : "5.3.0"
}, {
"fixed" : "5.3.1"
} ]
} ]
} ],
"references" : [ {
"type" : "WEB",
"url" : "https://github.com/web-auth/webauthn-framework/security/advisories/GHSA-h4fw-6r7f-w494"
}, {
"type" : "PACKAGE",
"url" : "https://github.com/web-auth/webauthn-framework"
} ],
"database_specific" : {
"cwe_ids" : [ "CWE-863" ],
"severity" : "LOW",
"github_reviewed" : true,
"github_reviewed_at" : "2026-05-07T21:05:33Z",
"nvd_published_at" : null
}
}