ที่ไม่ข้อผิดพลาดทำพิษทุบตีส่งผลกระทบต่อ ZSH?
การอัพเกรด Bash เป็นทางออกเดียวหรือไม่?
ที่ไม่ข้อผิดพลาดทำพิษทุบตีส่งผลกระทบต่อ ZSH?
การอัพเกรด Bash เป็นทางออกเดียวหรือไม่?
คำตอบ:
ไม่ไม่ส่งผลกระทบต่อ ZSH
คุณยังคงต้องอัปเดต bash เนื่องจากสคริปต์ระบบส่วนใหญ่เขียนขึ้นสำหรับการทุบตีและมีความเสี่ยงต่อข้อผิดพลาดของ shellshock
ในการทดสอบ ZSH ของคุณให้ทำดังนี้
env x='() { :;}; echo vulnerable' zsh -c 'echo hello'
รหัสนี้ทำอะไรกันแน่
env x='() { :;}; echo vulnerable' สร้างตัวแปรสภาพแวดล้อมที่มีข้อผิดพลาดที่รู้จักกันโดยใช้คำสั่งในตอนท้ายของตัวแปรzsh -c 'echo hello'เปิดตัวเชลล์ ZSH ด้วยคำทักทายง่าย ๆ (และประเมินตัวแปร env ทั้งหมดรวมถึงx )หากคุณเห็นผลลัพธ์:
vulnerable
hello
จากนั้น ZSH ของคุณจะมีช่องโหว่ Mine (5.0.2) ไม่ใช่:
$ env x='() { :;}; echo vulnerable' zsh -c 'echo hello'
hello
bashเป็นนิสัยที่ไม่ดีสำหรับระบบสาธารณูปโภคเพราะไม่รับประกันว่าจะติดตั้ง bash; /bin/shเป็นเชลล์มาตรฐานและจำเป็นต้องเป็นล่ามเชลล์ POSIX ที่ถูกต้อง
env x='() { :;}; echo vulnerable' sh -c 'echo hello'
จากลิงค์นี้ :
คุณสามารถตรวจสอบว่าคุณมีความเสี่ยงต่อปัญหาต้นฉบับใน 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
env X='() { (a)=>\' bash -c "echo date"จะบน bash ที่แพตช์และแม้ว่าจะมีข้อผิดพลาดมากมายให้สร้างไฟล์ที่เรียกว่าechoซึ่งมีวันที่ ฉันไม่อยากรู้ว่าทำไม
zshไม่ได้ใช้งานbashที่หลัก bashมีการเรียกอย่างชัดเจนในตัวอย่างของคุณ ไม่สำคัญว่าคุณใช้เชลล์ใดในการรันบรรทัดเหล่านี้ ช่องโหว่นี้มีผลต่อเชลล์ bash ที่เพิ่งเริ่มต้นไม่ใช่เชลล์ที่รันจาก
bash $SHELL
มันไม่ส่งผลกระทบต่อzshการทำงานของเชลล์เนื่องจากซอร์สโค้ดของมันไม่เคยมีข้อผิดพลาดเกิดขึ้น
มีความคล้ายคลึงกันจำนวนมากระหว่างbashและzshแต่พวกเขาได้ดำเนินการเป็นอิสระจากกัน คุณลักษณะเดียวกันนี้มีการใช้งานในสองวิธีที่แตกต่างกันและ - สำคัญกว่าในบริบทนี้ - มักจะมีข้อผิดพลาดแตกต่างกัน
อ้อมก็ไม่ส่งผลกระทบต่อการทำงานที่สามารถโต้ตอบกับzshเปลือกใน terminal bashเกือบมากที่สุดเท่าที่ทำงานร่วมกับ
การใช้bashเป็นเรื่องธรรมดามากจนแทบจะไม่สามารถเรียกมันได้
zshbash#!/bin/bashเพื่อระบุว่าbashเป็นล่ามจำนวนมากของคำสั่งที่คุณถือว่าเป็นไบนารี bashแต่เชลล์สคริปต์บางส่วนของพวกเขาโดยใช้
ในหลาย ๆ ที่ที่เชลล์ดำเนินการอย่างชัดเจนbashอาจถูกนำมาใช้และอาจจำเป็นต้องใช้
xargsคำสั่งที่ซับซ้อนหรือgitนามแฝงที่เกี่ยวข้องกับข้อโต้แย้งไม่ 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 ได้ การปรับปรุงเป็นทางออกที่ดีที่สุด
importing function definition"? ฉันยังทดสอบด้วยการฉีด ssh-server: ssh testuser@localhost '() { :;}; echo "$SHELL"'โดยที่ฉันตั้งค่าtestuserเปลือกการเข้าสู่ระบบของ/bin/zshและมันสะท้อน/bin/zsh