CVE-2025-32976
Executive Summary
CVE-2025-32976 is a critical authentication bypass vulnerability in Quest KACE Systems Management Appliance (SMA). The flaw resides in the two-factor authentication (2FA) validation logic, specifically in the TOTP-based 2FA implementation. An authenticated user who has already passed the initial password-based login can bypass the second factor (TOTP) entirely, gaining elevated access without providing a valid one-time code. This effectively nullifies the security benefit of 2FA for affected users.
The vulnerability affects all supported versions of Quest KACE SMA prior to the specified patches. The CVSS score is 9.9 (Critical) due to the low attack complexity, low privileges required, and the high impact on confidentiality, integrity, and availability. No public proof-of-concept or exploit code is currently available, but the vulnerability is trivially exploitable by any authenticated user.
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 a software supply chain issue. It is a logic flaw in the proprietary Quest KACE SMA codebase. No third-party packages or dependencies are implicated.
CVSS Breakdown & Threat Level
CVSS Score: 9.9 (Critical) Vector: CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
| Metric | Value | Rationale |
|---|---|---|
| Attack Vector (AV) | Network (N) | The vulnerability is exploitable over the network via the SMA web interface. |
| Attack Complexity (AC) | Low (L) | No special conditions or race conditions are required; the bypass is straightforward. |
| Privileges Required (PR) | Low (L) | An attacker needs only a valid username/password (lowest privilege level). |
| User Interaction (UI) | None (N) | No user interaction is required beyond the attacker's own actions. |
| Scope (S) | Unchanged (U) | The vulnerable component and the impacted component are the same. |
| Confidentiality (C) | High (H) | Full access to all SMA data, including system configurations and managed endpoints. |
| Integrity (I) | High (H) | Ability to modify system settings, deploy software, and alter configurations. |
| Availability (A) | High (H) | Potential to disrupt SMA services or managed endpoints. |
Threat Level: Critical. An authenticated attacker can completely compromise the SMA appliance and all managed systems.
Deep Dive & Mechanics
The vulnerability is a logic flaw in the 2FA validation process. When a user authenticates with a password, the system initiates a 2FA challenge. The flawed logic occurs in the server-side validation of the TOTP token. Instead of strictly requiring a valid TOTP code, the system may accept a null, empty, or previously used token under certain conditions, or it may skip the 2FA check entirely if a specific parameter is manipulated.
Root Cause: The server-side code does not properly enforce that a valid TOTP token was actually verified. The validation function may return a success status if the token parameter is missing, empty, or if the session state indicates that 2FA was already completed (due to a race condition or improper state management).
Attack Flow:
- Attacker obtains valid credentials (e.g., via phishing, credential stuffing, or insider threat).
- Attacker logs in with username and password.
- The SMA presents the 2FA challenge page.
- Attacker either submits an empty TOTP field, a null value, or manipulates the HTTP request to skip the 2FA step.
- The server incorrectly validates the request and grants a fully authenticated session.
Affected Component: The 2FA validation module within the SMA web application (likely a PHP or Java servlet handling authentication).
Vulnerable vs. Patched Code
The exact code is proprietary, but the logic flaw can be described conceptually.
Vulnerable Code (Pseudocode):
def validate_2fa(session, totp_token):
if '2fa_completed' in session:
return True # BUG: Allows bypass if session flag is set incorrectly
if totp_token is None or totp_token == '':
return True # BUG: Accepts empty token
expected = get_totp_for_user(session['user'])
if totp_token == expected:
session['2fa_completed'] = True
return True
return False
Patched Code (Pseudocode):
def validate_2fa(session, totp_token):
# Always require a valid token, never trust session flag alone
if totp_token is None or totp_token == '':
return False
expected = get_totp_for_user(session['user'])
if totp_token == expected:
session['2fa_completed'] = True
return True
return False
The patch removes the early return that checked a session flag and adds a strict check for empty/null tokens.
Exploitation & Lab Setup
Red Team (Offensive)
Prerequisites:
- Valid credentials for a user with 2FA enabled.
- Network access to the SMA web interface.
Exploitation Steps:
- Intercept the login request after password authentication using a proxy (e.g., Burp Suite).
- Observe the 2FA challenge request/response.
- Modify the request to omit the
totp_tokenparameter or set it to an empty string. - Forward the modified request.
- If successful, the server returns a session cookie granting full access.
Example cURL command:
# Step 1: Login with password (capture session cookie)
curl -c cookies.txt -b cookies.txt -X POST https://sma.example.com/login \
-d "username=admin&password=secret"
# Step 2: Attempt 2FA bypass by sending empty TOTP
curl -c cookies.txt -b cookies.txt -X POST https://sma.example.com/2fa/verify \
-d "totp_token="
Expected Outcome: The server returns a 200 OK with a valid session, bypassing 2FA.
Blue Team (Defensive)
Detection:
- Monitor for login attempts where the 2FA step is completed with an empty or null token.
- Alert on multiple failed 2FA attempts followed by a successful login with no token.
- Review web server logs for requests to
/2fa/verifywith missing or emptytotp_tokenparameter.
Hunting Query (Splunk):
index=web_logs source="/var/log/httpd/access_log"
| search "/2fa/verify" AND (totp_token= OR totp_token=null)
| stats count by src_ip, user, _time
| where count > 1
Mitigation Steps:
- Immediately apply the vendor patch.
- If patching is delayed, disable 2FA temporarily and enforce strong password policies.
- Monitor for anomalous authentication patterns.
Indicators of Compromise (IOCs)
Network IOCs:
- HTTP requests to
/2fa/verifywith missing or emptytotp_tokenparameter. - Successful login events without a corresponding 2FA verification event in logs.
Host IOCs:
- Web server logs showing
POST /2fa/verifywithtotp_token=(empty) ortotp_token=null. - Authentication logs showing
2FA_BYPASSor similar error codes (if logging is enabled).
Log Examples:
192.168.1.100 - - [01/Jan/2025:12:00:00 +0000] "POST /2fa/verify HTTP/1.1" 200 1234 "-" "Mozilla/5.0"
If the request body contains totp_token= (empty), this is suspicious.
Detection Engineering
YARA Rule
rule CVE_2025_32976_2FA_Bypass {
meta:
description = "Detects attempts to bypass TOTP 2FA in Quest KACE SMA"
author = "Valters IT"
date = "2025-04-10"
reference = "CVE-2025-32976"
hash = "d41d8cd98f00b204e9800998ecf8427e"
strings:
$s1 = "totp_token=" ascii wide nocase
$s2 = "totp_token=null" ascii wide nocase
$s3 = "/2fa/verify" ascii wide nocase
condition:
all of ($s1, $s3) or all of ($s2, $s3)
}
Sigma Rule
title: CVE-2025-32976 - Quest KACE SMA 2FA Bypass Attempt
id: 7a8b9c0d-1e2f-3a4b-5c6d-7e8f9a0b1c2d
status: experimental
description: Detects HTTP requests to /2fa/verify with empty or null totp_token parameter
author: Valters IT
date: 2025-04-10
references:
- https://nvd.nist.gov/vuln/detail/CVE-2025-32976
logsource:
category: webserver
product: apache
service: access_log
detection:
selection:
cs-method: 'POST'
cs-uri-stem: '/2fa/verify'
cs-uri-query|contains:
- 'totp_token='
- 'totp_token=null'
condition: selection
falsepositives:
- Legitimate users with empty TOTP tokens (unlikely)
level: high
tags:
- attack.initial_access
- attack.t1078
Suricata Rule
alert http $HOME_NET any -> $EXTERNAL_NET any (
msg:"CVE-2025-32976 Quest KACE SMA 2FA Bypass Attempt";
flow:to_server,established;
content:"POST"; http_method;
content:"/2fa/verify"; http_uri;
content:"totp_token="; http_client_body;
pcre:"/totp_token=(|null)/";
classtype:attempted-admin;
sid:1000001;
rev:1;
reference:cve,2025-32976;
priority:1;
)
Remediation & Mitigation
Immediate Actions:
- Patch: Upgrade to the following patched versions:
- SMA 13.0.385
- SMA 13.1.81
- SMA 13.2.183
- SMA 14.0.341 (Patch 5)
- SMA 14.1.101 (Patch 4)
- Workaround: If patching is not immediately possible, disable TOTP-based 2FA and rely on strong password policies and network segmentation.
- Monitor: Enable detailed logging for all authentication events and review logs for signs of exploitation.
Long-Term Measures:
- Implement additional security controls such as IP whitelisting for SMA access.
- Use a Web Application Firewall (WAF) to block requests with missing or empty TOTP tokens.
- Conduct a security audit of all authentication flows.
Vendor Contact: Quest Software support (https://support.quest.com).
Valters IT