这UNIX 和 Linux 系统管理手册说:
如果相应的目录可写,则 man 在 /var/cache/man 或 /usr/share/man 中维护格式化页面的缓存;然而,这是一个安全风险。大多数系统在安装时预先格式化手册页(请参阅 catman)或根本不预先格式化。
这里的“安全风险”是什么?
正如所指出的,存在明显的安全风险,即有人可以更改手册页来欺骗(新手)用户运行不需要的东西乌尔里希·施瓦茨 (Ulrich Schwartz) 的回答,但我正在寻找其他可以利用这一点的方法。谢谢!
答案1
让用户操纵也将被其他用户使用的手册页内容(或实际上的任何数据)是不安全的,因为存在以下危险:缓存中毒。正如 BOFH 的老笑话所说:
要从头开始了解有关系统的所有信息,请使用“阅读手册”命令和“阅读更快”开关,如下所示:
rm -rf /
(要明确的是,不要运行此命令。)但如果我控制手册页缓存,您可能会键入man rm
查看缓存的假手册页,它告诉您rm
确实是“rm - 阅读手册”而不是“rm - 删除文件或目录”。甚至将代码注入 shell 的输出终端转义序列。
答案2
假设所讨论的系统是一个 Web 服务器。我们还假设服务器管理员通过网页向公众(或公司内部网)提供系统上安装的某些软件。它可以像图像缩放器、计算器或字典一样简单。
如果软件在安装时有与之关联的手册页,那么管理员(他们是善良且体贴的人)可能会决定将这些手册页提供给 Web 服务的用户也是一个好主意。
因此,网页上的“帮助”图标会启动一个脚本来获取一个或多个 -缓存的— 手册页并将其发送到用户的浏览器。
对缓存目录具有写入权限的任何人或代码都可以将这些文件修改为:
- 注入将通过访问用户浏览器执行的任意 Javascript
- 从所有访问用户收集遥测数据并将其转发到某个存储库以供以后处理/分析
- 收集身份验证凭据 - 甚至可能是系统特权用户(如管理员)的凭据
任何具有想象力和道德/伦理松散的人都可能以许多不同的方式滥用上述每一种。
答案3
每当目录被设置为全局可写时,就会产生安全漏洞。忽略目录的预期目的是什么以及如何破坏它,仅仅使其可写是一个问题。
以下是一些与目录功能无关的可能问题:
- 如果文件系统上没有其他目录可供用户写入,这将为任何用户提供一种使用该文件系统上他们无法使用的空间的方法
- 任何用户都可以在该目录中保存文件,从而填满文件系统以导致拒绝服务攻击。如果这是与 /var/log 相同的文件系统,则可能会阻止写入日志
- 文件可能隐藏在此目录中,超出预期位置。这些可能在帐户删除后仍然存在,如果文件系统被神秘地填满,可能很难找到
- 如果创建的文件或目录与将来的缓存文件同名,则可能会妨碍该目录的预期用途的正确运行(即使这些文件的内容本身不是恶意的)。调整这些文件的权限可能会使自动修复变得更加困难。
答案4
当安装适当的软件包时,大多数现代发行版都会预先缓存手册页(通过使用 troff 进行处理)。这不是问题。
当原始 man 文件存在但缓存为空(即缓存文件不是预先生成的)时,就会出现问题。
有两种方法可以解决这个问题:
- 通过 troff 运行手册页每一次作为用户
- 通过 troff 运行一次手册页:根并保存到缓存目录
要以 root 身份运行,需要 setuid。如果存在任何安全漏洞任何事物例如命令行解析,攻击者可以获得提升的权限
这是相关来源:https://git.savannah.gnu.org/cgit/man-db.git/tree/src/man.c
幸运的是,所有主要发行版现在都预先缓存了手册页,因此不必担心