ที่ไม่ข้อผิดพลาดทำพิษทุบตีส่งผลกระทบต่อ 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
เป็นเรื่องธรรมดามากจนแทบจะไม่สามารถเรียกมันได้
zsh
bash
#!/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