Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessIdentify FrontAccounting instance
-
DeliveryExploit database access vector (SQLi or exposed port)
-
ExploitExtract users table containing MD5 digests
-
ExecutionCrack hashes offline with GPU/rainbow tables
-
ImpactAuthenticate to FrontAccounting or credential-stuff external services
Vulnerability Assessment
| Weakness |
CWE
|
| Exploitation Conditions | Exploitation requires prior read access to the FrontAccounting database or users table - the weak hashing cannot be exploited without first obtaining the stored digests through a separate attack vector such as SQL injection, a publicly exposed database port, backup file disclosure, or server-level compromise. All FrontAccounting deployments through 2.4.20 using the built-in authentication system are affected regardless of configuration; the codebase provides no option to enable stronger hashing. The AC:H rating reflects this prerequisite: direct unauthenticated remote password cracking is not possible without the database exfiltration step. Limiting factors include: the attacker must successfully breach the database layer first; weak or long unique passwords still require significant GPU time to crack even against unsalted MD5; and organizations enforcing unique per-service passwords limit downstream credential-stuffing impact. |
| Impact | The CVSS 4.0 vector (AV:N/AC:H/AT:N/PR:N/UI:N/VC:H/VI:N/VA:N) accurately characterizes the attack profile: high complexity (AC:H) because exploitation requires a prerequisite database access step, but high confidentiality impact (VC:H) because once the user table is obtained, all passwords are practically recoverable. MD5 processes billions of hashes per second on consumer GPUs, making even moderately complex passwords crackable within hours or days. No EPSS data was provided, and no CISA KEV listing exists, indicating no confirmed widespread active exploitation at time of analysis. The real-world risk is most acute in post-breach credential-stuffing scenarios - users who reuse FrontAccounting passwords on other services face compounded exposure. The risk is bounded by the AC:H prerequisite: unauthenticated direct remote cracking is not possible without first exfiltrating the database via a separate vulnerability. Organizations with adequate database perimeter controls reduce their exposure materially, but the underlying hash weakness remains a latent risk in any compromise. |
| Exploit ScenarioDerived | An attacker exploits a SQL injection flaw or misconfigured database exposure to extract FrontAccounting's users table, obtaining unsalted MD5 password digests for all accounts. Using hashcat in MD5 mode against a common-password wordlist or a precomputed rainbow table, the attacker recovers plaintext passwords for the majority of accounts within hours on consumer GPU hardware. The recovered credentials are then used to authenticate directly to FrontAccounting (gaining access to financial data) or submitted to credential-stuffing tools targeting other services where users have reused the same password. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Aug 27, 2026
Unsalted MD5 password hashing in FrontAccounting through 2.4.20 renders every stored credential recoverable in minutes if the database is compromised. All authentication-related code paths - user creation, password updates, self-service password change, forgotten-password reset, and login verification - use raw md5() with no per-user salt, so identical passwords produce identical digests and the entire user table can be cracked en masse with rainbow tables or GPU-accelerated tools. No active exploitation (CISA KEV) has been identified, but the CVSS 4.0 score of 8.2 with VC:H reflects that a single database breach translates directly to full plaintext credential exposure across all accounts.
RemediationAI
No vendor-released patch has been identified at time of analysis. The definitive fix requires replacing all md5($password) calls in admin/users.php, admin/change_current_user_password.php, includes/current_user.inc, and the authentication function get_user_auth() with PHP's password_hash() (using PASSWORD_BCRYPT or PASSWORD_ARGON2ID) and password_verify() respectively; existing stored MD5 hashes must be invalidated and users forced to reset passwords on next login to ensure the legacy digests are purged. As a compensating control pending a code-level fix, restrict database access to localhost or a trusted application host via firewall rules or bind-address configuration - this does not eliminate the weak hashing but significantly reduces the risk of the user table being exfiltrated via a network-exposed database port. Additionally, enforcing strong, unique password policies and enabling multi-factor authentication (if supported by the deployment) increases cracking difficulty and limits the damage of any future compromise. Refer to the researcher's technical disclosure at https://github.com/geo-chen/oss/blob/main/FA.md#finding-2-unsalted-md5-password-hashing-in-frontaccounting for specific code locations.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
FrontAccounting is a PHP-based open-source ERP and accounting application. CWE-916 (Use of Password Hash With Insufficient Computational Effort) identifies the root cause: MD5 is a fast, non-adaptive cryptographic hash designed for data integrity, not password storage. The vulnerability is pervasive across the codebase - admin/users.php passes md5($_POST['password']) to add_user() and update_user_password(), admin/change_current_user_password.php does the same for self-service changes, the forgotten-password path in includes/current_user.inc (confirmed at commit 9464a3f, line 79) hashes newly generated passwords identically, and authentication is performed via get_user_auth($loginname, md5($password)). The absence of per-password salts means two users with the same password share an identical digest, enabling a single precomputed rainbow table to attack the entire user table simultaneously. PHP's password_hash() and password_verify() - which provide bcrypt or Argon2 with automatic per-password salting and adaptive cost factors - are entirely absent from the codebase. The affected CPE is cpe:2.3:a:frontaccounting:frontaccounting:*:*:*:*:*:*:*:*.
Know when Frontaccounting gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
CVSS:4.0/AV:N/AC:H/AT:N/PR:N/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N
AC:H reflects the required prerequisite database exfiltration step; C:H captures full plaintext password recovery; I:N and A:N because the hash weakness has no direct integrity or availability impact.
Primary rating from Vendor (VulnCheck).
CVSS VectorVendor: VulnCheck
DescriptionCVE.org
FrontAccounting through 2.4.20 stores and verifies user passwords as unsalted MD5 digests. admin/users.php passes md5($_POST['password']) to add_user() and update_user_password(), admin/change_current_user_password.php does the same when a user changes their own password, the forgotten-password path in includes/current_user.inc hashes the newly generated password the same way, and authentication calls get_user_auth($loginname, md5($password)). The codebase applies no per-password salt and contains no call to password_hash(), password_verify() or any other adaptive hash, so identical passwords yield identical digests and an attacker who obtains the user table can recover plaintext passwords with precomputed lookup tables or high-rate GPU cracking.
Executive ViewAI
FrontAccounting versions 2.4.20 and earlier store user passwords using unsalted MD5 hashing, allowing all credentials to be cracked in minutes if the database is accessed. A single database compromise immediately exposes plaintext-equivalent passwords for every user in the system, enabling attackers to impersonate any account and access all downstream business applications. This represents an enterprise-wide credential exposure risk affecting all FrontAccounting users and dependent systems.
Implement multi-factor authentication (MFA) requiring a second factor beyond passwords for all FrontAccounting access; restrict database access through network segmentation, enforce strong firewall rules, enable audit logging of all database connections, and encrypt data in transit using TLS and at rest using AES-256; monitor for unauthorized database access attempts and anomalous login patterns; enforce 16+ character alphanumeric passwords with complexity requirements; conduct daily database integrity checks for signs of unauthorized modification.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.
More in Frontaccounting
View allincludes/db/class.reflines_db.inc in FrontAccounting 2.4.6 contains a SQL Injection vulnerability in the reference field
Remote code execution in FrontAccounting before 2.4.20 lets an authenticated user abuse the attachment upload handler to
FrontAccounting 2.4.3 suffers from a CSRF flaw, which leads to adding a user account via admin/users.php (aka the "add u
Multiple SQL injection vulnerabilities in FrontAccounting (FA) before 2.3.21 allow remote attackers to execute arbitrary
FrontAccounting 2.4.5 contains a Time Based Blind SQL Injection vulnerability in the parameter "filterType" in /attachme
SQL injection in FrontAccounting's get_gl_transactions() function lets authenticated users holding the SA_GLANALYTIC per
SQL injection in FrontAccounting's Audit Trail report handler (reporting/rep710.php) lets authenticated users holding th
SQL injection in FrontAccounting before 2.4.20 allows authenticated attackers to extract arbitrary database contents by
An issue was discovered in FrontAccounting 2.4.7. Rated medium severity (CVSS 4.9), this vulnerability is remotely explo
FrontAccounting 2.4.20 and earlier selectively enforces CSRF validation - tokens are generated for every rendered form b
EUVD-2026-67145
GHSA-hc7j-jf63-wgj6
NVD
CVE.org
EPSS
VulDB
Exploit-DB