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



CVE-2026-48488

CVE-2026-48488: Weak Cryptographic Hash (SHA-1) Usage for Attachment Encryption Keys in phpMyFAQ

Amit Schendel
Amit Schendel
Senior Security Researcher

Jun 24, 2026·7 min read·34 visits

Executive Summary (TL;DR)

phpMyFAQ stored SHA-1 hashes of custom attachment encryption keys in the database. Attackers gaining database read access can rapidly crack these hashes offline to decrypt sensitive attachments.

Prior to version 4.1.4, phpMyFAQ used the cryptographically broken SHA-1 algorithm to hash custom attachment encryption keys stored in the database. Attackers with database access can recover these plaintext keys through offline brute-force attacks and subsequently decrypt sensitive file attachments.

Vulnerability Overview

The phpMyFAQ application is an open-source, mobile-friendly FAQ web application. It includes functionality that allows administrators and authorized users to attach files directly to FAQ records. To maintain confidentiality, the application offers an option to encrypt these file attachments using either a default system-wide encryption key or a specific custom password designated for an individual attachment.

This vulnerability, designated as CVE-2026-48488, lies in the handling and storage of these custom encryption keys. When a user configured a unique password for an attachment, the system processed this secret through the obsolete SHA-1 hashing algorithm. The resulting weak cryptographic hash was written directly to the database.

The application stored these hashed values inside the password_hash column of the faqattachment table. Because SHA-1 is highly vulnerable to modern cryptanalysis, this design decision created a significant vulnerability where anyone gaining database access could retrieve and compromise the underlying encryption keys.

Root Cause Analysis

The primary root cause of this vulnerability is the use of an insecure cryptographic hash function (SHA-1) to process sensitive credentials. This mechanism was implemented within the base class AbstractAttachment inside the file phpmyfaq/src/phpMyFAQ/Attachment/AbstractAttachment.php. This class manages file attachment entities, including their lifecycle, metadata, and encryption states.

When a custom key is assigned to an attachment, the application invokes the setKey() method. The second parameter of this method, $default, determines if the key is the default system key or an attachment-specific password. If $default is set to false, the system computes the SHA-1 hash of the plaintext key using the native PHP sha1() function.

This computed hash is assigned to the $passwordHash class property. Upon saving or updating the attachment metadata, the saveMeta() method runs an SQL query to insert this SHA-1 value into the faqattachment table. Correspondingly, the getMeta() method queries this column during object initialization.

Security analysis of the codebase revealed that this SHA-1 hashing was functionally redundant. The stored hash was never actually evaluated or verified against user input during typical decryption tasks. It existed purely as dead code, yet it consistently stored weak cryptographic representations of user-provided keys in the application database.

Comparative Code Analysis

To address this vulnerability, the developers removed the unused cryptographic property and altered the corresponding database writes. The comparative analysis below outlines the exact changes made to AbstractAttachment.php in commit 1aa9be6f8a2fa5c527c983826205229fc3129718.

// BEFORE THE PATCH
class AbstractAttachment {
    protected string $passwordHash = ''; // Weak property
 
    public function setKey(?string $key, bool $default = true): void {
        $this->key = $key;
        $this->encrypted = null !== $key;
        if (!$this->encrypted) { return; }
        if ($default) { return; }
        $this->passwordHash = sha1((string) $key); // Vulnerable line
    }
}
// AFTER THE PATCH
class AbstractAttachment {
    // Removed the $passwordHash property completely
 
    public function setKey(?string $key): void {
        $this->key = $key;
        $this->encrypted = null !== $key;
        // The $default parameter and the sha1() call have been deleted
    }
}

The update also modified the data mapping operations. In both the getMeta() and saveMeta() methods, references to the password_hash SQL column were purged. The query in saveMeta() now omits this parameter entirely, preventing any future population of the column with weak verification material.

This remediation strategy effectively eliminates the root cause of the vulnerability. Because the application did not use the field for business logic, removing the dead code completely mitigates the weak cryptography without disrupting existing functionality. However, because the database schema remains unchanged to maintain backwards compatibility, the physical database column password_hash still exists and must be manually purged of historical entries.

Attack Methodology and Exploitation

Exploitation of CVE-2026-48488 follows a structured multi-stage attack methodology. An attacker cannot exploit this vulnerability directly from the network without prior database read capabilities. Therefore, the primary prerequisite is obtaining access to the application database, which typically occurs through an unrelated vulnerability like SQL injection or exposed backup storage.

Once database access is established, the attacker queries the metadata storage table to extract the vulnerable hashes. The specific target is the faqattachment table, where the password_hash column stores the 40-character hexadecimal representation of the SHA-1 hash. The attacker maps these hashes to their corresponding attachment IDs and filenames.

In the next phase, the attacker utilizes standard credential cracking tools, such as Hashcat or John the Ripper. Since SHA-1 is a highly parallelizable algorithm, modern consumer-grade GPUs can calculate billions of guesses per second. This allows dictionary-based or brute-force attacks to execute with high efficiency, recovering complex passwords in a short timeframe.

After obtaining the plaintext key, the attacker retrieves the target encrypted file from the server's directory structure. They can then invoke the corresponding decryption standard (such as AES) using the recovered plaintext key. This completes the exploit chain, allowing unauthorized reading of restricted, sensitive corporate or user files.

Impact Assessment

The severity of this vulnerability is rated as low, receiving a CVSS v4.0 base score of 2.7. This rating reflects the significant prerequisites required to execute a successful attack. Specifically, the attacker must already possess the capability to read from the application database, representing a high barrier to entry in a secure environment.

However, in a post-compromise scenario, the impact on confidentiality is direct and quantifiable. If an organization uses phpMyFAQ to store highly sensitive documents, such as internal network architectures, proprietary configurations, or personal data, the failure of the encryption wrapper allows complete disclosure of this information.

Cryptographic standards have long classified SHA-1 as broken and unsuitable for hashing passwords or generating signatures. The mathematical weaknesses of SHA-1 allow fast offline computation, which completely undermines the security guarantees of custom-configured attachment passwords.

The Exploit Prediction Scoring System (EPSS) score is currently 0.00182 (0.18%), which indicates a very low likelihood of exploitation in the wild over the next 30 days. Additionally, this CVE is not listed in CISA's Known Exploited Vulnerabilities catalog, confirming that it is not actively being leveraged in contemporary threat campaigns.

Remediation and Detection

Remediation requires upgrading phpMyFAQ to version 4.1.4 or higher. This upgrade implements the code changes in commit 1aa9be6f8a2fa5c527c983826205229fc3129718, which halts the creation of new SHA-1 hashes by eliminating the vulnerable code pathways.

Because the database schema is not modified by the application upgrade, historical SHA-1 hashes remain in the database after the update is applied. Administrators must manually sanitize the database by executing an SQL statement to set all existing values in the password_hash column of the faqattachment table to NULL. This step prevents legacy credentials from being exposed in future database backups.

-- Manual database sanitization
UPDATE faqattachment SET password_hash = NULL;

To detect if an active installation is vulnerable, security engineers can conduct code audits and database queries. An active system is confirmed as vulnerable if a database query against the faqattachment table returns non-empty strings inside the password_hash column. Additionally, reviewing the setKey() signature inside AbstractAttachment.php for a second parameter indicates the old, vulnerable codebase is active.

Official Patches

thorstenFix Commit: Remove password hashing and password property from Attachment

Fix Analysis (1)

Technical Appendix

CVSS Score
2.7/ 10
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:L/VI:N/VA:N/SC:N/SI:N/SA:N/E:U
EPSS Probability
0.18%
Top 92% most exploited

Affected Systems

phpMyFAQ

Affected Versions Detail

Product
Affected Versions
Fixed Version
phpMyFAQ
thorsten
< 4.1.44.1.4
AttributeDetail
CWE IDCWE-328 (Use of Weak Hash)
Attack VectorNetwork (AV:N)
CVSS v4.02.7 (Low)
EPSS Score0.00182
ImpactLow (Confidentiality compromise of encrypted attachments)
Exploit StatusNone
KEV StatusNot Listed

MITRE ATT&CK Mapping

T1110.002Brute Force: Credential Cracking
Credential Access
T1552.001Unsecured Credentials: Credentials in Files / Databases
Credential Access
T1005Data from Local System
Collection
CWE-328
Use of Weak Hash

The product uses a one-way cryptographic hash function that is weak and cannot guarantee that the original data cannot be reconstructed or that different inputs will not produce identical hashes.

Vulnerability Timeline

Remediation patch committed by core developer Thorsten Rinne
2026-05-21
Coordinated disclosure of security advisory GHSA-58fg-62fg-3fcj
2026-06-08
CVE-2026-48488 published to CVE and NVD databases
2026-06-08
Security advisory updated in GitHub Security Advisories
2026-06-09

References & Sources

  • [1]GHSA-58fg-62fg-3fcj: Weak Cryptography in phpMyFAQ Attachment Keys
  • [2]Fix Commit: Remove password hashing and password property from Attachment

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

•34 minutes ago•CVE-2026-71850
4.8

CVE-2026-71850: Server-Side Rendering Data Exposure in Hono JSX Memoization

A session data exposure vulnerability in the Hono web application framework (hono/jsx module) allows consecutive users to receive cached HTML outputs containing private data. When JSX components wrapped in `memo()` are rendered on the server, the caching mechanism utilizes a module-level closure that persists across independent HTTP requests. When subsequent requests occur with matching props, the components are not re-evaluated, and cached HTML is served. If these components read request-scoped or session-specific data via ambient APIs, the data of the first user is exposed to subsequent users.

Amit Schendel
Amit Schendel
0 views•6 min read
•about 2 hours ago•CVE-2026-71851
9.0

CVE-2026-71851: Use of Cryptographically Weak PRNG in crypto-js (Ill Bloom)

A severe, twelve-year-old cryptographic weakness in crypto-js (versions < 4.0.0) generated pseudorandom numbers using a custom Multiply-With-Carry (MWC) algorithm seeded from the non-secure Math.random(). This reduces 128-bit and 256-bit key spaces to just 2^39 and 2^47 possibilities, allowing offline brute-force attacks.

Alon Barad
Alon Barad
1 views•7 min read
•about 3 hours ago•CVE-2026-71870
4.8

CVE-2026-71870: Uncontrolled Resource Consumption (DoS) in pypdf ToUnicode CMap Parsing

An uncontrolled resource consumption vulnerability (CWE-400) exists in pypdf prior to version 6.15.0. When extracting text from a specially crafted PDF document, the parser fails to restrict token lengths within /ToUnicode CMap streams, causing unbounded memory allocation and process termination via Out-of-Memory (OOM) crashes.

Amit Schendel
Amit Schendel
5 views•7 min read
•about 4 hours ago•CVE-2026-71852
4.8

CVE-2026-71852: Denial of Service via Excessive Iteration and Memory Exhaustion in pypdf CID Font Parsing

A Denial of Service (DoS) vulnerability exists in pypdf prior to version 6.15.0. When parsing maliciously crafted PDF files containing excessively large CID font width ranges, the library suffers from CPU starvation and memory exhaustion due to unconstrained loop expansion.

Amit Schendel
Amit Schendel
6 views•7 min read
•about 5 hours ago•CVE-2026-56818
6.5

CVE-2026-56818: Denial of Service via Memory Pinning in Netty Redis Array Aggregator

A vulnerability in Netty's Redis codec allows remote unauthenticated attackers to cause a memory-pinning Denial of Service (DoS) due to the failure to release partial aggregate state when specific error conditions occur in RedisArrayAggregator. When processing Redis Serialization Protocol (RESP) messages, the aggregator fails to clear internal queues and release retained direct byte buffers on exception paths triggered by exceeded maxElements or invalid length properties. If the pipeline does not explicitly tear down the connection upon detecting a decoder error, subsequent elements continue utilizing the stale context, allowing memory blocks to remain indefinitely pinned.

Amit Schendel
Amit Schendel
6 views•5 min read
•about 6 hours ago•CVE-2026-54164
6.5

CVE-2026-54164: Missing IRI Type Validation in API Platform Core Enables Resource Type Confusion

CVE-2026-54164 is a class/type confusion vulnerability (CWE-843) in API Platform Core. When processing relationships via Internationalized Resource Identifiers (IRIs) in write requests, the framework's normalizer fails to verify if the resolved resource matches the expected type. For PHP applications utilizing untyped properties, the mismatched object is silently assigned, breaking domain logic and data integrity.

Alon Barad
Alon Barad
4 views•6 min read