我最近一直在处理一些烦人的攻击,并且在发现 wpa_supplicant.service 运行后变得非常偏执,因为它绝对不应该在这台特定的机器上运行。经过一番挖掘,我发现这段代码可以启动 wpa_supplicant.service:
// Check if geolocation is supported by the browser
if ("geolocation" in navigator) {
// Prompt user for permission to access their location
navigator.geolocation.getCurrentPosition(
// Success callback function
(position) => {
// Get the user's latitude and longitude coordinates
const lat = position.coords.latitude;
const lng = position.coords.longitude;
// Do something with the location data, e.g. display on a map
console.log(`Latitude: ${lat}, longitude: ${lng}`);
},
// Error callback function
(error) => {
// Handle errors, e.g. user denied location sharing permissions
console.error("Error getting user location:", error);
}
);
} else {
// Geolocation is not supported by the browser
console.error("Geolocation is not supported by this browser.");
}
这让我想到,如果 Firefox 有权限在我的机器上任意启动 systemd 服务,它还能做什么?这是否会让其他人感到极度缺乏安全感?有没有关于如何更好地锁定此问题的好资源?在哪里可以看到 Firefox 可以做什么和不能做什么?
嗯,首先,这并不是说它拥有启动服务的权限。
如果您不受限制地运行 Firefox(即不是作为 Flatpak/Snap),那么它具有与您相同的所有权限;即它与您的终端应用程序或文件管理器一样享有特权。这意味着,一方面,它没有比您更多的权限来启动系统服务 – 如果您需要成为 root(或通过“polkitd”获得批准)才能执行某些操作,那么 Firefox 也需要这样做。
另一方面,这意味着 Firefox 始终有权使用您的权限打开任何文件,以及运行任何使用您的权限的外部程序 – 它可以调用
system("sudo reboot")
或删除您的整个主目录,而无需有什么特别的。这或多或少是“正常”的;这就是桌面操作系统通常的工作方式。(网页获得 Firefox 拥有的权利的风险在一定程度上通过 Firefox 的“内容”子进程来降低,这些子进程以故意减少的权限运行——尽管据我所知,它的隔离机制仍然没有 Chrome 和基于 Chromium 的浏览器那么广泛做,但这只是一个开始。)
话虽如此,我相当怀疑它是否显式启动了 wpa_supplicant 或任何其他服务。它的作用是将 D-Bus 消息发送到服务(很可能是 Geoclue2 服务),就好像该服务正在运行一样;如果该服务尚未运行,则 D-Bus 守护进程会为您启动它。
然后,Geoclue2 尝试扫描附近的 Wi-Fi 网络以确定大致位置,并通过向 wpa_supplicant 服务发送另一条消息来实现此目的,D-Bus 也以相同的方式“按需”启动。(只有系统总线启动系统服务;用户/会话总线像您一样运行并像您一样启动服务。)作为一个更直接的示例,每当您运行 时,
hostnamectl
D-Bus 都会导致“主机命名”服务启动,即使您这样做了没有权限systemctl start
。所以说Firefox有不寻常的权限可以任意启动systemd服务是不正确的;它只能通过尝试与选择某种形式的“按需启动”的服务进行对话来启动它们(在本例中为 D-Bus 激活,在其他一些情况下为套接字激活)。