Firefox 在调用 navigator.geolocation 时有权限启动 wpa_supplicant

Firefox 在调用 navigator.geolocation 时有权限启动 wpa_supplicant

最近我一直在处理一些恼人的攻击,在发现 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 激活,在其他一些情况下为套接字激活)。

相关内容