Trạng thái
Apple đã phát hành bản sửa lỗi bảo mật Bash cho Shellshock và các lỗ hổng liên quan là " OS X bash Update 1.0 ". Chúng có thể được cài đặt thông qua cập nhật hệ thống bình thường cho những người sử dụng OS X Mountain Lion v10.8.5 hoặc OS X Mavericks v10.9.5 (chúng được bao gồm trong Cập nhật bảo mật 2014-005 ) và cũng có thể được cài đặt thủ công. Các bản sửa lỗi chính thức của Apple cũng có sẵn cho OS X Lion v10.7.5 và OS X Lion Server v10.7.5 nhưng chúng chỉ có sẵn thông qua tải xuống thủ công. Các bản sửa lỗi bảo mật có sẵn thông qua các URL khác nhau dựa trên phiên bản hệ điều hành:
(Nếu bản vá mới được phát hành, hãy đặt chúng ở đây nhưng vui lòng giữ lại những bản vá hiện có để tham khảo.)
Bản vá của Apple chăm sóc Shellshock và một số lỗ hổng khác và tốt cho hầu hết mọi người. tl; dr mọi người có thể dừng đọc ở đây.
TUY NHIÊN, sự chú ý bị bash bởi lỗi Shellshock đã khiến nhiều nhà nghiên cứu khó tính với bash và ngày càng có nhiều lỗ hổng (khó khai thác) được tìm thấy. Nếu bạn rất quan tâm về bảo mật (vì có thể bạn đang chạy OS X Server để lưu trữ một trang web có sẵn công khai) thì bạn có thể muốn (cố gắng) theo kịp các lỗ hổng và các bản vá khi chúng tiếp tục phát triển bằng cách tự biên dịch bash. Nếu không, đừng lo lắng về nó.
Hãy tìm Apple để phát hành một bản cập nhật khác để bash một thời gian trong tương lai khi bụi quyết định tìm kiếm các lỗ hổng tiếp theo.
Một bộ bản vá bash chính thức cho bash 3.2, bản vá 52, 53 và 54 (tương ứng với bản vá Bash 4.3 25, 26 và 27) có sẵn để sửa cả CVE-2014-6271 và CVE-2014-7169, cũng như 'Trò chơi kết thúc' được hiển thị bên dưới. Điều này đã được tôi kiểm tra ( @alblue ) và bài đăng đã được cập nhật tương ứng (và sau đó cập nhật bổ sung đã được thực hiện: xem bản sửa đổi 41 cho bài đăng dừng ở bản vá 54).
Nhiều lỗ hổng bổ sung đã được báo cáo chống lại bash. Theo bài đăng của Michal Zalewski nếu bạn có bản vá 54 (và có lẽ là bản vá chính thức của Apple) "không có gì phải ám ảnh về tình trạng của các lỗi riêng lẻ này, vì chúng không còn gây ra rủi ro bảo mật:"
CVE-2014-6271 - RCE gốc được tìm thấy bởi Stephane. Đã sửa bởi bash43-025 và các mục nhập ngày 24 tháng 9 tương ứng cho các phiên bản khác.
CVE-2014-7169 - lỗi tạo tệp / tiêu thụ mã thông báo được tìm thấy bởi Tavis. Đã sửa bởi bash43-026 & co (ngày 26 tháng 9)
CVE-2014-7186 - một vụ tai nạn 10+ có lẽ không có rủi ro nào được tìm thấy bởi Florian và Todd. Đã sửa bởi bash43-028 & co (ngày 1 tháng 10).
CVE-2014-7187 - một chiếc máy bay không đụng hàng, có lẽ không có rủi ro nào được tìm thấy bởi Florian. Đã sửa bởi bash43-028 & co (ngày 1 tháng 10).
CVE-2014-6277 - vấn đề bộ nhớ chưa được khởi tạo, gần như chắc chắn RCE được tìm thấy bởi Michal Zalewski. Không có bản vá cụ thể nào.
CVE-2014-6278 - RCE tiêm lệnh được tìm thấy bởi Michal Zalewski. Không có bản vá cụ thể nào.
Nó khá khó hiểu. May mắn thay, Chet Ramey, người duy trì bash chính thức, đã đăng một CVE để vá bản đồ . Bài đăng của anh ấy đề cập đến các bản vá cho bash 4.3, tôi (@OldPro) đã dịch chúng thành các bản vá cho bash 3.2, đó là những gì có thể áp dụng cho OS X. Ngoài ra, vì bài đăng này anh ấy đã phát hành bản vá 57, vì vậy tôi đã thêm vào bên dưới:
bash32-052 CVE-2014-6271 2014-09-24
bash32-053 CVE-2014-7169 2014-09-26
bash32-054 exported function namespace change 2014-09-27 ("Game Over")
bash32-055 CVE-2014-7186/CVE-2014-7187 2014-10-01
bash32-056 CVE-2014-6277 2014-10-02
bash32-057 CVE-2014-6278 2014-10-05
Xem bài đăng của David A. Wheeler để biết dòng thời gian và chi tiết hơn.
@alblue đã đăng hướng dẫn xây dựng thông qua bản vá 55. Tôi (@OldPro) đã thêm bản vá 56 và 57 vào hướng dẫn nhưng chưa thử nghiệm.
Kiểm tra tính dễ bị tổn thương ban đầu
Bạn có thể xác định xem bạn có dễ bị ảnh hưởng bởi vấn đề ban đầu trong CVE-2014-6271 hay không bằng cách thực hiện kiểm tra này:
$ env x='() { :;}; echo vulnerable' bash -c 'echo hello'
bash: warning: x: ignoring function definition attempt
bash: error importing function definition for `x'
hello
Kết quả trên là một ví dụ về một tổ chức phi dễ bị tổn thương bash
phiên bản. Nếu bạn thấy từ vulnerable
trong đầu ra của lệnh đó thì bạn bash
dễ bị tổn thương và bạn nên cập nhật. Dưới đây là phiên bản dễ bị tấn công từ OS X 10.8.5:
Kiểm tra lỗ hổng mới
Đã có một bản cập nhật cho bài viết gốc và Bash 3.2.52 (1) vẫn dễ bị tổn thương trước một biến thể của lỗ hổng, được xác định trong CVE-2014-7169
$ rm -f echo
$ env X='() { (a)=>\' sh -c "echo date"; cat echo
sh: X: line 1: syntax error near unexpected token `='
sh: X: line 1: `'
sh: error importing function definition for `X'
Thu 25 Sep 2014 08:50:18 BST
Đầu ra trên là một ví dụ về bash
phiên bản dễ bị tấn công . Nếu bạn thấy một ngày trong đầu ra của lệnh đó, bạn bash
có thể bị tổn thương.
Vô hiệu hóa các chức năng tự động nhập để ngăn "Trò chơi kết thúc"
Các nhà nghiên cứu lưu ý, mà không phân loại nó là một lỗ hổng, rằng một tập lệnh có thể chiếm quyền điều khiển một chức năng trong một lớp con bằng cách sử dụng các chức năng tự động nhập:
$ env ls="() { echo 'Game Over'; }" bash -c ls
Game over
Đoạn mã trên trên một hệ thống bị ảnh hưởng sẽ hiển thị Game Over
thay vì danh sách thư mục mà bạn mong đợi ls
. Rõ ràng, echo 'Game Over'
có thể được thay thế bằng bất kỳ mã bất chính nào bạn muốn. Điều này được biết đến như là lỗi "Game Over".
Trước khi có bản vá 54, cả hai chức năng bash tự động nhập NetBSD và FreeBSD đều bị vô hiệu hóa, một phần để ngăn "Game Over" nhưng chủ yếu để chứa bất kỳ lỗi nào trong trình phân tích cú pháp (như CVE-2014-7169 ) như chúng tiếp tục được phát hiện và thêm một cờ dòng lệnh mới--import-functions
để kích hoạt lại hành vi mặc định cũ. Tôi (@alblue) đã chuẩn bị một bản vá (so với 3.2.53) để người khác sử dụng nếu họ cũng muốn áp dụng hành vi này và đã bao gồm nó dưới đây. Theo mặc định, bản vá này không được kích hoạt trong tập lệnh xây dựng bên dưới. Tôi (@OldPro) tin rằng bản vá này không còn cần thiết hoặc là một ý tưởng hay, bởi vì nó phá vỡ tính tương thích ngược và các lỗ hổng mà nó bảo vệ chống lại được giải quyết rất tốt bằng các bản vá 54 và các bản vá trước đó và cho phép bản vá không chính thức này ngăn chặn các bản vá trong tương lai .
(Lưu ý đối với người chỉnh sửa câu hỏi; vui lòng không bật tính năng này theo mặc định, vì đây là bản vá không chính thức.)
a0c5c4d66742fddd0a35001cb91798a5fbf8a2f5 import_fifts.patch
Bản vá có thể được kích hoạt bằng cách chạy export ADD_IMPORT_FUNCTIONS_PATCH=YES
trước khi chạy bản dựng. Lưu ý rằng việc kích hoạt bản vá này sẽ vô hiệu hóa bản vá 54 và mọi bản vá trong tương lai vì các bản vá trong tương lai có thể được đảm bảo tương thích với bản vá không chính thức.
Apple Patch có lỗ hổng Game Over, loại
Như được chỉ ra bởi @ake___ trên twitter , bản vá chính thức của Apple vẫn dễ bị ảnh hưởng bởi môi trường thực thi:
$ env '__BASH_FUNC<ls>()'="() { echo Game Over; }" bash -c ls
Game Over
Người dùng nên tự quyết định tầm quan trọng của việc này. Tôi (@OldPro) nghĩ rằng không có gì phải lo lắng vì không có khai thác cho hành vi này (nó thậm chí không được cung cấp định danh CVE) vì nói chung, những kẻ tấn công từ xa không có đặc quyền không thể đặt tên của biến môi trường và kẻ tấn công có đặc quyền sử dụng điều này để đạt được các đặc quyền mà họ chưa có (ít nhất là không khai thác một lỗ hổng bổ sung).
Để cung cấp một chút nền tảng, bash cho phép bạn xác định các hàm và hơn nữa cho phép bạn xuất các hàm đó sang các lớp con thông qua export -f
lệnh. Điều này được sử dụng để thực hiện bằng cách tạo một biến môi trường có cùng tên với hàm với giá trị được đặt thành định nghĩa hàm. Vì thế
$ ls () { echo 'Game Over'; }
$ export -f ls
$ echo $ls
Game Over
Điều này xảy ra bởi vì export -f ls
đã tạo ra một biến môi trường có tên ls
. Lỗ hổng "Game Over" là bạn có thể trực tiếp tạo biến môi trường này mà không cần phải xác định hàm trước, điều đó có nghĩa là nếu bạn có thể nhập đúng tên biến bạn có thể chiếm quyền điều khiển. Apple đã cố gắng khắc phục điều này bằng cách khó tạo ra một biến có đúng tên. Bản vá bash 54 chính thức thực sự không thể tạo một biến có tên đúng bằng cách sử dụng các tên biến bao gồm %
một ký tự không được phép trong một tên biến, đưa các định nghĩa hàm xuất khẩu vào một không gian tên dành riêng khác nhau.
Nếu không có điều nào ở trên có ý nghĩa với bạn, đừng lo lắng về điều đó. Bây giờ bạn vẫn ổn với bản vá Apple.
Hệ thống nhị phân
OS X 10.9.5 (bản phát hành ổn định mới nhất tại thời điểm hiện tại) được phát hành với Bash v3.2.51:
$ bash --version
GNU bash, version 3.2.51(1)-release (x86_64-apple-darwin13)
Copyright (C) 2007 Free Software Foundation, Inc.
Bạn có thể lấy và biên dịch lại Bash như sau , miễn là bạn đã cài đặt Xcode (và đã chạy xcodebuild
ít nhất một lần trước đó để chấp nhận giấy phép):
$ # If you want to disable auto-imported functions, uncomment the following
$ # export ADD_IMPORT_FUNCTIONS_PATCH=YES
$ 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
$ curl https://ftp.gnu.org/pub/gnu/bash/bash-3.2-patches/bash32-053 | patch -p0
$ # See note above about ADD_IMPORT_FUNCTIONS_PATCH
$ [ "$ADD_IMPORT_FUNCTIONS_PATCH" == "YES" ] && curl http://alblue.bandlem.com/import_functions.patch | patch -p0
$ [ "$ADD_IMPORT_FUNCTIONS_PATCH" == "YES" ] || curl https://ftp.gnu.org/pub/gnu/bash/bash-3.2-patches/bash32-054 | patch -p0
$ [ "$ADD_IMPORT_FUNCTIONS_PATCH" == "YES" ] || curl https://ftp.gnu.org/pub/gnu/bash/bash-3.2-patches/bash32-055 | patch -p0
$ [ "$ADD_IMPORT_FUNCTIONS_PATCH" == "YES" ] || curl https://ftp.gnu.org/pub/gnu/bash/bash-3.2-patches/bash32-056 | patch -p0
$ [ "$ADD_IMPORT_FUNCTIONS_PATCH" == "YES" ] || curl https://ftp.gnu.org/pub/gnu/bash/bash-3.2-patches/bash32-057 | patch -p0
$ cd ..
$ # Note: DO NOT ADD SUDO TO XCODEBUILD HERE
$ xcodebuild
$ build/Release/bash --version # GNU bash, version 3.2.57-release
$ build/Release/sh --version # GNU bash, version 3.2.57-release
$ sudo cp /bin/bash /bin/bash.old
$ sudo cp /bin/sh /bin/sh.old
$ sudo cp build/Release/bash /bin
$ sudo cp build/Release/sh /bin
(Lưu ý: bạn có thể chạy mã này bằng cách sao chép và dán khối mã ở trên, vào Terminal rồi chạy pbpaste | cut -c 2- | sh
. Luôn luôn cẩn thận khi chạy các tập lệnh ngẫu nhiên từ internet mặc dù ...)
Sau này, phiên bản Bash sẽ là v3.2.57:
$ bash --version
GNU bash, version 3.2.57-release (x86_64-apple-darwin13)
Copyright (C) 2007 Free Software Foundation, Inc.
Để bảo mật và sau khi thử nghiệm, tôi khuyên bạn chmod -x
nên sử dụng các phiên bản cũ để đảm bảo chúng không được sử dụng lại hoặc chuyển chúng đến một trang web dự phòng.
$ sudo chmod a-x /bin/bash.old /bin/sh.old
Các câu trả lời khác có giải pháp cho những người sử dụng MacPorts hoặc Homebrew; Chúng không khắc phục được sự cố, chúng chỉ cài đặt các phiên bản bổ sung của Bash. Xin vui lòng xem những câu trả lời nếu bạn muốn nâng cấp cụ thể.
Cảm ơn
Cảm ơn Chet, người chăm sóc bash, và đã sẵn sàng cung cấp các bản vá này. Cảm ơn tất cả những người khác đã bình luận về điều này và cải thiện nó theo thời gian.
Bây giờ Apple đã phát hành bản sửa lỗi thực sự, mặc dù điều này vẫn có thể hữu ích. Bởi vì họ chỉ phát hành bản sửa lỗi cho Lion trở lên và bản vá chính thức cung cấp GNU bash, phiên bản 3.2.53 (1) -release (x86_64-apple-darwin13), tuy nhiên, lỗi Game over vẫn hơi dễ bị tổn thương. Tại thời điểm này, việc xây dựng lại phiên bản Bash của riêng bạn so với 3.2.57 có lẽ an toàn hơn so với dựa vào bản vá của Apple, trừ khi bạn làm sai.