允许非 root 用户运行 apt-get 的潜在漏洞是什么?

信息安全 ubuntu 权限 须藤
2021-08-26 02:42:06

我可以想到两种方法:

  1. 在具有 的系统上sudo,通过修改/etc/sudoers.

  2. 在没有的系统sudo(例如 Docker 环境)上,通过编写类似于以下的程序并将 setuid 位设置为chmod u+s. apt-get检查真实的uid,因此需要setuid调用。

...
int main(int argc, char **argv) {
    char *envp[] = { ... };
    setuid(0);
    execve("/usr/bin/apt-get", argv, envp);
    return 1;
}

我有两个问题:

  1. 允许非 root 用户运行的潜在漏洞是什么apt-get
  2. 我的目标是允许人们安装/删除/更新软件包,因为它们apt-get存在于自定义的非系统 refroot 中并从自定义策划的 apt 存储库安装。有没有更安全的方法可以让非 root 用户apt-get在没有sudo.
4个回答
apt-get update -o APT::Update::Pre-Invoke::=/bin/sh

来自GTFOBins

这为您提供了系统上的 root shell。没有创建包和添加假回购;这将使运行此命令的用户轻松简单地访问 root。

因此,在回答您的问题时,您实际上是在为每个有权访问此二进制文件的用户授予 root 权限。如果您愿意这样做,那么您不妨只给他们 sudo 访问权限或 root 密码。

您说您正在使用“自定义策划的 apt 存储库”,但没有办法强制执行。任何可以调用的用户都apt可以指定自己的源列表,例如apt install root-backdoor -o Dir::Etc::Sourcelist=~/apt/my-own-sources.list. 这也适用于所有其他配置设置,这意味着您还可以使用您选择的内容覆盖任意文件(例如,通过为检索到的包设置缓存目录)。

包可以(并且经常)在安装过程中执行任意命令。由于攻击者可以控制源列表,他们可以创建恶意程序包,为非特权用户提供特权后门,或者简单地(以 root 身份)执行攻击者希望作为“安装”过程的一部分的任何命令。

apt 如果您想阻止他们以 root 权限运行任意代码,那么绝对不是一个让人们运行(以 root 权限)的安全程序。

编辑:我想提请注意这个答案,因为它是一种更简洁的方式,可以从apt.

阻止用户指定他们自己的源列表(例如,通过制作一个专门apt-get install -- <packages>使用 root 权限调用的包装器)是否足以阻止用户安装任意包(从而阻止以 root 身份执行任意代码)?

不,apt-get也可以从路径中提取包裹。攻击者可以创建一个恶意.deb软件包,/etc/<something>在安装时通过例如apt-get install -- /path/to/foo.deb.

如果您的自定义包装脚本仅接受包名称白名单中的内容,并且您可以保证包仅从您的源列表中获取 - 并且永远不能通过自定义配置、环境提供,那么您可能能够使其安全地工作变量等

  1. 允许非 root 用户运行 apt-get 的潜在漏洞是什么?

完整的系统妥协;从允许运行 apt-get 到 root 的用户的持久权限升级。

  1. 我的目标是允许人们安装/删除/更新软件包,因为 apt-get 存在于自定义的非系统 refroot 中并从自定义策划的 apt 存储库安装。是否有更安全的方法可以让非 root 用户在没有 sudo 的系统上运行 apt-get?

正如这里所解释的,你不能保证这一点。