Чи впливає помилка Shellshock на ZSH?


38

Чи впливає помилка Shellshock Bash на ZSH?

Чи є модернізація Bash єдиним рішенням?


відповідно до цієї відповіді на іншому обміні, ZSH не експортує функції. Оскільки помилка Shellshock була викликана цією особливістю башти, інші оболонки, які не мають її, ймовірно, не повинні впливати.
lzam

Відповіді:


36

Ні, це не впливає на ZSH.

Ви все-таки ОБОВ'ЯЗКОВО оновите bash, оскільки більшість системних скриптів написані для bash і вразливі для помилки оболонки.

Щоб перевірити свій 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 вразливий. Шахта (5.0.2) не:

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

1
якщо ми використовуємо zsh, але все-таки ми маємо bash в нашій системі! чи потрібно нам про це турбуватися? якщо ні, чому?
Дінешкумар

16
@Dineshkumar: так, ви все одно повинні турбуватися і виправляти. Причина полягає в тому, що навіть якщо ви використовуєте zsh, інші програми (згадується dhcp, багато програм PHP, ймовірно, будуть робити, і багато інших програм і сценаріїв на типовій машині Linux) все одно будуть викликати bash. (Насправді вони не повинні, але це стало поганою звичкою.)
hans_meine

2
@stephenmurdoch Ubuntu 10.10 досить старий і його не підтримують більше 2 років ...
Izkata

2
@Ghanima: дзвінки bash- це погана звичка для системних утиліт, тому що bash не гарантовано встановлюється; /bin/shє стандартною оболонкою, і вона повинна бути правильним інтерпретатором оболонки POSIX.
фрад

2
fwiw - Коли bash запускається як / bin / sh, він працює як оболонка, сумісна з POSIX. Однак у цьому режимі також є помилка. env x='() { :;}; echo vulnerable' sh -c 'echo hello'
фрад

6

За цим посиланням :

Ви можете визначити, чи ви вразливі до початкової проблеми в CVE-2014-6271, виконавши цей тест:

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

Якщо ви бачите слово уразливе у висновку цієї команди, ваш bash вразливий, і вам слід оновити. Нижче представлена ​​вразлива версія OS X 10.8.5:

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

Наступний вихід є прикладом невразливої ​​версії bash.

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

Також зауважте, що під час виправлення bash, дотримуючись інструкцій по посиланню, zshell перестав бути вразливим, що змушує мене думати, що zshell використовує bash в своїй основі.
розмір вектора

9
Зауважте, що відбулося наступне : env X='() { (a)=>\' bash -c "echo date"на виправленому баші та, незважаючи на те, що викидає багато помилок, створить файл, echoякий називається, що містить дату. Я не хочу знати, чому.
Jonas Schäfer

@Jonas Зачекайте, підробіть файл ?! Я розумію вразливість, але це просто химерно.
Doorknob

5
@vectorsize zshзовсім НЕ використовує bashв своїй основі. bashявно називається у ваших прикладах. Не має значення, яку оболонку ви використовуєте для запуску цих рядків. Ця вразливість впливає на нещодавно розпочату оболонку bash, а не на оболонку, з якої вона запущена.
Adaephon

2
@Adaephon Отож, хотілося б замінити bashу прикладах на $SHELL.
Jonas Schäfer

6

Бінар не впливає

Це не впливає zshна виконуваний оболонку, оскільки його вихідний код ніколи не містив помилки.
Є багато similaritys між bashі zsh, але вони werer реалізовані незалежно один від одного. Одна і та ж особливість реалізується двома різними способами, і - що важливіше в цьому контексті - зазвичай з різними помилками.

Але інтерактивне використання є

Побічно це впливає на інтерактивну роботу з zshоболонкою в терміналі майже так само, як і з роботою bash.

Застосування bashпросто настільки поширене, що навряд чи можна його уникнути.

Занадто багато застосувань, щоб уникнути

  • сценарії, які ви знаєте і очікуєте використовувати zsh, але насправді містять bash.
  • багато скриптів оболонки, які використовуються #!/bin/bashдля визначення bashв якості інтерпретатора.
  • безліч команд, які ви вважаєте, є бінарними файлами, але це сценарії оболонок, деякі з яких використовують bash.

  • у багатьох місцях, де оболонка виконується явно, bashможе бути використана та, можливо, потрібна.

    • як складні xargsкоманди або gitпсевдоніми, що містять аргументи
    • оболонки термінальних емуляторів
    • оболонка користувачів, яких ви судо
    • тощо.

4

Ні, Shellshock не впливає на zsh безпосередньо.

Однак у багатьох середовищах, які використовують zsh як оболонку за замовчуванням, також встановлено bash. Будь-яка оболонка, включаючи zsh, може бути використана для нересурсу компрометованої оболонки bash:

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. Ви можете відключити встановлення системи bash за допомогою chmod:

$ chmod a-x /bin/bash

Однак для сценаріїв чітко називати bash. Сценарії, які роблять це, і ті, що використовують специфічні для bash функції сценаріїв, не зможуть, якщо bash недоступний. Патчінг - найкраще рішення.


здається, що zsh неявно використовувати bash для " importing function definition"? Я також перевірив ін'єкцію ssh-сервера: ssh testuser@localhost '() { :;}; echo "$SHELL"'там, де я встановив testuserоболонку входу /bin/zsh, і це лунає/bin/zsh
Bossliaw
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.