Lỗi Shellshock có ảnh hưởng đến ZSH không?


38

Liệu lỗi Shellshock Bash ảnh hưởng ZSH?

Nâng cấp Bash là giải pháp duy nhất?


theo câu trả lời này trên một trao đổi khác, ZSH không xuất các hàm. Do lỗi Shellshock gây ra bởi tính năng cụ thể bash này, các shell khác thiếu nó có lẽ sẽ không bị ảnh hưởng.
lzam

Câu trả lời:


36

Không, nó không ảnh hưởng đến ZSH.

Bạn vẫn PHẢI cập nhật bash vì hầu hết các tập lệnh hệ thống được viết cho bash và dễ bị lỗi shellshock.

Để kiểm tra ZSH của bạn, hãy làm điều này:

env x='() { :;}; echo vulnerable' zsh -c 'echo hello'

Chính xác thì mã này làm gì?

  1. env x='() { :;}; echo vulnerable' tạo một biến môi trường với lỗi đã biết bằng cách sử dụng lệnh ở cuối biến
  2. zsh -c 'echo hello'khởi chạy shell ZSH với lời chào đơn giản (và đánh giá tất cả các biến env bao gồm x )

Nếu bạn thấy đầu ra:

vulnerable
hello

Sau đó, ZSH của bạn dễ bị tổn thương. Của tôi (5.0.2) không phải là:

$ env x='() { :;}; echo vulnerable' zsh -c 'echo hello'
hello

1
nếu chúng tôi sử dụng zsh nhưng vẫn có bash trong hệ thống của chúng tôi! chúng ta có cần phải lo lắng về điều đó? nếu không tại sao?
Dineshkumar

16
@Dineshkumar: vâng, bạn vẫn nên lo lắng & vá lỗi. Lý do là ngay cả khi bạn đang sử dụng zsh, các chương trình khác (dhcp đã được đề cập, nhiều ứng dụng PHP có thể sẽ làm được, và rất nhiều chương trình và tập lệnh khác trên máy Linux thông thường) vẫn sẽ gọi bash. (Trên thực tế, họ không nên, nhưng nó đã trở thành một thói quen xấu.)
hans_meine

2
@stephenmurdoch Ubuntu 10.10 khá cũ và đã không được hỗ trợ trong hơn 2 năm ...
Izkata

2
@Ghanima: gọi điện bashlà một thói quen xấu cho các tiện ích hệ thống vì bash không được đảm bảo để cài đặt; /bin/shlà shell tiêu chuẩn và được yêu cầu phải là trình thông dịch shell POSIX chính xác.
phord

2
fwiw - Khi bash được chạy dưới dạng / bin / sh, nó chạy dưới dạng vỏ tương thích POSIX. Trong chế độ này, tuy nhiên, nó cũng có lỗi. env x='() { :;}; echo vulnerable' sh -c 'echo hello'
phord

6

Từ liên kết này :

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'

Nếu bạn thấy từ dễ bị tổn thương trong đầu ra của lệnh đó thì bash của bạn 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:

env x='() { :;}; echo vulnerable' bash -c 'echo hello'
vulnerable
hello

Đầu ra sau đây là một ví dụ về phiên bản bash không dễ bị tấn công.

$ env x='() { :;}; echo vulnerable' bash -c 'echo hello'
bash: warning: x: ignoring function definition attempt
bash: error importing function definition for `x'
hello

Cũng lưu ý rằng khi vá bash theo hướng dẫn trên liên kết zshell đã ngừng bị tổn thương, điều này khiến tôi nghĩ rằng zshell sử dụng bash ở lõi của nó.
vectorsize

9
Lưu ý rằng đã có một phần tiếp theo : env X='() { (a)=>\' bash -c "echo date"sẽ, trên một bản vá được vá và mặc dù có rất nhiều lỗi, tạo ra một tệp có tên là echongày. Tôi không muốn biết tại sao.
Jonas Schäfer

@Jonas Chờ đã, tạo một tập tin ?! Tôi hiểu lỗ hổng, nhưng điều đó thật kỳ quái.
Doorknob

5
@vectorsize zshnào không sử dụng bashcốt lõi của nó. bashđược gọi rõ ràng trong các ví dụ của bạn. Không quan trọng bạn đang sử dụng shell nào để chạy các dòng này. Lỗ hổng này ảnh hưởng đến shell bash mới bắt đầu, không phải shell mà nó được chạy từ đó.
Adaephon

2
@Adaephon Vì vậy, người ta muốn thay thế bashtrong các ví dụ bằng $SHELL.
Jonas Schäfer

6

Nhị phân không bị ảnh hưởng

Nó không ảnh hưởng zshnhư shell thực thi, bởi vì mã nguồn của nó không bao giờ có lỗi.
Có nhiều điểm tương đồng giữa bashzsh, nhưng chúng được thực hiện độc lập với nhau. Tính năng tương tự được triển khai theo hai cách khác nhau và - quan trọng hơn trong bối cảnh này - thường là với các lỗi khác nhau.

Nhưng việc sử dụng tương tác là

Một cách gián tiếp, nó ảnh hưởng đến việc làm việc tương tác với zshvỏ trong một thiết bị đầu cuối gần như bằng cách làm việc với bash.

Việc sử dụng bashchỉ là phổ biến đến mức người ta khó có thể tránh được để gọi nó.

Quá nhiều công dụng để tránh

  • tập lệnh bạn biết và mong đợi để sử dụng zsh, nhưng thực sự có chứa bash.
  • rất nhiều tập lệnh shell sử dụng #!/bin/bashđể chỉ định bashlàm trình thông dịch.
  • rất nhiều lệnh mà bạn giả sử là nhị phân, nhưng là các kịch bản shell, một số trong số chúng sử dụng bash.

  • ở nhiều nơi mà một shell được thực thi rõ ràng, bashcó thể được sử dụng và có thể được yêu cầu.

    • như các xargslệnh phức tạp hoặc các gitbí danh liên quan đến các đối số
    • shell mặc định của trình giả lập thiết bị đầu cuối
    • vỏ của người dùng mà bạn sudo để
    • v.v.

4

Không, Shellshock không ảnh hưởng trực tiếp đến zsh.

Tuy nhiên, nhiều môi trường sử dụng zsh làm shell mặc định cũng đã cài đặt bash. Bất kỳ shell nào, bao gồm zsh, đều có thể được sử dụng để sinh ra shell bash bị xâm nhập:

zsh  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'
Fri 26 Sep 2014 12:05:57 BST

Để chống lại điều này, bạn nên vá, gỡ cài đặt hoặc vô hiệu hóa bất kỳ phiên bản bash dư thừa nào. Bạn có thể vô hiệu hóa cài đặt bash hệ thống với chmod:

$ chmod a-x /bin/bash

Tuy nhiên, thông thường các tập lệnh gọi bash rõ ràng. Các tập lệnh thực hiện điều này và các tập lệnh sử dụng các tính năng tập lệnh dành riêng cho bash sẽ thất bại nếu không có bash. Vá là giải pháp tốt nhất.


có vẻ như zsh ngầm sử dụng bash cho " importing function definition"? Tôi cũng đã thử nghiệm với máy chủ ssh-server: ssh testuser@localhost '() { :;}; echo "$SHELL"'nơi tôi đặt testuservỏ đăng nhập của /bin/zshnó và nó lặp lại/bin/zsh
Bossliaw
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.