🇰🇷 한글 설명
Linux 커널의 xHCI 드라이버에서 tty_register_driver() 호출 실패 시 전역 드라이버 포인터를 NULL로 설정하지 않아 발생하는 취약점입니다. 이로 인해 모듈 언로드 시 이미 해제된 드라이버를 다시 해제하려 시도하는 Use-After-Free(UAF) 문제가 발생할 수 있습니다.
💡 쉬운 설명
프로그램이 실행 중에 오류가 나서 종료될 때, 이미 삭제된 메모리 주소를 다시 삭제하려고 시도하여 시스템 오류를 일으키는 문제입니다. 이 과정에서 보안 취약점이 발생하여 시스템이 불안정해질 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
xhci: dbgtty: Fix unregister on tty_register_driver() failure
If tty_register_driver() fails, it drops the reference, but fails to set
the global dbc_tty_driver to NULL, causing the unregister to be called
again when module exits.
On module unload dbc_tty_exit() only gates its cleanup on the driver
pointer being non-NULL, so it operates on the already-freed driver:
module_init(xhci_hcd_init)
xhci_hcd_init()
xhci_dbc_init() [return value ignored]
dbc_tty_init()
tty_register_driver() fails
tty_driver_kref_put() -> driver freed
(dbc_tty_driver left dangling)
...
module_exit(xhci_hcd_fini)
xhci_hcd_fini()
xhci_dbc_exit()
dbc_tty_exit()
if (dbc_tty_driver) -> true (dangling)
tty_unregister_driver() -> use-after-free
📍 영향받는 시스템
Linux Kernel (xhci_hcd 관련 모듈을 사용하는 시스템)
⚔️ 공격 벡터
로컬 공격자가 특정 조건에서 커널 모듈을 로드/언로드하여 Use-After-Free 유도
🛡️ 대응 방법
커널 패치를 적용하여 tty_register_driver() 실패 시 dbc_tty_driver를 NULL로 초기화하도록 업데이트
🔧 검증 코드
현재 실행 중인 커널 버전을 확인하여 해당 취약점이 해결된 패치 버전인지 확인