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-9QV9-8XV6-5P35

GHSA-9qv9-8xv6-5p35: Unauthenticated Password Reset and Enumeration Flaw in phpMyFAQ

Alon Barad
Alon Barad
Software Engineer

May 21, 2026·6 min read·9 visits

Executive Summary (TL;DR)

A weak password recovery mechanism in phpMyFAQ <= 4.1.2 allows unauthenticated attackers to force password resets for targeted users and enumerate valid accounts. The system immediately updates the database password upon receiving a matching username and email, bypassing standard token-based verification.

phpMyFAQ versions 4.1.2 and prior contain a critical logic flaw in the REST API password recovery mechanism. The endpoint processes password resets in a single, unauthenticated step, allowing remote attackers to forcefully change database credentials for arbitrary accounts while facilitating user enumeration through observable response discrepancies.

Vulnerability Overview

GHSA-9qv9-8xv6-5p35 exposes a fundamental logic flaw in the REST API components of phpMyFAQ, specifically affecting version 4.1.2 and earlier. The application implements an insecure password recovery mechanism that violates standard identity verification workflows.

Secure password reset flows require an out-of-band verification step, typically generating a cryptographic token sent to the user's registered email address. The password is only updated in the database after the user submits this valid, time-bound token back to the server.

In the vulnerable implementation, phpMyFAQ processes the password reset in a single, synchronous step. Upon receiving a request containing a valid username and corresponding email address, the application immediately generates a new password and overwrites the existing credentials in the database before dispatching the notification email.

This behavior introduces two distinct security issues: a Weak Password Recovery Mechanism (CWE-640) and Information Exposure Through Discrepancy (CWE-204). Remote, unauthenticated attackers can leverage these flaws to disrupt access for legitimate users and accurately map registered accounts on the target system.

Root Cause Analysis

The vulnerability originates in the UnauthorizedUserController class, which handles public-facing API requests that do not require an active session. The specific function at fault is the updatePassword method, mapped to the PUT /api/index.php/user/password/update endpoint.

When a client submits a PUT request to this endpoint, the application extracts the username and email fields from the JSON payload. The application queries the faquserlogin table to determine if the username exists and subsequently verifies if the provided email matches the stored record for that user.

If both conditions evaluate to true, the application instantiates a password generation routine. The critical error occurs in the immediate execution of the $user->changePassword($newPassword) function. This function persists the newly generated password to the database synchronously, permanently destroying the user's previous credentials.

Only after the database transaction is finalized does the application attempt to send the new password to the user via the $mail->send() method. The failure to defer the database update until the user proves control of the email address constitutes the core logic flaw.

Code Analysis and Execution Flow

An analysis of the vulnerable source code in phpmyfaq/src/phpMyFAQ/Controller/Frontend/Api/UnauthorizedUserController.php demonstrates the immediate credential modification.

#[Route(path: 'user/password/update', name: 'api.private.user.password', methods: ['PUT'])]
public function updatePassword(Request $request): JsonResponse {
    // Extract username and email from JSON body
    $loginExist = $user->getUserByLogin($username);
 
    if ($loginExist && $email === $user->getUserData('email')) {
        $newPassword = $user->createPassword();
        
        // VULNERABILITY: Password changed immediately in the DB
        $user->changePassword($newPassword); 
        
        $mail->send();
        return $this->json(['success' => 'Email has been sent.'], Response::HTTP_OK);
    }
 
    // VULNERABILITY: Observable discrepancy permits enumeration
    return $this->json(['error' => 'Error: Username and email address not found.'], Response::HTTP_CONFLICT);
}

The code block above highlights both the forced reset and the enumeration flaw. The application returns an HTTP 200 OK status for valid inputs and an HTTP 409 Conflict for invalid inputs.

The patch introduced in version 4.1.3 resolves this by overhauling the recovery workflow. Instead of generating a password, the system now generates a temporary validation token, emails the token to the user, and requires a subsequent API call providing the token to authorize the password update. The patch also standardizes the API response to prevent enumeration.

Exploitation Methodology

Exploitation requires zero privileges and minimal network access. An attacker interacts directly with the exposed REST API using standard HTTP client tools.

To execute the forced password reset, the attacker constructs a PUT request containing the targeted user's known username and email address. The payload structure requires a basic JSON body.

PUT /api/index.php/user/password/update HTTP/1.1
Host: target-phpmyfaq-instance.local
Content-Type: application/json
 
{
  "username": "admin",
  "email": "admin@example.com"
}

If the targeted user exists, the server returns an HTTP 200 OK response. At this precise moment, the targeted user's active session remains valid, but their stored password is changed. Once their session expires or they attempt to log in from a new device, they will be denied access until they retrieve the system-generated password from their email inbox.

Attackers utilize the observable discrepancies in the HTTP response codes to conduct user enumeration. By iterating through lists of common usernames and company email structures, an attacker automates requests to the endpoint. An HTTP 409 Conflict confirms the user does not exist, while an HTTP 200 OK confirms a valid target, simultaneously locking that user out of their account.

Impact Assessment

The vulnerability carries a CVSS v3.1 base score of 7.0, reflecting its high impact on system integrity and its fully remote, unauthenticated attack vector. The absence of complex preconditions makes this flaw highly reproducible in default deployments.

The immediate consequence is localized Denial of Service (DoS) through account disruption. Attackers can script continuous requests against targeted administrative accounts, ensuring the database password changes repeatedly. This prevents legitimate administrators from successfully logging in, as the password emailed to them is invalidated by the next automated attack request before it can be used.

The enumeration capability presents significant risks for organizational security posture. Attackers map valid internal identities, facilitating targeted spear-phishing campaigns or brute-force attacks against other enterprise services.

While this vulnerability does not directly expose the new password to the attacker, it severely degrades access controls. If an attacker possesses secondary access to the victim's communication channels, such as a compromised email inbox or the ability to intercept outbound SMTP traffic, this logic flaw escalates immediately to full account takeover.

Detection and Remediation

The primary remediation strategy requires upgrading the phpMyFAQ deployment to version 4.1.3 or later. This version replaces the synchronous password reset with a secure, token-based verification flow and normalizes API responses to mitigate enumeration.

Organizations unable to patch immediately should implement compensating controls at the network perimeter. Web Application Firewalls (WAF) or reverse proxies can be configured to block or rate-limit unauthenticated PUT requests to the /api/index.php/user/password/update endpoint.

Security operations teams should monitor web server access logs and API gateways for suspicious activity patterns. Sequences of HTTP 409 Conflict responses originating from a single IP address, particularly when targeting the password update endpoint, indicate active user enumeration attempts.

Administrators should also audit internal mail server logs. An abnormal spike in password reset notifications originating from the phpMyFAQ application server serves as a high-fidelity indicator that the forced reset vulnerability is being actively exploited.

Official Patches

phpMyFAQOfficial Security Advisory
GitHubphpMyFAQ Source Repository

Technical Appendix

CVSS Score
7.0/ 10
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:H/A:N

Affected Systems

phpMyFAQ REST APIphpMyFAQ Frontend Controller

Affected Versions Detail

Product
Affected Versions
Fixed Version
phpMyFAQ
phpMyFAQ
<= 4.1.24.1.3
AttributeDetail
CVSS Score7.0 (High)
Attack VectorNetwork
Privileges RequiredNone
User InteractionNone
CWE IDCWE-640, CWE-204
Exploit StatusProof of Concept Available

MITRE ATT&CK Mapping

T1190Exploit Public-Facing Application
Initial Access
T1087.004Account Discovery: Cloud Account
Discovery
T1498.001Network Denial of Service: Direct Network Flood
Impact
CWE-640
Weak Password Recovery Mechanism for Forgotten Password

The application contains a mechanism for users to recover or change their passwords without validating their identity via a secure token or verification step.

Known Exploits & Detection

Context ResearchHTTP PUT request targeting /api/index.php/user/password/update with JSON body containing known username and email.

Vulnerability Timeline

phpMyFAQ 4.1.3 released, addressing the vulnerability.
2026-05-13
Vendor Security Advisory published.
2026-05-14
GHSA-9qv9-8xv6-5p35 published on GitHub.
2026-05-20

References & Sources

  • [1]Official Advisory: phpMyFAQ Security Advisory 2026-05-14
  • [2]GitHub Advisory: GHSA-9qv9-8xv6-5p35
  • [3]OSV Data: GHSA-9qv9-8xv6-5p35

More Reports

•5 minutes ago•CVE-2026-56677
8.6

CVE-2026-56677: Unauthenticated Server-Side Request Forgery in 9Router OIDC Test Endpoint

A high-severity security vulnerability exists in 9Router, an AI router and token saver dashboard. When dashboard authentication features are disabled or left in default configurations, the application exposes administrative testing routines directly to the public internet. Unauthenticated network adversaries can exploit the OIDC configuration validation endpoint to initiate arbitrary HTTP requests, routing unauthorized traffic to local loops, adjacent container ports, and cloud resource metadata interfaces.

Amit Schendel
Amit Schendel
0 views•5 min read
•about 1 hour ago•CVE-2026-64849
9.3

CVE-2026-64849: Server-Side Request Forgery (SSRF) in MLflow Webhooks via DNS Rebinding

CVE-2026-64849 is a critical Server-Side Request Forgery (SSRF) vulnerability affecting MLflow tracking servers prior to version 3.15.0. It allows unauthenticated remote attackers to bypass outbound request destination filters using DNS rebinding or HTTP redirects. This exposure risks compromising sensitive cloud infrastructure metadata and internal microservices.

Alon Barad
Alon Barad
2 views•5 min read
•about 2 hours ago•CVE-2026-69146
6.5

CVE-2026-69146: Missing Authorization Bypass in MLflow Basic Authentication Middleware

This technical report details a missing authorization vulnerability (CVE-2026-69146 / GHSA-3p64-6gvh-82v5) affecting the MLflow platform from version 3.13.0 to 3.15.0. When MLflow is configured with the built-in basic-auth plugin, authenticated users can bypass run-level UPDATE authorization checks, enabling unauthorized dataset and model lineage metadata injection.

Alon Barad
Alon Barad
2 views•7 min read
•about 3 hours ago•CVE-2026-69148
7.1

CVE-2026-69148: Broken Object Level Authorization (BOLA) in MLflow Model Registry

MLflow prior to version 3.15.0 fails to perform proper authorization checks when registering model versions, allowing authenticated users with access to a registered model to link and access artifacts from runs and models belonging to other users without authorization.

Amit Schendel
Amit Schendel
4 views•7 min read
•about 4 hours ago•CVE-2026-59893
7.5

CVE-2026-59893: Regular Expression Denial of Service in sqlparse Lexer

A high-severity Regular Expression Denial of Service (ReDoS) vulnerability in the sqlparse Python library prior to version 0.6.0 allows unauthenticated remote attackers to trigger CPU exhaustion and application denial of service via crafted SQL inputs containing unmatched dollar-quoted literals or unclosed multiline comments.

Alon Barad
Alon Barad
4 views•6 min read
•about 5 hours ago•GHSA-FHGH-WQ4Q-R37X
7.8

GHSA-FHGH-WQ4Q-R37X: Remote Code Execution via Sigstore Signature Verification Bypass in uniget CLI

A high-severity logic inversion flaw in the uniget CLI completely bypasses Sigstore cryptographic signature verification on metadata files by default. If an attacker can poison the package metadata cache or repository, they can execute arbitrary OS commands under the privileges of the active user.

Alon Barad
Alon Barad
5 views•5 min read