安全警報: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-embeddednpm 包的使用者。 -
在 1.56.2 版本之前以 Unix 根使用者身份安裝社群維護的
sass-embeddedRubyGems 包的“非原生”版本的的使用者。 -
在多使用者系統上從 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 帳戶 上釋出此漏洞資訊。