이 버그는 많은 플랫폼에 영향을 미치기 때문에이 취약점이 발견 된 프로세스에서 무언가를 배울 수 있습니다. εὕρηκα (eureka) 순간입니까, 보안 검사의 결과입니까?
우리는 Stéphane이 Shellshock 버그를 발견했음을 알고 다른 사람들도 프로세스를 알고있을 수 있기 때문에 버그를 어떻게 찾게되었는지에 관심이있을 것입니다.
이 버그는 많은 플랫폼에 영향을 미치기 때문에이 취약점이 발견 된 프로세스에서 무언가를 배울 수 있습니다. εὕρηκα (eureka) 순간입니까, 보안 검사의 결과입니까?
우리는 Stéphane이 Shellshock 버그를 발견했음을 알고 다른 사람들도 프로세스를 알고있을 수 있기 때문에 버그를 어떻게 찾게되었는지에 관심이있을 것입니다.
답변:
몇 가지를 안심시키기 위해, 익스플로잇을 관찰하여 버그를 찾지 못했습니다. 공개되기 전에 익스플로잇되었다고 믿을만한 이유가 없습니다 (물론 배제 할 수는 없지만). bash
의 코드를 보면 찾지 못했습니다 .
나는 당시의 내 생각의 기차를 정확하게 기억한다고 말할 수 없다.
그것은 내가 위험하다고 생각하는 일부 소프트웨어 (소프트웨어가 아닌 행동)의 일부 행동에 대한 반성에서 비롯되었습니다 . 당신이 생각하게하는 행동의 종류 : 그것은 좋은 생각처럼 들리지 않습니다 .
이 경우 이름이로 시작하면 클라이언트에서 비 염소 환경 변수를 전달할 수있는 ssh의 공통 구성에 대해 생각하고있었습니다 LC_
. 아이디어는 사람들이 ssh
다른 기계를 사용할 때 자신의 언어를 계속 사용할 수 있도록 하는 것입니다. UTF-8을 방정식에 넣을 때 (그리고 많은 응용 프로그램에서 처리가 얼마나 나쁜지 확인하는 경우) 복잡한 지역화 처리가 얼마나 복잡한지를 고려하기 시작할 때까지 좋은 아이디어입니다.
돌아 가기 년 7 월 2014 년, 나는 이미 그와 함께 glibc는 현지화 처리의 취약점보고했다 sshd
설정하고, 두 개의 다른 위험한 행동 의 bash
쉘
그들이 거기에 파일을 업로드 할 수 있었다 제공 (인증) 공격자가 자식 서버를 해킹 할 수 및 bash
사용 git unix 사용자의 로그인 쉘 (CVE-2014-0475)로.
bash
ssh를 통해 서비스를 제공하는 사용자의 로그인 쉘로 사용하는 것이 좋지 않은 생각이라고 생각했습니다 . 단지 복잡한 쉘이기 때문에 (단순히 간단한 명령 줄을 구문 분석하는 경우) 대부분의 잘못된 디자인을 상속했습니다. 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
/ QUERYSTRING
... env vars), 메일 처리 서비스, DHCP (그리고 아마도 긴 목록)와 같은 다른 것들도 악용 될 수 있음을 확인하고 조심스럽게보고했습니다. .