最近我一直在处理一些恼人的攻击,在发现 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 可以做什么和不能做什么?
答案1
这让我想到,如果 Firefox 有权在我的计算机上任意启动 systemd 服务,它还能做什么?这是否让其他人觉得非常不安全?
嗯,首先,这与它是否具有启动服务的权限无关。
如果你以不受限制的方式运行 Firefox(即不是 Flatpak/Snap),那么它具有与你即它与你的终端应用程序或文件管理器一样具有特权。这意味着,一方面,它没有拥有比您更多的权限来启动系统服务 – 如果您需要成为 root(或通过“polkitd”获得批准)才能执行某项操作,那么 Firefox 也需要这样做。
另一方面,这意味着 Firefox 始终有权使用你的权限,以及运行任何可以使用您的权限的外部程序 - 它可以调用system("sudo reboot")
或删除您的整个主目录,而无需任何特殊操作。这或多或少是“正常的”;这就是桌面操作系统的典型工作方式。
(风险网页获得 Firefox 所拥有的权利在一定程度上受到 Firefox 具有以故意减少的权限运行的“内容”子进程的缓解 - 尽管据我所知它的隔离机制仍然不如 Chrome 和基于 Chromium 的浏览器那么广泛,但这是一个开始。)
话虽如此,我还是怀疑它是否明确启动了 wpa_supplicant 或任何其他服务。它所做的是向服务(最有可能是 Geoclue2 服务)发送 D-Bus 消息。仿佛服务正在运行;如果服务尚未运行,则 D-Bus 守护程序将为您启动它。
然后,Geoclue2 会尝试扫描附近的 Wi-Fi 网络以确定大致位置,并通过向 wpa_supplicant 服务发送另一条消息来实现这一点,D-Bus 也会以相同的方式“按需”启动该服务。(只有系统总线会启动系统服务;用户/会话总线会以您的身份运行并以您的身份启动服务。)举一个更直接的例子,每当您运行 时hostnamectl
,D-Bus 都会启动“主机名”服务,即使您没有权限systemctl start
。
因此,Firefox 拥有以下权限是不正确的:任意地启动 systemd 服务;它只能通过尝试与选择某种形式的“按需启动”的服务进行通信来启动它们(在本例中为 D-Bus 激活,在其他一些情况下为套接字激活)。