문서의 임의 삭제는 제재 대상으로, 문서를 삭제하려면 삭제 토론을 진행해야 합니다. 문서 보기문서 삭제토론 셸쇼크 (문단 편집) === 예제 설명 === 본격적으로 설명하기에 앞서 Bash의 환경변수에 대해 간략하게 알아보자. {{{#!syntax sh $ hi="안녕!" $ echo $hi 안녕! }}}hi라는 변수를 생성, echo 함수를 통해 출력하는 구문이다. $hi를 입력했을 때 Bash shell은 c의 매크로처럼 "안녕!"이라고 변환해준다. {{{#!syntax sh $ hi="안녕!" $ export hi $ printenv | grep hi hi="안녕!" }}}이번엔 변수를 선언하고 export를 통해 환경변수에 등록해보자. printenv로 환경변수 목록을 출력해보면 값이 들어가 있는 것을 확인 할 수 있다. Bash는 위와 같이 변수를 선언해서 환경변수에 넣을 수 있을 뿐만 아니라 함수도 넣을 수 있다. {{{#!syntax sh $ hi() { echo "안녕!"; } $ hi 안녕! $ export -f hi $ printenv | grep hi hi=() { echo "안녕!" } }}}함수를 환경변수에 넣을때는 export에 -f 옵션을 줘서 넣는다. 함수형 환경변수가 저장되는 방식을 유심히 살펴보자. 자 이제 본격적으로 CVE-2014-6271 취약점에 대해 알아보자. 해당 취약점은 '''함수가 아닌''' 일반 환경 변수가 {{{() { <함수 body> }; <공격하려는 코드> }}} 이런 모양일 경우 child로 생성된 Bash shell에서 함수로 인식되는 버그이다. >$ export hi='() { echo "안녕!"; }; echo "꺼져";' {{{#green #함수가 아닌 일반 환경변수 hi를 넣는다}}} >$ bash {{{#green #새 Bash를 생성}}} >"꺼져" {{{#green #공격하려는 코드가 인식되어 실행된다.}}} 마지막으로 위의 예제를 살펴보자 >$ env x='() { :[* {{{:}}} 라는 기호는 Bash shell에서는 true와 동치이다.];}; echo vulnerable' bash -c "echo this is a test" env라는 명령어는 '해당 환경변수를 가지고 명령을 실행해라'는 뜻이다. 즉, {{{x='() { :;}; echo vulnerable'}}} 환경변수를 가지고 {{{#bash,#ff4444 -c "echo this is a test"}}} 라는 구문을 실행하게 되는 것. 만약 취약점에 노출되었다면 뒤에 있는 echo vulnerable이라는 구문이 실행 될 것이다.저장 버튼을 클릭하면 당신이 기여한 내용을 CC-BY-NC-SA 2.0 KR으로 배포하고,기여한 문서에 대한 하이퍼링크나 URL을 이용하여 저작자 표시를 하는 것으로 충분하다는 데 동의하는 것입니다.이 동의는 철회할 수 없습니다.캡챠저장미리보기