Shellshock Bash 취약점은 어떻게 발견되었습니까?

Shellshock Bash 취약점은 어떻게 발견되었습니까?

이 버그는 매우 많은 플랫폼에 영향을 미치기 때문에 이 결함의 발견을 통해 배울 수 있는 몇 가지 사항이 있습니다. 이것이 εὕρhnκα(유레카) 순간이었습니까, 아니면 보안 검사의 결과였습니까?

우리는 Stéphane이 Shellshock 버그를 발견했다는 사실을 알고 있고 다른 사람들도 그 과정을 알고 있을 수 있으므로, 그가 어떻게 버그를 발견했는지에 대한 이야기에 관심이 있습니다.

답변1

일부 사람들을 안심시키기 위해 저는 취약점을 살펴봄으로써 버그를 발견한 것이 아니며, 그것이 공개되기 전에 악용되었다고 믿을 이유가 없습니다(물론 이 가능성을 배제할 수는 없지만). bash코드를 찾아봐도 나오지 않았습니다 .

나는 내가 무슨 생각을 했는지 정확히 기억한다고 말할 수 없다.

이는 내가 찾은 일부 소프트웨어의 특정 동작에 대한 일부 반영을 기반으로 합니다.위험한(소프트웨어가 아닌 행동). 그러한 행동은 다음과 같은 생각을 하게 만듭니다.좋은 생각은 아닌 것 같습니다..

이 예에서는 이름이 로 시작하는 경우 클라이언트에서 정리되지 않은 환경 변수를 전달할 수 있는 ssh에 대한 일반적인 구성을 반영했습니다 LC_. 아이디어는 사람들이 다른 컴퓨터 언어에 로그인할 때 자신의 환경 변수를 계속 사용할 수 있도록 하는 것입니다 ssh. 특히 UTF-8을 고려할 때 현지화 처리가 얼마나 복잡한지 생각하기 시작할 때까지(그리고 이를 처리하는 응용 프로그램이 얼마나 부족한지 확인하기 전까지는) 이는 좋은 생각입니다.

sshd 2014년 7월에 저는 이 구성과 결합된 glibc의 지역화 처리에 대한 취약점을 보고했습니다 .나머지 두 개위험한 행동bash껍데기 인증된 공격자가 git 서버에 파일을 업로드하고 bash이를 git unix 사용자의 로그인 셸로 사용할 수 있는 경우 해당 서버를 손상시킬 수 있습니다(CVE-2014-0475).

나는 ssh를 통해 제공되는 사용자를 위한 로그인 셸로 이를 사용하는 것은 아마도 나쁜 생각이라고 생각합니다. bash왜냐하면 이것은 상당히 복잡한 셸(필요한 것은 매우 간단한 명령줄을 구문 분석하는 것뿐일 때)이고 대부분의 버그 Design Ksh를 상속하기 때문입니다. 해당 맥락에서 이를 사용하여 이미 몇 가지 문제를 발견했기 때문에 bash( ssh 설명 ForceCommand) 더 많은 문제가 있는지 궁금합니다.

AcceptEnv LC_*이름이 로 시작하는 모든 변수를 허용합니다 LC_. 막연하게 기억나네요.bash 내보내기 기능(ㅏ위험한때로는 유용한 기능이지만) 비슷한 이름의 환경 변수를 사용하고 있었고 myfunction()거기에 흥미로운 것이 없는지 궁금했습니다.

할 수 있는 최악의 일은 명명된 명령을 재정의하는 것이기 때문에 무시하려고 했습니다. LC_something 이는 기존 명령 이름이 아니기 때문에 실제로 문제가 되지 않지만 어떻게 해야 할지 궁금해지기 시작했습니다.bash 수입됨해당 환경 변수.

LC_foo;echo test; f()예를 들어 변수가 호출되면 어떻게 될까요? 그래서 좀 더 자세히 살펴보기로 했습니다.

ㅏ:

$ env -i bash -c 'zzz() { :;}; export -f zzz; env'
[...]
zzz=() {  :
}

변수가 myfunction()아직 호출되지 않았기 때문에 내 기억이 잘못되었음을 밝힙니다 myfunction. ... 시작하려면 ().

간단한 테스트를 해보자:

$ env 'true;echo test; f=() { :;}' bash -c :
test
bash: error importing function definition for `true;echo test; f'

내 의심을 확인했으며 변수 이름이 삭제되지 않았으며 코드가 평가되었습니다.시작에.

뭐가 더 나빠요, 뭐가 더 나빠요?멸균되지도 않았습니다.

$ env 'foo=() { :;}; echo test' bash -c :
test

이것은 의미한다어느환경 변수는 벡터일 수 있습니다.

그때 나는 문제의 정도를 깨달았고, HTTP( HTTP_xxx/...env QUERYSTRINGvars), 메일 처리 서비스, 이후 DHCP(아마도 긴 목록) 등을 통해서도 악용될 수 있음을 확인하고 이를 보고(신중하게)했습니다. ).

관련 정보