blob: 9ef55356a6a9d5b2c5953caab042e2136acf6114 [file] [log] [blame]
// Copyright 2025 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/updater/ipc/ipc_security.h"
#include "chrome/updater/updater_scope.h"
#include "components/named_mojo_ipc_server/connection_info.h"
#include "components/named_mojo_ipc_server/endpoint_options.h"
#include "mojo/public/cpp/platform/named_platform_channel.h"
namespace updater {
bool IsConnectionTrusted(
const named_mojo_ipc_server::ConnectionInfo& connector) {
// IPC callers on Windows are authenticated via the DACL applied to the stub's
// named pipe (see `CreateServerEndpointOptions` below).
// TODO(crbug.com/456542123): Set to `true` for system after the client proxy
// allows impersonation and the server stub gates method calls based on the
// client's integrity levels.
return !IsSystemInstall();
}
named_mojo_ipc_server::EndpointOptions CreateServerEndpointOptions(
const mojo::NamedPlatformChannel::ServerName& server_name) {
named_mojo_ipc_server::EndpointOptions options{
server_name,
named_mojo_ipc_server::EndpointOptions::kUseIsolatedConnection};
if (IsSystemInstall()) {
// A DACL to grant:
// GA = Generic All
// access to:
// SY = LOCAL_SYSTEM
// BA = BUILTIN_ADMINISTRATORS
// GR = Generic Read
// GW = Generic Write
// access to:
// AU = AUTHENTICATED_USERS
options.security_descriptor = L"D:(A;;GA;;;SY)(A;;GA;;;BA)(A;;GRGW;;;AU)";
}
return options;
}
} // namespace updater