Sudo权限提升漏洞

作者:Justin Ryan

Linux权限等级的一个重要优势在于它能够阻止不受信任的用户胡作非为。然而,root访问权限的完全控制特性,在用户受到信任但信任程度有限的情况下,可能会带来麻烦。sudo实用程序试图解决这个问题,并且做得相当好——除了偶尔出现的故障。

上周出现了一个这样的故障,允许权限较低的用户绕过sudo的保护并获得其他用户的权限,包括root的超级权限。sudo的 *sudoedit* 伪命令(sudo -e) 中的一个漏洞可能允许那些被授权使用该命令的用户执行任意命令。(用户可以被授予特定能力,例如 *sudoedit*,而无需被授予完整的sudo权限。)根据 sudo的安全公告

当sudo执行命令匹配时,sudoers文件中存在一个伪命令的特殊情况(目前,唯一的伪命令是sudoedit)。与常规命令不同,伪命令不以斜杠 ('/') 开头。缺陷在于,sudo的匹配代码只会检查用户指定的命令也未包含斜杠的伪命令列表。因此,如果用户运行 "sudo ./sudoedit",则将遵循常规匹配代码路径,该路径使用 stat(2) 来验证用户指定的命令是否与 sudoers 中的命令匹配。在这种情况下,它会将用户指定的 "./sudoedit" 与 sudoers 文件中的 "sudoedit" 进行比较,从而导致正匹配。

该公告指出,该漏洞的影响因实用程序的默认设置而减轻。利用该漏洞取决于在 /etc/sudoers 中启用了 *sudoedit* ——默认情况下未配置该伪命令,因此大多数安装都可以免受攻击。所有版本的sudo从 1.6.9 到 1.7.2p3(当时的稳定版本)都受到影响——版本 1.7.2p4(现已被 1.7.2p5 取代)和 1.6.9p21 修复了该漏洞。Mandriva、Red Hat 和 Ubuntu 已经将更新后的版本推送给用户。

有趣的是,sudo——由SUNY/Buffalo学生Cliff Spencer和Bob Coggshall创建——今年庆祝其三十周年。虽然它通常与像Ubuntu这样依赖sudo的发行版相关联(Ubuntu完全禁用了root帐户),但它最早出现在1980年,比Linux开发开始早了11年。该实用程序在其三十年中一直被重写,以至于没有留下任何原始代码。有关sudo及其开发的更多信息,请访问 sudo项目网站。

加载Disqus评论