安全性警示:Tar 權限
由 Natalie Weizenbaum 於 2022 年 12 月 10 日發布
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 root 使用者身分解壓縮它們的使用者。 -
在版本 1.54.5 之前,以 Unix root 使用者身分安裝
sass-embedded
npm 套件的使用者。 -
在版本 1.56.2 之前,以 Unix root 使用者身分安裝社群維護的
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 root 使用者身分解壓縮檔案,或明確傳遞 -p
/--preserve-permissions
旗標時,解壓縮檔案的權限會根據檔案的中繼資料設定。由於中繼資料不正確,存取權限較低的帳戶的攻擊者就能夠覆寫可執行檔案,並在執行後提升其權限。
這是如何發生的?這是如何發生的? 永久連結
Dart Sass 會自動部署到各種不同的發行平台,使用由 Sass 團隊編寫並維護的 Dart 套件 cli_pkg
。此套件使用 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 帳戶 上宣布此漏洞。