
radareorg radare2 v.0.9.7 ~ v.5.8.6에서 발생하고 v.5.8.8에서 수정된 문제로, 로컬 공격자가 grub_sfs_read_extent 함수를 통해 서비스 거부(denial of service)를 유발할 수 있습니다.
Sherlock Fang, Vlad Tronciu, Ayam Babu
radareorg radare2 v.0.9.7부터 v.5.8.6까지의 버전에서 발견된 문제로, v.5.8.8에서 수정되었습니다. 이 문제는 로컬 공격자가 grub_sfs_read_extent 함수를 통해 서비스 거부(denial of service)를 유발할 수 있게 합니다.
공격자는 “treeblock = grub_malloc(data->blocksize);”이 메모리에서 NULL을 가리키도록 하는 페이로드를 제작하여, “treeblock”의 값이 “tree = (struct grub_sfs_btree *) treeblock;”에 할당될 때 “treeblock”도 NULL을 가리키게 합니다. 악용 가능성의 범위는 특정 상황에 따라 다르지만, 이러한 널 포인터 역참조(null pointer dereference) 취약점은 프로그램에 서비스 거부를 유발하여 전체 프로그램 성능에 영향을 미칩니다.
grub_sfs_read_extent 함수 내부에는 의 상태에 대한 검사 부재로 인한 보안 취약점이 존재합니다. 후속 코드는 이 유효한 메모리 할당을 가리키는지 확인하지 않고 이를 사용합니다. 이는 이 로 캐스팅된 후 호출에 사용될 때 NULL 포인터의 역참조로 이어집니다. NULL 포인터 역참조는 C에서 정의되지 않은 동작이며, 일반적으로 세그멘테이션 폴트나 접근 위반을 초래하여 프로그램이 충돌합니다.
tree_blocktree_blocktreeblockstruct grub_sfs_btree*grub_disk_read아래와 같이 grub_malloc의 할당 상태를 확인하는 검사를 추가하여 취약점을 수정했습니다.