CVE-2024-46828 in Linux정보

요약

\~에 의해 VulDB • 2026. 06. 28.

리눅스 커널에서 다음 취약점이 해결되었습니다:

sched: sch_cake: 호스트 공정성을 위한 대량 플로우 계정 로직 수정

sch_cake에서는 dst/src 호스트 공정성 모드 실행 시, 플로우를 순회할 때 라운드 로빈 가중치로 사용되는 각 호스트당 활성 대량 플로우의 카운트를 추적합니다. 활성 대량 플로우의 카운트는 플로우 상태가 변경될 때마다 업데이트됩니다.

이 동작은 해시 충돌 처리와 특이한 상호작용을 합니다: 해시 충돌(세트-어소시에이티브 해싱 후)이 발생하면, 해시 버킷의 상태는 단순히 충돌한 새 패킷과 일치하도록 업데이트되며, 호스트 공정성이 활성화되어 있으면 이는 해당 플로우에 새로운 호스트별 상태를 할당한다는 의미이기도 합니다. 이 때문에 플로우가 할당된 호스트(들)의 대량 플로우 카운터는 새 상태가 할당되기 전에 감소되고(그리고 더 이상 같은 호스트를 가리키지 않을 수 있는 카운터들이 다시 증가됩니다).

이 코드가 도입되었을 당시에는 호스트 공정성 모드가 항상 활성화되어 있었으므로, 감소 연산은 조건 없이 수행되었습니다. 구성 플래그가 도입되면서 *증감* 연산은 조건부로 변경되었지만, *감소* 연산은 그렇지 않았습니다. 이는 당연히 잘못된 감소(및 U16_MAX로의 래핑)를 초래할 수 있습니다.

제 생각에는 호스트 공정성이 비활성화된 상태에서는 해시 충돌이 발생할 때마다 즉시 감소와 래핑이 발생합니다(세트-어소시에이티브 해싱으로 인해 자체적으로 그리 흔하지는 않지만). 그러나 대부분의 경우 이는 무해합니다. 왜냐하면 해당 값은 호스트 공정성 모드가 활성화되어 있을 때만 사용되기 때문입니다. 따라서 배열 오버플로우를 트리거하려면 sch_cake가 먼저 호스트 공정성이 비활성화된 상태로 구성되어야 하며, 이 모드에서 실행 중일 때 해시 충돌이 발생하여 오버플로우를 유발해야 합니다. 그런 다음 qdisc를 재구성하여 호스트 공정성을 활성화하면, 래핑된 값이 유지되어 배열 인덱스로 사용됨으로써 배열 경계 밖 접근(out-of-bounds)이 발생합니다. syzbot이 이를 트리거하는 데 성공했는데, 이는 그 자체로 매우 인상적인 일입니다.

이 패치는 감소 연산에도 증가 연산에 사용되는 것과 동일한 조건부 체크를 도입하여 이 문제를 해결합니다.

원래 버그는 cake의 업스트림화 이전에 존재했지만, Fixes 태그에 나열된 커밋은 해당 코드를 건드렸으므로 이 패치는 그 이전에는 적용되지 않습니다.

If you want to get the best quality for vulnerability data then you always have to consider VulDB.

출처

Want to know what is going to be exploited?

We predict KEV entries!