Index: remoting/host/win/unprivileged_process_delegate.cc |
diff --git a/remoting/host/win/unprivileged_process_delegate.cc b/remoting/host/win/unprivileged_process_delegate.cc |
index cf538d392a123615cadb3816225ae1b498b285aa..9a7f2ab0ff7780d58308d3c88e0d6f73e1b2243e 100644 |
--- a/remoting/host/win/unprivileged_process_delegate.cc |
+++ b/remoting/host/win/unprivileged_process_delegate.cc |
@@ -22,7 +22,6 @@ |
#include "base/strings/utf_string_conversions.h" |
#include "base/synchronization/lock.h" |
#include "base/win/scoped_handle.h" |
-#include "base/win/windows_version.h" |
#include "ipc/attachment_broker.h" |
#include "ipc/ipc_channel.h" |
#include "ipc/ipc_channel_proxy.h" |
@@ -92,34 +91,23 @@ bool CreateRestrictedToken(ScopedHandle* token_out) { |
if (restricted_token.Init(token.Get()) != ERROR_SUCCESS) |
return false; |
- if (base::win::GetVersion() >= base::win::VERSION_VISTA) { |
- // "SeChangeNotifyPrivilege" is needed to access the machine certificate |
- // (including its private key) in the "Local Machine" cert store. This is |
- // needed for HTTPS client third-party authentication . But the presence of |
- // "SeChangeNotifyPrivilege" also allows it to open and manipulate objects |
- // owned by the same user. This risk is only mitigated by setting the |
- // process integrity level to Low, which is why it is unsafe to enable |
- // "SeChangeNotifyPrivilege" on Windows XP where we don't have process |
- // integrity to protect us. |
- std::vector<base::string16> exceptions; |
- exceptions.push_back(base::string16(L"SeChangeNotifyPrivilege")); |
- |
- // Remove privileges in the token. |
- if (restricted_token.DeleteAllPrivileges(&exceptions) != ERROR_SUCCESS) |
- return false; |
- |
- // Set low integrity level if supported by the OS. |
- if (restricted_token.SetIntegrityLevel(sandbox::INTEGRITY_LEVEL_LOW) |
- != ERROR_SUCCESS) { |
- return false; |
- } |
- } else { |
- // Remove all privileges in the token. |
- // Since "SeChangeNotifyPrivilege" is among the privileges being removed, |
- // the network process won't be able to acquire certificates from the local |
- // machine store. This means third-party authentication won't work. |
- if (restricted_token.DeleteAllPrivileges(nullptr) != ERROR_SUCCESS) |
- return false; |
+ // "SeChangeNotifyPrivilege" is needed to access the machine certificate |
+ // (including its private key) in the "Local Machine" cert store. This is |
+ // needed for HTTPS client third-party authentication . But the presence of |
+ // "SeChangeNotifyPrivilege" also allows it to open and manipulate objects |
+ // owned by the same user. This risk is only mitigated by setting the |
+ // process integrity level to Low. |
+ std::vector<base::string16> exceptions; |
+ exceptions.push_back(base::string16(L"SeChangeNotifyPrivilege")); |
+ |
+ // Remove privileges in the token. |
+ if (restricted_token.DeleteAllPrivileges(&exceptions) != ERROR_SUCCESS) |
+ return false; |
+ |
+ // Set low integrity level. |
+ if (restricted_token.SetIntegrityLevel(sandbox::INTEGRITY_LEVEL_LOW) != |
+ ERROR_SUCCESS) { |
+ return false; |
} |
// Return the resulting token. |
@@ -145,17 +133,12 @@ bool CreateWindowStationAndDesktop(ScopedSid logon_sid, |
// Format the security descriptors in SDDL form. |
std::string desktop_sddl = |
- base::StringPrintf(kDesktopSdFormat, logon_sid_string.c_str()); |
+ base::StringPrintf(kDesktopSdFormat, logon_sid_string.c_str()) + |
+ kLowIntegrityMandatoryLabel; |
std::string window_station_sddl = |
base::StringPrintf(kWindowStationSdFormat, logon_sid_string.c_str(), |
- logon_sid_string.c_str()); |
- |
- // The worker runs at low integrity level. Make sure it will be able to attach |
- // to the window station and desktop. |
- if (base::win::GetVersion() >= base::win::VERSION_VISTA) { |
- desktop_sddl += kLowIntegrityMandatoryLabel; |
- window_station_sddl += kLowIntegrityMandatoryLabel; |
- } |
+ logon_sid_string.c_str()) + |
+ kLowIntegrityMandatoryLabel; |
// Create the desktop and window station security descriptors. |
ScopedSd desktop_sd = ConvertSddlToSd(desktop_sddl); |
@@ -177,9 +160,7 @@ bool CreateWindowStationAndDesktop(ScopedSid logon_sid, |
// Make sure that a new window station will be created instead of opening |
// an existing one. |
- DWORD window_station_flags = 0; |
- if (base::win::GetVersion() >= base::win::VERSION_VISTA) |
- window_station_flags = CWF_CREATE_ONLY; |
+ DWORD window_station_flags = CWF_CREATE_ONLY; |
// Request full access because this handle will be inherited by the worker |
// process which needs full access in order to attach to the window station. |