ข้อผิดพลาดของ Shellshock ส่งผลกระทบต่อ ZSH หรือไม่


38

ที่ไม่ข้อผิดพลาดทำพิษทุบตีส่งผลกระทบต่อ ZSH?

การอัพเกรด Bash เป็นทางออกเดียวหรือไม่?


ตามคำตอบนี้ในการแลกเปลี่ยนที่ต่างกัน ZSH จะไม่ส่งออกฟังก์ชั่น เนื่องจากข้อผิดพลาดของ Shellshock เกิดจากคุณสมบัติเฉพาะของ bash นี้เชลล์อื่น ๆ ที่ขาดมันจึงไม่น่าจะได้รับผลกระทบ
lzam

คำตอบ:


36

ไม่ไม่ส่งผลกระทบต่อ ZSH

คุณยังคงต้องอัปเดต bash เนื่องจากสคริปต์ระบบส่วนใหญ่เขียนขึ้นสำหรับการทุบตีและมีความเสี่ยงต่อข้อผิดพลาดของ shellshock

ในการทดสอบ ZSH ของคุณให้ทำดังนี้

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

รหัสนี้ทำอะไรกันแน่

  1. env x='() { :;}; echo vulnerable' สร้างตัวแปรสภาพแวดล้อมที่มีข้อผิดพลาดที่รู้จักกันโดยใช้คำสั่งในตอนท้ายของตัวแปร
  2. zsh -c 'echo hello'เปิดตัวเชลล์ ZSH ด้วยคำทักทายง่าย ๆ (และประเมินตัวแปร env ทั้งหมดรวมถึงx )

หากคุณเห็นผลลัพธ์:

vulnerable
hello

จากนั้น ZSH ของคุณจะมีช่องโหว่ Mine (5.0.2) ไม่ใช่:

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

1
ถ้าเราใช้ zsh แต่ก็ยังมีทุบตีในระบบของเรา! เราจำเป็นต้องกังวลเกี่ยวกับสิ่งนั้นหรือไม่ ถ้าไม่ใช่ทำไม
Dineshkumar

16
@Dineshkumar: ใช่คุณยังควรกังวลและแก้ไข เหตุผลก็คือแม้ว่าคุณจะใช้ zsh โปรแกรมอื่น ๆ (dhcp ถูกกล่าวถึงการใช้งาน PHP จำนวนมากอาจจะทำและโปรแกรมและสคริปต์อื่น ๆ อีกมากมายบนเครื่อง Linux ทั่วไป) จะยังคงเรียก bash (อันที่จริงแล้วพวกเขาไม่ควร แต่มันกลายเป็นนิสัยที่ไม่ดี)
hans_meine

2
@stephenmurdoch Ubuntu 10.10 ค่อนข้างเก่าและไม่ได้รับการสนับสนุนเป็นเวลา 2 ปี ...
Izkata

2
@Ghanima: การโทรbashเป็นนิสัยที่ไม่ดีสำหรับระบบสาธารณูปโภคเพราะไม่รับประกันว่าจะติดตั้ง bash; /bin/shเป็นเชลล์มาตรฐานและจำเป็นต้องเป็นล่ามเชลล์ POSIX ที่ถูกต้อง
phord

2
fwiw - เมื่อ bash ทำงานเป็น / bin / sh มันจะทำงานเป็นเชลล์ที่เข้ากันได้กับ POSIX อย่างไรก็ตามในโหมดนี้ก็ยังมีบั๊กอยู่ env x='() { :;}; echo vulnerable' sh -c 'echo hello'
phord

6

จากลิงค์นี้ :

คุณสามารถตรวจสอบว่าคุณมีความเสี่ยงต่อปัญหาต้นฉบับใน CVE-2014-6271 หรือไม่โดยดำเนินการทดสอบนี้:

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

หากคุณเห็นคำว่ามีช่องโหว่ในผลลัพธ์ของคำสั่งนั้นทุบตีของคุณมีความเสี่ยงและคุณควรปรับปรุง ด้านล่างเป็นเวอร์ชั่นที่มีช่องโหว่จาก OS X 10.8.5:

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

เอาต์พุตต่อไปนี้เป็นตัวอย่างของเวอร์ชันทุบตีที่ไม่เสี่ยง

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

โปรดทราบด้วยว่าเมื่อทำการแก้ไขการทุบตีทำตามคำแนะนำในลิงค์ zshell หยุดความเสี่ยงซึ่งทำให้ฉันคิดว่า zshell ใช้ทุบตีที่แกนกลางของมัน
เวกเตอร์

9
โปรดทราบว่ามีการติดตามผล : env X='() { (a)=>\' bash -c "echo date"จะบน bash ที่แพตช์และแม้ว่าจะมีข้อผิดพลาดมากมายให้สร้างไฟล์ที่เรียกว่าechoซึ่งมีวันที่ ฉันไม่อยากรู้ว่าทำไม
Jonas Schäfer

@ Jonas เดี๋ยวก่อนผลิตไฟล์ ! ฉันเข้าใจช่องโหว่ แต่มันก็แปลกประหลาด
Doorknob

5
@ verveizeize zshไม่ได้ใช้งานbashที่หลัก bashมีการเรียกอย่างชัดเจนในตัวอย่างของคุณ ไม่สำคัญว่าคุณใช้เชลล์ใดในการรันบรรทัดเหล่านี้ ช่องโหว่นี้มีผลต่อเชลล์ bash ที่เพิ่งเริ่มต้นไม่ใช่เชลล์ที่รันจาก
Adaephon

2
@Adaephon ดังนั้นหนึ่งต้องการที่จะเข้ามาแทนที่ในตัวอย่างโดยbash $SHELL
Jonas Schäfer

6

ไบนารีจะไม่ได้รับผลกระทบ

มันไม่ส่งผลกระทบต่อzshการทำงานของเชลล์เนื่องจากซอร์สโค้ดของมันไม่เคยมีข้อผิดพลาดเกิดขึ้น
มีความคล้ายคลึงกันจำนวนมากระหว่างbashและzshแต่พวกเขาได้ดำเนินการเป็นอิสระจากกัน คุณลักษณะเดียวกันนี้มีการใช้งานในสองวิธีที่แตกต่างกันและ - สำคัญกว่าในบริบทนี้ - มักจะมีข้อผิดพลาดแตกต่างกัน

แต่การใช้แบบโต้ตอบคือ

อ้อมก็ไม่ส่งผลกระทบต่อการทำงานที่สามารถโต้ตอบกับzshเปลือกใน terminal bashเกือบมากที่สุดเท่าที่ทำงานร่วมกับ

การใช้bashเป็นเรื่องธรรมดามากจนแทบจะไม่สามารถเรียกมันได้

มีมากเกินไปที่จะหลีกเลี่ยง

  • สคริปที่คุณรู้จักและคาดว่าจะใช้แต่ที่จริงประกอบด้วย zshbash
  • เชลล์สคริปต์จำนวนมากที่ใช้#!/bin/bashเพื่อระบุว่าbashเป็นล่าม
  • จำนวนมากของคำสั่งที่คุณถือว่าเป็นไบนารี bashแต่เชลล์สคริปต์บางส่วนของพวกเขาโดยใช้

  • ในหลาย ๆ ที่ที่เชลล์ดำเนินการอย่างชัดเจนbashอาจถูกนำมาใช้และอาจจำเป็นต้องใช้

    • เช่นxargsคำสั่งที่ซับซ้อนหรือgitนามแฝงที่เกี่ยวข้องกับข้อโต้แย้ง
    • เชลล์เริ่มต้นของเทอร์มินัลอีมูเลเตอร์
    • เปลือกของผู้ใช้ที่คุณ sudo เพื่อ
    • เป็นต้น

4

ไม่ Shellshock ไม่มีผลกับ zsh โดยตรง

อย่างไรก็ตามสภาพแวดล้อมจำนวนมากที่ใช้ zsh เป็นเชลล์เริ่มต้นยังติดตั้ง bash เปลือกใด ๆ รวมถึง zsh สามารถใช้เพื่อวางไข่เปลือกทุบตีที่ถูกบุกรุก:

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

เพื่อป้องกันสิ่งนี้คุณควรแก้ไขถอนการติดตั้งหรือปิดใช้งาน bash เวอร์ชันที่ซ้ำซ้อน คุณสามารถปิดการติดตั้งระบบทุบตีด้วยchmod:

$ chmod a-x /bin/bash

อย่างไรก็ตามเป็นเรื่องปกติที่สคริปต์จะเรียก bash อย่างชัดเจน สคริปต์ที่ทำสิ่งนี้และผู้ที่ใช้คุณลักษณะการทำสคริปต์เฉพาะของ bash จะล้มเหลวหากไม่สามารถใช้งาน bash ได้ การปรับปรุงเป็นทางออกที่ดีที่สุด


ดูเหมือนว่า zsh ใช้ bash โดยปริยายสำหรับ " importing function definition"? ฉันยังทดสอบด้วยการฉีด ssh-server: ssh testuser@localhost '() { :;}; echo "$SHELL"'โดยที่ฉันตั้งค่าtestuserเปลือกการเข้าสู่ระบบของ/bin/zshและมันสะท้อน/bin/zsh
Bossliaw
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.