Jul 8, 2026·5 min read·18 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.
CVE-2026-61539 is a critical remote code execution vulnerability in Xinference, an inference API framework for open-source LLMs. In version 2.5.0 and earlier, model-generated outputs representing Llama3 tool calls are passed directly to Python's built-in eval() function inside the parser components. By manipulating conversational input or injecting instructions, an attacker can influence the LLM to output a Python expression containing malicious system commands, resulting in unauthenticated remote code execution on the host. This vulnerability has been resolved in Xinference version 2.7.0.
An uncontrolled resource consumption vulnerability (CWE-400/CWE-789) exists within the kin-openapi Go library prior to version 0.142.0. The vulnerability occurs during the processing of highly sparse array indexes inside query parameters defined in deepObject style. An unauthenticated remote attacker can exploit this flaw to cause an immediate Out-of-Memory (OOM) crash of the target application.
A critical prototype pollution and sandbox escape vulnerability was discovered in the JSONata query and transformation library before versions 1.8.8 and 2.2.0. By providing a malicious JSONata expression that bypasses ownership checks on object properties, remote attackers can execute arbitrary code in the context of the host Node.js application.
CVE-2026-63135 is a critical stored Cross-Site Scripting (XSS) vulnerability affecting YOURLS (Your Own URL Shortener) versions 1.5.1 up to (but not including) 1.10.4. Unauthenticated remote attackers can inject malicious JavaScript arrays by crafting an HTTP Referer header sent to a short URL redirect. This value is saved in the database logs and executed without context-aware escaping when an administrative user views the corresponding statistics visualization page.
CVE-2026-68508 is a high-severity arbitrary code execution vulnerability in facebookresearch/hydra (hydra-core) prior to version 1.3.4. The vulnerability exists within the dynamic instantiation system hydra.utils.instantiate(), which resolves and executes arbitrary Python callables from configuration files. An attacker capable of submitting untrusted configurations can achieve arbitrary code execution in the context of the consuming process.
A critical sandbox escape vulnerability in JSONata versions prior to 1.8.8 and 2.2.1 allows unauthenticated remote attackers to execute arbitrary code on the host machine. By submitting crafted JSONata expressions, an attacker can manipulate internal AST structures, bypass object clone helpers, spoof native function flags, and escape the evaluation environment to execute system commands through the Node.js runtime.