Shellshock 버그가 ZSH에 영향을 줍니까?


38

않습니다 셸 쇼크 배쉬 버그 zsh을 영향을 미칩니 까?

Bash를 업그레이드하는 것이 유일한 솔루션입니까?


다른 교환에 대한 이 답변 에 따르면 ZSH는 기능을 내 보내지 않습니다. Shellshock 버그는이 bash 특정 기능으로 인해 발생 했으므로,이 쉘이없는 다른 쉘은 영향을받지 않아야합니다.
lzam

답변:


36

아니요, ZSH에는 영향을 미치지 않습니다.

대부분의 시스템 스크립트는 bash 용으로 작성되고 shellshock 버그에 취약하므로 여전히 bash를 업데이트 해야 합니다.

ZSH를 테스트하려면 다음을 수행하십시오.

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

이 코드는 정확히 무엇을합니까?

  1. env x='() { :;}; echo vulnerable' 변수 끝에서 명령을 사용하여 알려진 버그로 환경 변수를 만듭니다.
  2. zsh -c 'echo hello'간단한 hello를 사용하여 ZSH 쉘을 시작합니다 (및 x를 포함한 모든 env 변수 평가 )

출력이 보이면 :

vulnerable
hello

그러면 ZSH가 취약합니다. 광산 (5.0.2)은 다음이 아닙니다.

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

1
zsh를 사용하지만 여전히 시스템에 bash가 있습니다! 우리는 그것에 대해 걱정해야합니까? 왜 그렇지 않습니까?
Dineshkumar

16
@ Dineshkumar : 예, 여전히 걱정해야합니다. 그 이유는 경우에도입니다 당신은 여전히 것 zsh을, 다른 프로그램 (DHCP가 언급 한 많은 PHP 응용 프로그램은 아마 할 것, 그리고 일반적인 리눅스 시스템에서 다른 프로그램과 스크립트의 많은)를 사용하는 전화 배쉬. (실제로, 그렇게해서는
안되지만

2
@stephenmurdoch Ubuntu 10.10은 꽤 오래되었고 2 년 이상 지원되지 않았습니다 ...
Izkata

2
@Ghanima : bashbash는 설치가 보장되지 않기 때문에 호출 은 시스템 유틸리티에 나쁜 습관입니다. /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'

해당 명령의 출력에 취약한 단어가 표시되면 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

링크 zshell의 지침에 따라 bash를 패치 할 때 zshell의 취약성이 중지되어 zshell이 ​​핵심에서 bash를 사용한다고 생각합니다.
vectorsize

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 있습니다 bashzsh,하지만 그들은 서로 독립적으로 구현 werer. 동일한 기능은 두 가지 방식으로 구현되며,이 맥락에서 더 중요하며 일반적으로 다른 오류가 있습니다.

그러나 대화식 사용은

간접적으로는 zsh터미널 에서 쉘 과 대화식으로 작업하는 데 거의 영향을 미치지 않습니다 bash.

bash그것을 사용하는 것은 너무 일반적이기 때문에 그것을 호출하는 것을 거의 피할 수 없습니다.

피하기 위해 너무 많은 용도

  • 스크립트 당신은 알고 사용할 것으로 예상 zsh하지만, 실제로 포함 bash.
  • 인터프리터 #!/bin/bash로 지정 하는 데 사용 되는 많은 쉘 스크립트 bash.
  • 가정하는 많은 명령은 바이너리이지만 쉘 스크립트이며 일부는를 사용 bash합니다.

  • 쉘이 명시 적으로 실행되는 많은 곳에서 bash사용될 수 있으며 필요할 수 있습니다.

    • 복잡한 xargs명령 또는 git인수와 관련된 별명
    • 터미널 에뮬레이터의 기본 쉘
    • sudo 사용자 쉘
    • 기타

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가 " importing function definition"에 대해 bash를 암시 적으로 사용하는 것 같습니다 . 또한 ssh-server injection으로 테스트했습니다. 로그인 쉘을로 ssh testuser@localhost '() { :;}; echo "$SHELL"'설정하고 에코합니다testuser/bin/zsh/bin/zsh
Bossliaw
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.