[하루한줄] CVE-2021-3483: Linux kernel의 nosy driver에서 발견된 UAF bug
URL
CVE-2021-3483: Linux kernel: a use-after-free bug in nosy driver
Target
- Linux Kernel
Explain
Linux Kernel의 Linux/drivers/firewire/nosy.c
에서 UAF 버그가 발견되었습니다.
Nosy는 IEEE 1394 드라이버, 애플리케이션 또는 펌웨어 개발과 프로토콜 분석에 사용되는 IEEE 1394 패킷 스니퍼이며 nosy driver는 각각의 device에서 pcilynx structure를 할당합니다.
해당 취약점은 nosy driver가 device에 pciynx structure를 할당하고 해제하는 과정에서 발생하며 취약점이 발생하는 시나리오는 다음과 같습니다.
- 처음 nosy device를 열고
NOSY_IOC_START
ioctl 커맨드를 호출합니다. 그럼 client A가 할당되고, doubly linked list에 추가됩니다. - 두번째로, nosy device를 열고
NOSY_IOC_START
ioctl 커맨드를 호출합니다. 그럼 client B가 할당되고 똑같이 doubly linked list에 추가 됩니다. - client A에서
NOSY_IOC_START ioctl
커맨드를 호출합니다. 그럼 client A는 doubly linked list에서 읽어지고, doubly linked list는 엉망이 됩니다. - 처음 nosy device를 닫으면
nosy_release
가 호출되며nosy_release
에서 client A가 unlink 되고 free 됩니다. - 두번째 nosy device를 닫으면, client A가 참조되어 UAF가 발생합니다.
본 글은 CC BY-SA 4.0 라이선스로 배포됩니다. 공유 또는 변경 시 반드시 출처를 남겨주시기 바랍니다.