萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 作業系統 >  >> macOS 教學

macOS 手動升級 Bash 修補 Shellshock 漏洞:完整編譯替換指南 (含 Xcode 準備)

針對 macOS 內建 Bash 3.2.51 受 Shellshock (CVE-2014-6271, CVE-2014-7169) 影響,蘋果遲未推出官方修補時,可手動從原始碼編譯 Bash 3.2.53 替換系統二進位檔。完整流程含 Xcode 準備、三階段打補丁編譯、備份替換、驗證。

Bash 版本檢查

前置作業:安裝 Xcode 命令列工具

  1. Mac App Store 安裝 Xcode (舊版 macOS 可去開發者中心下載對應版本,如 10.7/10.8 用 Xcode 4.6.3)。
  2. 啟動 Xcode 同意授權條款。
  3. Xcode → Preferences → Locations → Command Line Tools 選擇最新版 → 安裝。若選單無此項表示已安裝。

編譯流程 (三階段)

階段 1:基礎原始碼 + 補丁 052

mkdir bash-fix && cd bash-fix
curl https://opensource.apple.com/tarballs/bash/bash-92.tar.gz | tar zxf -
cd bash-92/bash-3.2
curl https://ftp.gnu.org/pub/gnu/bash/bash-3.2-patches/bash32-052 | patch -p0
cd ../..
xcodebuild

等待輸出 BUILD SUCCEEDED。

階段 2:補丁 053 (針對 CVE-2014-7169)


mv build/bash.build/Release/bash.build/DerivedSources/y.tab.* bash-3.2/
cd bash-3.2
curl https://ftp.gnu.org/pub/gnu/bash/bash-3.2-patches/bash32-053 | patch -p0
cd ..
xcodebuild

再次等待 BUILD SUCCEEDED。

階段 3:備份舊版、確認新版、替換系統檔


# 備份 (需輸入密碼,無回顯)
sudo cp /bin/bash /bin/bash.old
sudo cp /bin/sh /bin/sh.old

# 確認新編譯版本
build/Release/bash --version
build/Release/sh --version
# 應顯示 GNU bash, version 3.2.53(1)-release

# 替換系統 Bash
sudo cp build/Release/bash /bin/bash
sudo cp build/Release/sh /bin/sh

驗證修補成果


# 測試一
env x='() { :;}; echo vulnerable' bash -c "echo this is a test"
# 應顯示 warning... this is a test (無 vulnerable)

# 測試二
env X='() { (a)=>\' bash -c "echo date"; cat echo; rm -f echo
# 應無日期輸出,顯示 cat: echo: No such file or directory

編譯成功畫面

重要提醒

  • 僅修補 **Bash 3.2 分支** (macOS 專用),其他版本 (4.x, 5.x) 不適用。
  • 操作涉及系統核心二進位檔替換,**風險自負**,建議先在測試機驗證。
  • 現代 macOS (10.11 El Capitan 起) 已透過官方安全更新修補,**強烈建議直接套用系統更新**,無需手動編譯。
  • Red Hat 提供的替代修補方案未經完整測試,不建議使用。

此指南為歷史技術文獻保留,展示 macOS 核心組件手動修補的完整鏈路。

copyright © 萬盛學電腦網 all rights reserved