Jul 8, 2026·5 min read·26 visits
The default WebAuthn fake credential generator uses an empty secret, making decoy credentials predictable and enabling unauthenticated username enumeration.
An information disclosure vulnerability exists in the web-auth/webauthn-lib PHP library when using the default SimpleFakeCredentialGenerator without a configured secret. This allows unauthenticated remote attackers to determine if a username exists on the target application.
The web-auth/webauthn-lib library implements WebAuthn (FIDO2) authentication for PHP applications. A critical defense mechanism in multi-user authentication interfaces is the mitigation of username enumeration. When an unauthenticated request is received, the server must behave consistently whether the user exists or not.
To accomplish this, secure WebAuthn implementations return fake credential descriptors when a user is not found. The SimpleFakeCredentialGenerator class serves as the default library-provided mechanism to generate these decoy descriptors. This ensures the client receives a populated list of allowed credentials in both scenarios.
However, the default implementation generates predictable responses if it is not configured with a secure cryptographic key. An attacker can analyze the returned credentials to determine account existence on the target system. This leads to information disclosure through discrepancies in response values.
The root cause of the vulnerability lies in the implementation of the seed generation algorithm inside Webauthn\SimpleFakeCredentialGenerator. The generator creates a deterministic seed by hashing the username combined with a configured secret key.
When the generator is instantiated, the $secret constructor argument defaults to an empty string. If the application developer does not explicitly provide a high-entropy secret, the seed calculation simplifies to hashing only the attacker-controlled username.
Because the hashing process is entirely deterministic and uses public parameters, an attacker can reproduce the entire generation process locally. By feeding arbitrary usernames into a local simulation of the algorithm, the attacker can precompute the exact fake credential IDs and transport options that the server would return for any non-existent user.
Let us examine the vulnerable constructor signature in the SimpleFakeCredentialGenerator class. The parameter $secret is defined as an optional string parameter with an empty default value.
// Vulnerable implementation in web-auth/webauthn-lib
public function __construct(
private string $secret = '', // Insecure default value
// ... other parameters
) {
}The generation of the decoy descriptors relies on the $secret property. The library uses the hash function with the SHA-256 algorithm to derive the cryptographic seed for the credentials.
// Seed derivation logic
$seed = hash('sha256', $username . $this->secret, true);In version 5.3.5, the vendor mitigated the issue by adding validation and triggering deprecation warnings when an empty secret is detected. Future major versions will enforce a non-empty string requirement.
// Mitigation introduced in version 5.3.5
if ($this->secret === '') {
trigger_deprecation(
'web-auth/webauthn-lib',
'5.3.5',
'Using an empty secret in SimpleFakeCredentialGenerator is deprecated and will be removed in 6.0.0.'
);
}To exploit the vulnerability, an attacker first selects a target email address or username. Using a local copy of the PHP derivation algorithm, the attacker generates the expected decoy credentials for that identity using an empty secret.
The attacker then initiates an authentication session on the target server using the target username. The server processes the request and returns a list of allowed credential descriptors to the client.
The attacker compares the returned list against the precomputed local decoys. If the lists match exactly, the username does not exist on the server. If they differ, the server has returned the real public key credential descriptors belonging to an active account.
Here is a visual overview of this validation discrepancy:
The security impact of this vulnerability is classified as Low with a CVSS score of 2.3. The vulnerability does not allow remote code execution, privilege escalation, or unauthorized access to user accounts.
The primary impact is the complete bypass of the username enumeration defenses implemented by the WebAuthn library. Attackers can reliably build lists of registered users on the target platform by automating queries against the endpoint.
This structured exposure of user presence supports subsequent target reconnaissance campaigns. Attackers can leverage the collected active usernames for highly targeted spear-phishing, credential stuffing, or social engineering attacks.
Organizations using web-auth/webauthn-lib must upgrade to version 5.3.5 or later. This ensures that the application receives proper runtime warnings and prepares the codebase for strict validation in major version 6.0.0.
When utilizing the library programmatically, developers must explicitly pass a cryptographically secure, high-entropy string as the secret parameter. Do not rely on default parameters during instantiation.
If using the Symfony integration, the bundle handles configuration automatically by injecting the application's global secret. Ensure the kernel.secret parameter in your Symfony framework configuration is set to a secure, non-default value.
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:L/VI:N/VA:N/SC:N/SI:N/SA:N/E:P| Product | Affected Versions | Fixed Version |
|---|---|---|
web-auth/webauthn-lib web-auth | >= 4.9.0, < 5.3.5 | 5.3.5 |
| Attribute | Detail |
|---|---|
| CWE ID | CWE-203 |
| Attack Vector | Network |
| CVSS v4.0 | 2.3 (Low) |
| Exploit Status | Proof-of-Concept |
| Impact | Username Enumeration |
| KEV Status | Not Listed |
The product behaves differently when executing operations with different inputs in a way that exposes sensitive state or information.
A critical security control bypass vulnerability exists in @simple-git/argv-parser before version 2.0.1. The package fails to map the VISUAL environment variable to the allowUnsafeEditor rule, allowing attackers who control environment parameters to execute arbitrary commands when Git triggers an interactive editor fallback.
A vulnerability in vLLM prior to 0.30.0 allows an authenticated multi-tenant attacker to infer execution history and prompt structures of other tenants. The multi-turn Responses API ('Harmony' path) fails to propagate the 'cache_salt' parameter during tool-call continuation steps, storing sensitive prompt prefixes in the global, unsalted cache space.
A state desynchronization (cache drift) vulnerability exists in the multimodal Inter-Process Communication (IPC) Least Recently Used (LRU) caches of vLLM. When a multimodal request fails validation after its media hash has been registered on the frontend but before the payload is committed to the backend engine core, the frontend and backend caches drift out of lockstep. A subsequent request reusing the same media triggers an assertion failure in the backend engine core, resulting in a complete denial of service.
CVE-2026-105750 is a medium-severity local file disclosure vulnerability affecting the Docling and Docling-Slim libraries. When processing HTML documents using the optional Playwright rendering backend, the application fail to validate and restrict request URIs using the file:// scheme. This permits an attacker supplying a crafted HTML file to access, render, and exfiltrate local system files.
CVE-2026-102598 is a security bypass and Denial of Service (DoS) vulnerability in the Werkzeug WSGI web application library. In versions prior to 3.1.9, the library's safe_join function fails to sanitize Windows reserved device names containing an empty NTFS Alternate Data Stream (ADS) marker (such as NUL:). This allows remote, unauthenticated attackers to trigger indefinite thread-blocking operations on Windows hosts, resulting in application-wide resource exhaustion.
A vulnerability in @graphql-tools/executor-legacy-ws prior to version 1.1.35 hardcodes the TLS rejectUnauthorized setting to false for outgoing secure WebSocket (wss://) connections. This defect allows unauthenticated remote attackers to perform Adversary-in-the-Middle (MitM) attacks, capturing or tampering with sensitive connection payloads and subscription data.