在 WSL 上访问 Ubuntu 中的 root 是否太容易了?

Omm*_*mmm 3 security root username windows-subsystem-for-linux

我忘记了 WSL 中的 Ubuntu 用户密码,但我可以通过以下方式重置它:

  • 打开 CMD 外壳
  • wsl -u root,然后(在 Ubuntu 中),passwd my_username

我无需提供旧密码即可更改密码。它确实有效,但这不是安全漏洞吗?我实际上是 Linux/Unix 新手,所以我想到了这个问题......

Not*_*1ds 6

这是一个很好的问题 - 无论您是新手还是经验丰富,评估系统的安全性都是一项有价值的练习,恕我直言。

我个人多次思考过这个(以及这个问题的略微不同形式)特定问题,但我还没有找到可以利用此功能的明确攻击向量。

这里有几件事需要记住:

  • 您的 WSL 实例使用您的Windows用户的权限运行。

    即使您在 Ubuntu 中运行,您也无法对Windowsroot中的任何文件进行普通 Windows 用户无法进行的更改。例如:

    • 可以通过 WSL删除或修改文件/mnt/c/<your_Windows_user>/Documents(作为root普通用户)
    • 无法修改系统文件或可执行文件,例如/mnt/c/Windows/gdi32.dll,因为即使通过文件资源管理器也无法执行此操作,除非您在管理会话中运行(不要这样做!)。

    同样,这与普通 Windows 用户已经可以(和不能)执行的操作没有什么不同。


  • 您的 Windows 用户可以完全控制 WSL(以及任何其他发行版)中的 Ubuntu。

    这类似于虚拟机或任何容器技术的工作方式。由于您是运行 WSL 的Windows用户,因此您已经能够:

    • 在 WSL 中安装新的 Ubuntu 实例,设置用户名等。
    • 通过命令删除 Ubuntu 实例wsl --unregister(不要这样做!)
    • 拥有对虚拟驱动器 ( .vhdx) 的完全访问权限,可以将其复制到另一台计算机、检查它、修改它等。
    • root而且,正如您所发现的,通过运行为(无需密码)来更改用户的密码。

    因为您是运行 WSL 的 Windows 用户,所以您已经可以用它做任何您想做的事情。 WSL 根本没有理由要求您使用密码“登录”Ubuntu。

    即使在“纯 Ubuntu”中也存在其他类似的场景——运行 Docker 或 Podman(或其他)容器可以让您完全控制该容器。您可以在该容器内创建用户、创建或删除文件等。当您像在 Docker 内部一样启动 Ubuntu Docker 容器时,不需要密码root(等);就像在 WSL 上启动 Ubuntu 时不需要密码一样root


现实情况是,如果攻击者获得对您的系统的足够访问权限,以您的 Windows 用户身份运行任意代码,那么他们就已经“获胜”,无论他们是否能够访问在其中运行的 Ubuntu。在这种情况下,强制您使用密码在 WSL 中“登录”Ubuntu(无论是作为root用户还是其他用户)不会添加任何额外的防御措施。