{"items":[{"id":"NVI-00006287","kind":"vulnerability","title":"Webauthn: SimpleFakeCredentialGenerator with an empty secret produces predictable fake credentials, weakening username enumeration protection","revision":1,"unknowns":["Customer inventory, deployment, reachability and exploitation have not been inspected."],"lifecycle":"active","identifiers":["GHSA-gq4g-fpc9-vjfq"],"plain_summary":"OSV carries this publisher advisory for web-auth/webauthn-lib. This is an aggregated source copy; consult the original publisher and compare update dates.","review_status":"source_listed","control_topics":[],"public_actions":[{"summary":"The original advisory lists fixed boundaries 5.3.5 for web-auth/webauthn-lib. Confirm the publisher’s latest guidance.","source_ids":["sr-ae957e9f47efb7f7727645b8f07031af"],"action_type":"vendor_patch","limitations":"Confirm current vendor support, compatibility and deployment evidence. This report has not tested a fix in your system.","current_supported_target":null}],"schema_version":"1.1.0","source_metrics":[],"why_it_matters":"Published affected context helps an owner decide what evidence to gather. This report has not examined your application.","related_sources":[{"id":"sr-ae957e9f47efb7f7727645b8f07031af","url":"https://github.com/advisories/GHSA-gq4g-fpc9-vjfq","basis":"vendor_advisory","notes":"GitHub-origin advisory, CC-BY-4.0; OSV is an aggregate copy, not independent corroboration.","title":"GHSA-gq4g-fpc9-vjfq","publisher":"GitHub Advisory Database via OSV","observed_at":"2026-10-31T21:42:20.420Z"}],"affected_context":[{"certainty":"source_listed","source_ids":["sr-ae957e9f47efb7f7727645b8f07031af"],"technology":"web-auth/webauthn-lib","known_exclusions":[],"conditions_summary":"## Impact\n\n`Webauthn\\SimpleFakeCredentialGenerator` is the library-provided default implementation of the `FakeCredentialGenerator` interface. It returns a stable list of decoy `PublicKeyCredentialDescriptor` objects for a given username so that an assertion request for an unknown user looks the same as a request for a real one, which mitigates username enumeration.\n\nThe generator derives the whole decoy list from a single seed:\n\n```php\n$seed = hash('sha256', $username . $this->secret, true);\n```\n\nWhen it is constructed without a secret (its constructor default, `$secret = ''`), the seed depends only on the username. The username is attacker-chosen and the algorithm is public, so an unauthenticated requester can recompute the exact, byte-for-byte decoy list the server returns for any username. The attacker then compares a probed username's response against the locally computed list and decides whether the account is real or fake, which is precisely the distinction the mechanism is meant to hide.\n\nWith any non-empty secret the seed becomes a value the attacker cannot evaluate and the mitigation holds. The defect is the empty default, not the algorithm.\n\n## Affected configurations\n\n-","public_affected_ranges":["ECOSYSTEM: introduced 4.9.0; fixed 5.3.5"]}],"null_published_at":"2026-10-31T22:13:10.047Z","source_updated_at":"2026-09-10T03:50:52.216Z","source_disclosed_at":"2026-07-07T23:39:43.000Z","is_synthetic_fixture":false,"null_last_reviewed_at":null,"public_change_summary":"First indexed by Null; source disclosure date is shown separately.","null_first_observed_at":"2026-10-31T21:42:20.420Z"}],"next_cursor":null,"snapshot_revision":"42594"}