원래 제대로 깊게 분석해보려고 했는데... 급 귀찮음을 느껴서 단순히 소개만..
이 취약점은 2013년 5월 14일에 발표되었다.
그래서, 현재 대부분의 기본 커널에서 적용되는 취약점이다.
(Ubuntu 13.04 64bit에서도 확인해보았는데, 루트가 따였다.)
상당히 심각한 취약점이니, 꼭 패치를 해야한다.
tunz@ubuntu:~/cve-2013-2094$ cat /etc/os-release NAME="Ubuntu" VERSION="13.04, Raring Ringtail" ... tunz@ubuntu:~/cve-2013-2094$ uname -a Linux ubuntu 3.8.0-19-generic #29-Ubuntu SMP Wed Apr 17 18:16:28 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux tunz@ubuntu:~/cve-2013-2094$ ./a.out Searchin... detected CONFIG_JUMP_LABEL perf_swevent_enabled is at 0xffffffff81ef31c0 IDT at 0xffffffff81df4000 Using interrupt 128 Shellcode at 0x81000000 Triggering sploit Got signal Launching shell # id uid=0(root) gid=1000(tunz) groups=0(root),4(adm),24(cdrom),27(sudo),30(dip),33(www-data),46(plugdev),108(lpadmin),124(sambashare),1000(tunz) |
이 취약점은 kernel/events/core.c의 perf_swevent_init 함수에서 발생하는 취약점이다.
static int perf_swevent_init(struct perf_event *event) { - int event_id = event->attr.config; + u64 event_id = event->attr.config; |
event_id를 int형으로 받았다.
그 결과, 음수의 값도 받을수가 있게 되었고, 그다음의
static_key_slow_inc(&perf_swevent_enabled[event_id]); |
위 부분에서 문제가 발생한다.
위의 어레이에서 음수를 넣으면, 해당 어레이 뒤쪽의 값들을 조작할수가 있게 된다.
그 후로 이러쿵 저러쿵 해서, idt를 조작한후, 인터럽트 핸들러에 쉘코드를 덮어쓴후, 인터럽트를 이용해 루트를 따는듯하다.
**
우분투 기준 커널 업데이트방법
sudo apt-get update sudo apt-get upgrade sudo apt-get dist-upgrade |
'Computer Security > System' 카테고리의 다른 글
Python Pickle 취약점 (1) | 2014.04.15 |
---|---|
gs segment base address (1) | 2014.02.24 |
Race Condition one-shot exploit (1) | 2013.08.02 |
시스템함수를 통한 리버스텔넷 (추가) (1) | 2013.07.11 |
Hindering ROP Using In-Place Code Randomization (2) | 2013.06.26 |