🇰🇷 한글 설명
Linux 커널의 cros_ec 드라이버에서 ec_device_probe() 실패 시 메모리가 해제됨에도 불구하고 drvdata가 설정되어 있어 발생하는 Use-After-Free 취약점입니다. 이로 인해 cros_ec_typec와 같은 하위 드라이버가 이미 해제된 메모리 주소에 접근을 시도하여 시스템 오류나 보안 문제를 일으킬 수 있습니다.
💡 쉬운 설명
장치를 준비하는 과정에서 오류가 발생해 메모리를 정리했는데, 다른 프로그램이 이미 사라진 메모리 주소를 계속 사용하려고 시도하는 문제입니다. 이로 인해 컴퓨터 시스템이 갑자기 멈추거나 보안상 위험한 상태가 될 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
mfd: cros_ec: Delay dev_set_drvdata() until probe success
If ec_device_probe() fails, cros_ec_class_release releases memory for the
cros_ec_dev structure. However, because the drvdata was already set,
sub-drivers like cros_ec_typec can still retrieve the stale pointer via the
platform device. This leads to a use-after-free when cros_ec_typec attempts
to access &typec->ec->ec->dev on a device that has already been released.
Move dev_set_drvdata() to ensure that the pointer is only made available
once all initialization steps have succeeded.
sysfs: cannot create duplicate filename '/class/chromeos/cros_ec'
Call trace:
sysfs_do_create_link_sd+0x94/0xdc
sysfs_create_link+0x30/0x44
device_add_class_symlinks+0x90/0x13c
device_add+0xf0/0x50c
ec_device_probe+0x150/0x4f0
platform_probe+0xa0/0xe0
...
BUG: KASAN: invalid-access in __memcpy+0x44/0x230
Write at addr f5ffff809e2d33ac by task kworker/u32:5/125
Pointer tag: [f5], memory tag: [fe]
Tainted : [W]=WARN, [O]=OOT_MODULE
Hardware name: Google Navi unprovisioned 0x7FFFFFFF/sku0 board/sku3
Workqueue: events_unbound deferred_probe_work_func
Call trace:
__memcpy+0x44/0x230
cros_ec_check_features+0x60/0xcc [cros_ec_proto]
cros_typec_probe+0xe8/0x6e0 [cros_ec_typec]
platform_probe+0xa0/0xe0
📍 영향받는 시스템
Linux kernel (cros_ec 및 cros_ec_typec 드라이버를 사용하는 시스템)
⚔️ 공격 벡터
장치 초기화 실패를 유도하여 해제된 메모리 주소에 접근하게 만드는 로컬 공격
🛡️ 대응 방법
Linux 커널을 최신 패치가 적용된 버전으로 업데이트하여 dev_set_drvdata() 호출 시점을 수정해야 합니다.
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 패치된 최신 보안 업데이트 버전인지 확인합니다.