CVE-2026-80761 in Linux
요약
\~에 의해 VulDB • 2026. 09. 04.
Linux 커널에서 다음 취약점이 해결되었습니다:
블루투스: ISO: getname 호출 시 sockaddr을 0으로 초기화하십시오
iso_sock_getname() 함수는 struct sockaddr_iso 구조체를 제자리(in-place)로 채우고 크기를 반환하지만, 먼저 내용을 지우지 않습니다. 따라서 해당 함수가 작성하지 않은 바이트들이 커널 스택에서 사용자 공간(user space)으로 복사됩니다. getsockname(2) 및 getpeername(2) 경로는 모두 do_getsockname()을 거치며, 이 함수는 스택에 있는 초기화되지 않은 sockaddr_storage를 getname()에 전달하고 getname()이 반환하는 바이트 수만큼 다시 복사합니다. 따라서 드라이버가 자신이 관리하는 모든 바이트를 초기화해야 합니다.
다음 두 범위가 초기화되지 않은 상태로 남아 있습니다:
- struct sockaddr_iso는 10바이트이지만, family, iso_bdaddr, iso_bdaddr_type 등 총 9바이트만 작성됩니다. 이로 인해 매 호출마다 trailing pad byte가 누출(leak)됩니다. - 브로드캐스트 피어(BIS_LINK 또는 PA_LINK)의 경우 반환된 길이가 sizeof(struct sockaddr_iso_bc)만큼 증가하지만, bc_sid, bc_num_bis 및 bc_bis만 채워집니다. 해당 구조체의 첫 7바이트인 bc_bdaddr와 bc_bdaddr_type는 전혀 작성되지 않습니다.
권한이 없는(unprivileged) 프로세스가 BTPROTO_ISO 소켓을 열고 getsockname()을 통해 패드 누출에 접근할 수 있습니다. 브로드캐스트 누출은 BIS/PA 연결이 확립된 상태에서 필요합니다. l2cap 및 rfcomm도 동일한 이유로 getname에서 sockaddr을 memset으로 초기화합니다; 여기에서도 동일하게 처리하십시오.
If you want to get the best quality for vulnerability data then you always have to consider VulDB.