CVEReports
CVEReports

Automated vulnerability intelligence platform. Comprehensive reports for high-severity CVEs generated by AI.

Product

  • Home
  • Sitemap
  • RSS Feed

Company

  • About
  • Contact
  • Privacy Policy
  • Terms of Service

© 2026 CVEReports. All rights reserved.

Made with love by Amit Schendel & Alon Barad



GHSA-GQ4G-FPC9-VJFQ

GHSA-gq4g-fpc9-vjfq: Username Enumeration via Predictable Decoy Credentials in web-auth/webauthn-lib

Alon Barad
Alon Barad
Software Engineer

Jul 8, 2026·5 min read·18 visits

Executive Summary (TL;DR)

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.

Vulnerability Overview

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.

Root Cause Analysis

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.

Code Analysis

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.'
    );
}

Exploitation Methodology

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:

Impact Assessment

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.

Remediation and Fix Completeness

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.

Technical Appendix

CVSS Score
2.3/ 10
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

Affected Systems

web-auth/webauthn-lib

Affected Versions Detail

Product
Affected Versions
Fixed Version
web-auth/webauthn-lib
web-auth
>= 4.9.0, < 5.3.55.3.5
AttributeDetail
CWE IDCWE-203
Attack VectorNetwork
CVSS v4.02.3 (Low)
Exploit StatusProof-of-Concept
ImpactUsername Enumeration
KEV StatusNot Listed

MITRE ATT&CK Mapping

T1589.002Gather Victim Identity Information: Email Addresses / Usernames
Reconnaissance
T1110Brute Force
Credential Access
CWE-203
Information Exposure Through Discrepancy

The product behaves differently when executing operations with different inputs in a way that exposes sensitive state or information.

References & Sources

  • [1]GitHub Security Advisory GHSA-gq4g-fpc9-vjfq
  • [2]Vulnerability Report on web-auth/webauthn-framework
  • [3]Web-auth Framework Main Repository

Attack Flow Diagram

Press enter or space to select a node. You can then use the arrow keys to move the node around. Press delete to remove it and escape to cancel.
Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.

More Reports

•38 minutes ago•CVE-2026-61539
10.0

CVE-2026-61539: Remote Code Execution via Llama3 Tool Parser Eval Injection in Xinference

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.

Alon Barad
Alon Barad
2 views•6 min read
•about 2 hours ago•CVE-2026-77354
8.7

CVE-2026-77354: Uncontrolled Resource Consumption (OOM) via Sparse Array Indexes in kin-openapi

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.

Amit Schendel
Amit Schendel
1 views•8 min read
•about 3 hours ago•CVE-2026-77413
9.3

CVE-2026-77413: Remote Code Execution via Prototype Chain Bypass in JSONata Evaluator

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.

Alon Barad
Alon Barad
2 views•6 min read
•about 4 hours ago•CVE-2026-63135
8.2

CVE-2026-63135: Stored Cross-Site Scripting (XSS) via Referer Header in YOURLS

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.

Amit Schendel
Amit Schendel
2 views•6 min read
•about 5 hours ago•CVE-2026-68508
7.8

CVE-2026-68508: Arbitrary Code Execution via Unsafe Dynamic Instantiation in Hydra Core

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.

Alon Barad
Alon Barad
5 views•7 min read
•about 6 hours ago•CVE-2026-77415
9.3

CVE-2026-77415: Sandbox Escape and Arbitrary Code Execution in JSONata Engine

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.

Alon Barad
Alon Barad
10 views•6 min read