CVE-2014-6271
CVE-2014-6271
CVE-2014-6271는 Bash Shell에 존재하는 취약점으로, 환경 변수에 코드를 삽입하여 예상치 못한 행위를 할 수 있는 취약점이다. 또한, 대략 40년 동안 존재해온 취약점으로 Shellshock 취약점이라는 이름으로 알려져 있다.
CVE-2014-6271
취약점에 대한 패치에서도 취약점이 발견되어, 해당 패치와 관련된 취약점은 CVE-2014-7169
라는 CVE코드로 발급 되었다.
환경 변수
환경 변수는 운영체제나 응용 프로그램에서 실행되는 프로세스에 영향을 미치는 변수이다. Bash Shell은 환경 변수 설정뿐만 아니라 환경 변수로 함수를 선언할 수 있다.
환경 변수 설정
VAR라는 변수에 “Hello, World!”를 설정하고 싶다면 export
함수를 통해 설정하면 된다.
1
2
3
$ export foo="Hello, World!"
$ echo $foo
Hello, World!
1
2
3
4
$ foo () { echo Hello, World; }
$ export -f foo
$ foo
Hello, World
Bash Shell의 특징은 같은 이름으로 함수와 변수를 설정할 수 있다. 위 코드대로 변수와 함수를 설정했다면 아래와 같은 결과를 볼 수 있다.
1
2
3
4
$ echo $foo
Hello, World!
$ foo
Hello, World
$foo
를 통해 접근하면 변수 접근이 되고, foo
로 접근하면 함수 접근이 된다. 여기서 foo에 대한 함수 선언을 삭제하고 새로운 함수를 선언해본다.
1
2
3
4
5
$ export -nf foo
$ export foo="() { echo Hell, World; }"
$ ./bash
$ foo
Hell, World
foo
는 함수가 아니라 변수로 설정했는데 함수로 실행이 된다.
1
2
3
4
5
$ export foo="() { echo Hell, World; }; pwd; ls -al"
$ ./bash
/root
drwxrwxrwx 1 root root 4096 May 15 17:00 .
drwxrwxrwx 1 root root 4096 May 15 17:00 ..
즉, CVE-2014-6271 취약점은 ()로 시작하는 변수가 subshell이 실행되면 { … } 부분이 함수로 인식 되는데, 이후에 나오는 명령어도 실행이 가능하다.
이는 Bash Shell에서 subshell로 넘어갈 때 환경 변수를 초기화 하는데, 초기화 과정에서 환경 변수 안의 문자열을 명령어로 인식하기 때문에 발생한 취약점이다.
중요한 점은 Shell을 획득하지 않은 상태에서도 취약점 공격이 가능하다. 해당 취약점은 Bash subshell이 실행될 때 { … } 이후의 코드가 실행되는 취약점이기 때문이다.
패치
CVE-2014-6271는 Bash Shell의 취약점을 이용한 것이기 때문에, Bash Shell을 패치하면 된다.
bash --version
을 이용하여 자신이 사용하고 있는 Bash Shell의 버전을 확인하고 최소 4.3.27버전 이상으로 업데이트 하면 된다.
기타
위 취약점과 관련된 워게임 문제는 pwnable.kr의 shellshock 문제가 있다.