🇰🇷 한글 설명
Linux 커널의 RED(Random Early Detection) 스케줄링 과정에서 SFQ perturb 타이머가 부적절한 시점에 작동할 때 발생하는 레이스 컨디션 취약점입니다. 이 경합 상태를 악용하면 부모 qdisc의 qlen(큐 길이) 값을 언더플로우(underflow) 시킬 수 있습니다.
💡 쉬운 설명
컴퓨터가 네트워크 데이터를 처리하는 과정에서 두 가지 작업이 동시에 충돌하여 데이터 처리 순서가 꼬이는 문제입니다. 이 충돌을 이용하면 시스템의 네트워크 관리 규칙을 망가뜨릴 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
net_sched: red: fix a race in __red_change()
Gerrard Tai reported a race condition in RED, whenever SFQ perturb timer
fires at the wrong time.
The race is as follows:
CPU 0 CPU 1
[1]: lock root
[2]: qdisc_tree_flush_backlog()
[3]: unlock root
|
| [5]: lock root
| [6]: rehash
| [7]: qdisc_tree_reduce_backlog()
|
[4]: qdisc_put()
This can be abused to underflow a parent's qlen.
Calling qdisc_purge_queue() instead of qdisc_tree_flush_backlog()
should fix the race, because all packets will be purged from the qdisc
before releasing the lock.
📍 영향받는 시스템
RED 스케줄링 및 SFQ perturb 타이머를 사용하는 Linux 커널 버전
⚔️ 공격 벡터
특정 타이밍에 SFQ perturb 타이머를 트리거하여 네트워크 스케줄링 레이스 컨디션 유도
🛡️ 대응 방법
커널 패치를 적용하여 qdisc_tree_flush_backlog() 대신 qdisc_purge_queue()를 사용하도록 업데이트
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 해결된 최신 패치 버전인지 확인