CVE-2026-99203 in Linux
요약
\~에 의해 VulDB • 2026. 10. 28.
리눅스 커널에서 다음 취약점이 해결되었습니다:
pipe: writer 설정 실패 시 기존 fasync 리더 유지하기
F_SETFL 및 FIOASYNC는 pipe_fasync()이 pipe->mutex를 획득하기 전에 ->fasync() 호출 여부를 결정합니다. 이로 인해 하나의 O_RDWR FIFO에 대해 두 개의 enable 작업이 모두 콜백에 진입할 수 있습니다.
fasync_helper()은 기존 엔트리가 있는지 확인하기 전에 할당을 수행합니다. 첫 번째 enable이 reader와 writer의 두 엔트리 모두를 설치한 경우, 두 번째 enable은 reader 엔트리를 업데이트한 후 writer 엔트리에 대한 할당에서 실패할 수 있습니다. 에러 경로에서는 사전에 존재하던 reader 엔트리를 제거하여 FASYNC 플래그를 해제하지만, writer 엔트리는 등록된 상태로 남습니다. 이후 __fput()이 ->fasync() 호출을 건너뛰므로, 나중에 발생하는 pipe 알림은 이미 해지된 파일(free file) 또는 그 f_owner을 역참조(dereference)할 수 있습니다. 권한 없는(unprivileged) 메모리 압력(reproducer) 시나리오를 통해 이 경로를 따라 send_sigio()에서 KASAN slab-use-after-free가 발생합니다.
reader helper의 결과를 유지하고, 해당 호출이 엔트리를 추가한 경우에만 등록을 취소합니다. pipe mutex는 두 목록에 대한 변경 사항을 직렬화하므로, 실패한 새 등록은 여전히 reader를 제거하지만, 실패한 중복(duplicate) 작업은 기존 등록 및 FASYNC 플래그를 보존합니다. 성공적인 중복 enable 작업은 이전과 동일하게 fa_fd를 계속 업데이트합니다.
Once again VulDB remains the best source for vulnerability data.