기본적인 내용은 원문참고(B급프로그래머님 블로그)내용을 확인하면 되고, 추가적으로 발견된 내용들도 계속 보고되고 있다.

http://en.wikipedia.org/wiki/Shellshock_(software_bug)

위 위키피디아의 내용에 따르면 보고된 취약점은 다음과 같은 내용이 포함되어 있다.


1. 최초보고 (CVE-2014-6271)

env x='() { :;}; echo vulnerable' bash -c "echo this is a test"

뒤에 ehco vulnerable 이 실행되면 문제가 된다.

2. 추가보고(CVE-2014-7169)

X='() { (a)=>\' bash -c "echo date"; cat echo

이는 추가적인 문제다. 위의 CVE-2014-6271이 패치됐다고 해도, 문제가 된다.

정상적인 경우라면 bash -c "echo date"가 정상적으로 실행돼야 하지만, 위 결과로 date가 실행된 echo라는 파일이 만들어진다.

즉, date를 충분히 다른 실행명령으로 대체할 수 있게 되고, 그 결과가 echo 라는 파일로 남는 것이다.

3. 추가보고(CVE-2014-7186)

bash -c 'true <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF' || echo "CVE-2014-7186 vulnerable, redir_stack"

이 문제는 bash의 redirection stack의 오류를 활용한 것으로 보인다.

<<EOF가 하나일 때에는 문제가 되지 않지만 계속 쌓이면 문제가 된다.

덧붙여서 "||"연산자는 논리 OR연산자이다. 즉, A || B에서 A가 true이면 B와 상관없이(수행없이) true이므로 B가 비교(수행)되지 않아야 한다. 하지만 위 결과로 수행되는 것이다.


4. 추가보고(CVE-2014-7187)

(for x in {1..200} ; do echo "for x$x in ; do :"; done; for x in {1..200} ; do echo done ; done) | bash || echo "CVE-2014-7187 vulnerable, word_lineno"

위의 문제가 redirection stack의 오류를 활용한 것이라면, 이번 문제는 shell 환경 영역의 stack의 한계를 넘어가도록 임의 수행한 결과를 활용한 것이다. 이는 취약점이라고 보기에는 좀 무리가 있어 보인다. 어차피 shell의 run-time의 stack 메모리는 한계가 있기 마련이고, 그에 대한 명령은 실패할 수 있는 경우가 항상 있기 때문이다.

** 문제점을 다시 보니, 다르게 파악한 부분이 있나 보다. 문제점은 다음과 같다.

Off-by-one error in the read_token_word function in parse.y in GNU Bash through 4.3 bash43-026 allows remote attackers to cause a denial of service (out-of-bounds array access and application crash) or possibly have unspecified other impact via deeply nested for loops, aka the "word_lineno" issue.

정확하게 parser에 문제가 있고, 경계를 넘어가는 오류로 인해 crash된다는 것이다.

+ Recent posts