安全警报:Tar 权限
发布于 2022 年 12 月 10 日,作者 Natalie Weizenbaum
Sass 团队最近收到了来自外部贡献者 @ntkme 的安全问题提醒,该问题存在于我们的发布 流程中。
TL;DRTL;DR 链接
如果您使用的是 Linux 或 Mac OS,请运行 ls -ax path/to/sass
。如果第一列的最后一个字母组包含 w
,则您存在漏洞。
Vulnerable:
-rwxr-xrwx 1 nweiz primarygroup 407 Dec 13 12:33 sass-1.56.2/sass
Not vulnerable:
-rwxr-xr-x 1 nweiz primarygroup 407 Dec 13 12:33 sass-1.56.2/sass
如果您使用的是 sass-embedded
包,请对 node_modules/sass-embedded/dist/lib/src/vendor/dart-sass-embedded/dart-sass-embedded
执行相同的操作。
受影响的用户?受影响的用户? 链接
虽然我们预计此问题不会影响大多数用户,但它确实会影响以下 群体
-
从 Dart Sass 网站下载独立的 Dart Sass、Dart Sass Embedded 或 Sass Migrator
.tar.gz
存档并以 Unix 根 用户身份解压缩的用户。 -
在 1.54.5 版本之前以 Unix 根用户身份安装
sass-embedded
npm 包的用户。 -
在 1.56.2 版本之前以 Unix 根用户身份安装社区维护的
sass-embedded
RubyGems 包的“非原生”版本的的用户。 -
在多用户系统上从 Dart Sass 网站下载独立的 Dart Sass、Dart Sass Embedded 或 Sass Migrator
.tar.gz
存档,并在解压缩 时显式传递-p
/--preserve-permissions
标志的用户。
通过 sass
npm 包、Homebrew 或 Chocolatey 安装 Dart Sass 的用户绝对没有风险,Windows 用户也不存在风险。
我们强烈建议这些易受攻击的群体删除并重新安装 Sass。GitHub 上的所有 .tar.gz
文件已清除,以消除漏洞,因此您可以重新安装以前使用的相同版本,而无需升级到最新 版本。
这是一个提权问题,这意味着它可能允许假设的攻击者访问您计算机上的低权限帐户,并将其访问权限升级到您帐户的权限。但是,这也意味着,除非攻击者已经访问了您机器上的帐户,否则它不会构成风险。
出了什么问题?出了什么问题? 链接
我们无意中上传了带有权限元数据的 .tar.gz
存档,这些元数据表明可执行文件可以被所有用户覆盖,而不仅仅是 所有者。
在大多数情况下,此元数据在解压缩存档时会被忽略,并且权限被设置为仅可由执行解压缩操作的用户写入。但是,当以 Unix 根用户身份解压缩存档或显式传递 -p
/--preserve-permissions
标志时,解压缩文件的权限会根据存档的元数据进行设置。由于元数据不正确,具有低权限帐户访问权限的攻击者将能够覆盖可执行文件,并在执行 后提升其权限。
这是怎么发生的?这是怎么发生的? 链接
Dart Sass 使用名为 cli_pkg
的 Dart 包自动部署到各种不同的发布平台,该包也是由 Sass 团队编写和维护的。此包使用 Dart archive
包为独立的发布包生成 .tar.gz
文件,这些文件随后被上传到 GitHub,并且在我最初编写使用此包的代码时,我编写了以下 函数
ArchiveFile fileFromBytes(String path, List<int> data,
{bool executable = false}) =>
ArchiveFile(path, data.length, data)
..mode = executable ? 495 : 428
..lastModTime = DateTime.now().millisecondsSinceEpoch ~/ 1000;
我的意图是将可执行模式设置为 755
(对于所有者可读/可写/可执行,对于其他用户仅可读/可执行),并将不可执行模式设置为 644
(对于所有者可读/可写,对于其他用户仅可读)。但是,Dart 不支持字面八进制数,我一定是将十进制转换为八进制的转换弄错了。实际设置的权限为 757
(对于所有者和其他用户可读/可写/可执行,对于组可读/可执行)和 654
(对于所有者可读/可写,对于组可读/可执行,对于其他 用户仅可读)。
这种情况持续了几年才被发现,直到上周 @ntkme 通知了我们这个问题并为 cli_pkg
提供了修复程序。
做了什么?做了什么? 链接
我们发布了 cli_pkg
2.1.7,它会正确设置存档权限。此外,我们更新了 Dart Sass、Dart Sass Embedded 和 Sass Migrator 存储库中的所有 .tar.gz
文件,以正确地将写入权限限制为文件的唯一所有者。我们将在 @SassCSS Twitter 帐户 上发布此漏洞信息。