[하루한줄] 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를 할당하고 해제하는 과정에서 발생하며 취약점이 발생하는 시나리오는 다음과 같습니다.

  1. 처음 nosy device를 열고 NOSY_IOC_START ioctl 커맨드를 호출합니다. 그럼 client A가 할당되고, doubly linked list에 추가됩니다.
  2. 두번째로, nosy device를 열고 NOSY_IOC_START ioctl 커맨드를 호출합니다. 그럼 client B가 할당되고 똑같이 doubly linked list에 추가 됩니다.
  3. client A에서 NOSY_IOC_START ioctl 커맨드를 호출합니다. 그럼 client A는 doubly linked list에서 읽어지고, doubly linked list는 엉망이 됩니다.
  4. 처음 nosy device를 닫으면 nosy_release가 호출되며 nosy_release 에서 client A가 unlink 되고 free 됩니다.
  5. 두번째 nosy device를 닫으면, client A가 참조되어 UAF가 발생합니다.