mirror of
https://github.com/veracrypt/VeraCrypt.git
synced 2025-11-11 11:08:02 -06:00
Linux/FreeBSD: Prevent mounting volumes on system directories and PATH (CVE-2025-23021, reported by SivertPL @__tfr)
Added security checks to prevent mounting VeraCrypt volumes on system directories (like /usr/bin) or directories in the user's PATH, which could theoretically allow execution of malicious binaries instead of legitimate system binaries. Key changes: - Block mounting on protected system directories (/usr, /bin, /lib, etc.) This restriction cannot be overridden - Block mounting on directories present in user's PATH environment variable This can be overridden with --allow-insecure-mount flag - Add visual warnings (red border, "[INSECURE MODE]") when mounting on PATH directories is allowed - Handle symlinks properly when checking paths - Add new error messages for blocked mount points To override PATH-based restrictions only (system directories remain protected): veracrypt --allow-insecure-mount [options] volume mountpoint Security Impact: Low to Medium The attack requires either: - User explicitly choosing a system directory as mount point instead of using VeraCrypt's default mount points - Or attacker having both filesystem access to modify favorites configuration AND knowledge of the volume password Default mount points are not affected by this vulnerability. Security: CVE-2025-23021
This commit is contained in:
@@ -99,6 +99,11 @@ namespace VeraCrypt
|
||||
{
|
||||
shared_ptr <CoreServiceRequest> request = Serializable::DeserializeNew <CoreServiceRequest> (inputStream);
|
||||
|
||||
// Update Core properties based on the received request
|
||||
Core->SetUserEnvPATH (request->UserEnvPATH);
|
||||
Core->ForceUseDummySudoPassword(request->UseDummySudoPassword);
|
||||
Core->SetAllowInsecureMount(request->AllowInsecureMount);
|
||||
|
||||
try
|
||||
{
|
||||
// ExitRequest
|
||||
@@ -283,12 +288,17 @@ namespace VeraCrypt
|
||||
static Mutex mutex;
|
||||
ScopeLock lock (mutex);
|
||||
|
||||
// Copy Core properties to the request so that they can be transferred to the elevated process
|
||||
request.ApplicationExecutablePath = Core->GetApplicationExecutablePath();
|
||||
request.UserEnvPATH = Core->GetUserEnvPATH();
|
||||
request.UseDummySudoPassword = Core->GetUseDummySudoPassword();
|
||||
request.AllowInsecureMount = Core->GetAllowInsecureMount();
|
||||
|
||||
if (request.RequiresElevation())
|
||||
{
|
||||
request.ElevateUserPrivileges = true;
|
||||
request.FastElevation = !ElevatedServiceAvailable;
|
||||
request.ApplicationExecutablePath = Core->GetApplicationExecutablePath();
|
||||
|
||||
|
||||
while (!ElevatedServiceAvailable)
|
||||
{
|
||||
// Test if the user has an active "sudo" session.
|
||||
|
||||
Reference in New Issue
Block a user