Чи впливає помилка Shellshock Bash на ZSH?
Чи є модернізація Bash єдиним рішенням?
Чи впливає помилка Shellshock Bash на ZSH?
Чи є модернізація Bash єдиним рішенням?
Відповіді:
Ні, це не впливає на ZSH.
Ви все-таки ОБОВ'ЯЗКОВО оновите bash, оскільки більшість системних скриптів написані для bash і вразливі для помилки оболонки.
Щоб перевірити свій ZSH, зробіть це:
env x='() { :;}; echo vulnerable' zsh -c 'echo hello'
Що саме робить цей код?
env x='() { :;}; echo vulnerable'
створює змінну середовища з відомою помилкою за допомогою команди в кінці змінноїzsh -c 'echo hello'
запускає оболонку ZSH з простим привіт (та оцінюючи всі env змінні, включаючи x )Якщо ви бачите вихід:
vulnerable
hello
Тоді ваш ZSH вразливий. Шахта (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'
Якщо ви бачите слово уразливе у висновку цієї команди, ваш 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
env X='() { (a)=>\' bash -c "echo date"
на виправленому баші та, незважаючи на те, що викидає багато помилок, створить файл, echo
який називається, що містить дату. Я не хочу знати, чому.
zsh
зовсім НЕ використовує bash
в своїй основі. bash
явно називається у ваших прикладах. Не має значення, яку оболонку ви використовуєте для запуску цих рядків. Ця вразливість впливає на нещодавно розпочату оболонку bash, а не на оболонку, з якої вона запущена.
bash
у прикладах на $SHELL
.
Це не впливає zsh
на виконуваний оболонку, оскільки його вихідний код ніколи не містив помилки.
Є багато similaritys між bash
і zsh
, але вони werer реалізовані незалежно один від одного. Одна і та ж особливість реалізується двома різними способами, і - що важливіше в цьому контексті - зазвичай з різними помилками.
Побічно це впливає на інтерактивну роботу з zsh
оболонкою в терміналі майже так само, як і з роботою bash
.
Застосування bash
просто настільки поширене, що навряд чи можна його уникнути.
zsh
, але насправді містять bash
. #!/bin/bash
для визначення bash
в якості інтерпретатора.безліч команд, які ви вважаєте, є бінарними файлами, але це сценарії оболонок, деякі з яких використовують bash
.
у багатьох місцях, де оболонка виконується явно, bash
може бути використана та, можливо, потрібна.
xargs
команди або git
псевдоніми, що містять аргументиНі, 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 недоступний. Патчінг - найкраще рішення.
importing function definition
"? Я також перевірив ін'єкцію ssh-сервера: ssh testuser@localhost '() { :;}; echo "$SHELL"'
там, де я встановив testuser
оболонку входу /bin/zsh
, і це лунає/bin/zsh