CVE-2025-34208
Executive Summary
CVE-2025-34208 exposes a critical password storage weakness in Vasion Print (formerly PrinterLogic) Virtual Appliance Host and Application (VA/SaaS deployments). User passwords are stored using unsalted SHA-512 hashes, with a fallback to unsalted SHA-1. The hashing is performed via PHP’s hash() function in multiple files (server_write_requests_users.php, update_database.php, legacy/Login.php, tests/Unit/Api/IdpControllerTest.php). No per-user salt is used, and the fast hash algorithms are unsuitable for password storage. An attacker who obtains the password database can recover cleartext passwords via offline dictionary or rainbow table attacks. The vulnerable code also contains logic that migrates legacy SHA-1 hashes to SHA-512 on login, further exposing users still on the old hash. This vulnerability was partially resolved, but remains present within the legacy authentication platform.
This record — and 170,000+ others — are available via the ValtersIT API. One endpoint replaces five: NVD + GitHub CVE + CISA KEV + EPSS + Nuclei + Exploit-DB, unified.
No signup required
Supply Chain & Package Security
This vulnerability is not related to NPM, PyPI, Go, or Ruby packages. It is a custom PHP application vulnerability within the Vasion Print product.
CVSS Breakdown & Threat Level
CVSS Score: 0.0 (No official CVSS vector assigned by NVD).
Given the nature of the vulnerability (unsalted fast hashes), a reasonable CVSSv3.1 vector would be:CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N (Base Score: 7.5 – High).
- Attack Vector: Network (attacker needs access to the database).
- Attack Complexity: Low (rainbow tables and dictionary attacks are well-known).
- Privileges Required: None (if database is exposed).
- User Interaction: None.
- Scope: Unchanged.
- Confidentiality: High (cleartext passwords recovered).
- Integrity: None.
- Availability: None.
Threat Level: High – Credential exposure can lead to lateral movement, account takeover, and further compromise.
Deep Dive & Mechanics
The vulnerability stems from the use of PHP’s hash() function with SHA-512 and SHA-1 algorithms without a per-user salt. The relevant code is found in:
server_write_requests_users.phpupdate_database.phplegacy/Login.phptests/Unit/Api/IdpControllerTest.php
The hashing process:
- On user registration or password change, the password is hashed using
hash('sha512', $password). - On login, the provided password is hashed with SHA-512 and compared to the stored hash.
- If the stored hash is SHA-1 (legacy), the code re-hashes the password with SHA-512 and updates the database.
This migration logic exposes users still on SHA-1 hashes, as an attacker can target those weaker hashes first.
Why it’s weak:
- No salt: Rainbow tables precompute hashes for common passwords. Without a salt, a single rainbow table can crack all passwords.
- Fast hash: SHA-512 is designed for speed, making brute-force and dictionary attacks feasible.
- Fallback to SHA-1: SHA-1 is even faster and more vulnerable to collision and preimage attacks.
An attacker who gains access to the password database (e.g., via SQL injection, backup exposure, or server compromise) can extract all password hashes and recover cleartext passwords offline.
Vulnerable vs. Patched Code
Vulnerable Code (PHP):
// Vulnerable: unsalted SHA-512
$hash = hash('sha512', $password);
// Legacy fallback: unsalted SHA-1
$legacy_hash = hash('sha1', $password);
Patched Code (Recommended):
// Patched: use password_hash() with bcrypt or Argon2
$hash = password_hash($password, PASSWORD_BCRYPT, ['cost' => 12]);
// Verification
if (password_verify($password, $hash)) {
// success
}
The patched version uses password_hash() which automatically generates a strong salt and uses a slow hash algorithm (bcrypt/Argon2). The password_verify() function handles salt extraction and comparison securely.
Exploitation & Lab Setup
Red Team (Offensive)
Objective: Recover cleartext passwords from a compromised database dump.
Lab Setup:
- Obtain a sample database dump containing unsalted SHA-512 hashes (e.g., from a test environment).
- Use Hashcat or John the Ripper to crack the hashes.
Hashcat Command:
# Mode 1700 = SHA-512 (unsalted)
hashcat -m 1700 -a 0 hashes.txt rockyou.txt --force
John the Ripper Command:
john --format=raw-sha512 --wordlist=rockyou.txt hashes.txt
Rainbow Table Attack:
- Use precomputed rainbow tables for SHA-512 (e.g., from freerainbowtables.com).
- Tools like
rcracki_mtcan be used.
Exploit Code (Python):
import hashlib
# Simulate cracking a single hash
target_hash = "5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8"
wordlist = ["password", "123456", "admin"]
for word in wordlist:
if hashlib.sha512(word.encode()).hexdigest() == target_hash:
print(f"Found: {word}")
Blue Team (Defensive)
Detection:
- Monitor for unusual database access or large data exports.
- Alert on use of weak hash algorithms in authentication logs.
- Implement database activity monitoring (DAM).
Honeypot:
- Deploy a fake database with decoy hashes to detect attackers attempting to crack passwords.
Incident Response:
- If a database breach is suspected, force password resets for all users.
- Review authentication logs for unauthorized access.
Indicators of Compromise (IOCs)
- File Hashes (SHA-256):
server_write_requests_users.php:a1b2c3d4e5f6...(replace with actual hash)update_database.php:b2c3d4e5f6a7...legacy/Login.php:c3d4e5f6a7b8...
- Network IOCs:
- Unusual outbound connections from the database server.
- Large data transfers from the application server.
- Log IOCs:
- Repeated failed login attempts followed by successful login (credential stuffing).
- Database queries selecting
passwordorhashcolumns.
Detection Engineering
YARA Rule
rule CVE_2025_34208_Unsalted_SHA512
{
meta:
description = "Detects unsalted SHA-512 password hashing in PHP files"
author = "Valters IT"
date = "2025-04-10"
reference = "CVE-2025-34208"
strings:
$hash_sha512 = "hash('sha512'" nocase
$hash_sha1 = "hash('sha1'" nocase
$password_hash = "password_hash(" nocase
condition:
($hash_sha512 or $hash_sha1) and not $password_hash
}
Sigma Rule
title: CVE-2025-34208 - Unsalted SHA-512 Password Hashing
id: 8c9e4f3a-2b1d-4e5f-8a7b-6c5d4e3f2a1b
status: experimental
description: Detects use of unsalted SHA-512 or SHA-1 for password hashing in PHP files.
author: Valters IT
date: 2025-04-10
logsource:
category: file_event
product: windows
detection:
selection:
TargetFilename|endswith: '.php'
EventID: 11
keywords:
- "hash('sha512'"
- "hash('sha1'"
condition: selection and keywords
falsepositives:
- Legitimate use of SHA-512 for non-password purposes (rare)
level: high
Suricata Rule
alert http $HOME_NET any -> $EXTERNAL_NET any (msg:"CVE-2025-34208 - Potential Password Hash Extraction"; flow:to_server,established; content:"password"; http_uri; nocase; content:"hash"; http_uri; nocase; sid:1000001; rev:1;)
Remediation & Mitigation
Immediate Actions:
- Patch: Apply the vendor’s partial fix if available. If not, implement a custom patch to replace
hash()withpassword_hash()using bcrypt or Argon2. - Force Password Reset: Require all users to change their passwords after patching.
- Database Audit: Check for any unauthorized access to the password database.
Long-Term Mitigations:
- Use a strong, slow hashing algorithm (bcrypt, Argon2, PBKDF2) with a unique salt per user.
- Implement multi-factor authentication (MFA) to reduce the impact of password compromise.
- Regularly rotate database credentials and limit access to the password database.
- Conduct security code reviews and penetration testing.
Workaround:
- If patching is not immediately possible, restrict network access to the database server and enable detailed logging.
Valters IT
Securing Digital Frontiers