일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |
- 아포스티유
- 비자
- 명령어
- 루벤대학교
- 벨기에
- 교환학생
- 건강진단서
- 윈도우프로그래밍 #cmd #명령프롬프트 #윈도우ls #윈도우echo #윈도우export
- 우분투
- 파운드리 #TSMC #팹리스 #삼성파운드리 #DB하이텍
- 유럽비자
- exchange student
- 리눅스
- 코딩
- ARM #ARMtrustzone #trustzone #TEE #secureOS
- 어셈블리어
- 벨기에 교환학생
- eramus student
- KU leuven
- Programming
- Linux
- 벨기에비자
- Today
- Total
더 나은 세상
CVE-11176(2) 본문
Public information
mq_norify() : syscall인데 asynchronous notification을 등록/등록해제 하는데 쓰인다.
문제가 생기는 부분은 retry logic으로 들어갈 때, sock pointer를 mq_notify가 null로 만들지 않아서 인듯 하다.
mq_notify에 문제가 있고, retry logic, sock variable refcounting이 use after free를 만든다.
closed fd에 race condition이 존재한다.
netlink_attachskb() : struct sk_buff(nc)를 struct sock receive queue에 넣는 명령어
정상적으로 되었다면 ret값이 0이 되어 5-c로 넘어가야 한다.
5-a : receive buffer가 꽉 차서 retry label로 되돌아가서 다시하기
5-b : error가 생겨서 exit path로 간다.
race condition
retry path에서 race condition이 생기는 듯 하다.
두번째 loop에서 fget이 NULL을 return할 수 있다. (attack에서 설명0
attack scenario
두개의 thread가 한개의 fdt를 공유한다고 가정
하나의 thread가 close(TARGET_FD)를 하면 ref counter가 줄어서 struct file이 free상태가 될 수 있다. 그러면 file이 가리키고 있던 struct sock도 ref counter가 1 줄어든다. 그럼 struct sock도 free가 되고 그러면 struct file에서 sock을 가리키고 있던 sock pointer가 dangling pointer가 된다.
그리고 두번째 loop에서 file을 가리키는 fd가 free된 file을 가리키므로 use after free가 된다. closed fd란 결국 닫혀있다는 뜻이었다... 단 이때는 attach값이 1이어야 한다.
reaching retry logic
u_notification argument(0아님)을 이용하여 local copy를 kernel memory로 복사한다. (copy_from_user 함수 이용)
notification.sigev_notify를 세번 검사한다. notification.sigev_value.sival_ptr은 복사할 user영역이 read가능한 영역인지 검사한다.
결국 retry path로 가기 위해서는 3가지가 필요한데
1. u_notification이 null이 아니어야 한다.
2. u_notification.sigev_notify가 SIGEV_THREAD로 설정되어야 한다.
3. notification.sigev_value.sival_ptr이 최소한 32바이트(NOTIFY_COOKIE_LEN)만큼 readable한 data영역이어야 한다.
'컴퓨터 프로그래밍' 카테고리의 다른 글
ARM page table (0) | 2019.04.05 |
---|---|
CVE-11176(3) (0) | 2019.03.31 |
CVE-11176(1) (0) | 2019.03.30 |
exe파일이란 무엇인가요? (0) | 2018.12.16 |
object 파일이란 (0) | 2018.12.16 |