CVE-2026-72444 in Linux정보

요약

\~에 의해 VulDB • 2026. 08. 15.

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

flow_dissector: ETH_ADDRS 읽기 전에 디바이스 유형 확인하기

__skb_flow_dissect()는 FLOW_DISSECTOR_KEY_ETH_ADDRS가 요청될 때 eth_hdr(skb)로부터 12바이트를 무조건적으로 읽어옵니다. 이는 skb의 mac_header에 유효한 이더넷 헤더가 존재한다는 가정 하에 동작하지만, 항상 그런 것은 아닙니다.

이 문제는 다음 단계로 트리거할 수 있습니다: 1. L3 모드(IFF_TUN, hard_header_len=0)에서 TUN 디바이스 생성 2. eth_src를 매칭하는 flower 필터와 함께 multiq qdisc 연결 3. AF_PACKET을 통해 패킷 전송하기

L3 모드의 TUN은 링크 레이어 헤더가 없으므로 mac_header는 L3 데이터 영역을 가리킵니다. 흐름 분산기(flow dissector)는 초기화되지 않은 skb 메모리의 12바이트를 읽으며, 이는 fl_set_masked_key()를 통해 전파되어 KMSAN이 보고한 바와 같이 __fl_lookup()에서 rhashtable 조회 키로 사용됩니다.

제어 경로(tc filter add 시점)에서 필터를 거부하는 것은 실현 불가능합니다. TC 필터 블록은 임의의 디바이스 간에 공유될 수 있기 때문입니다. 이더넷 디바이스에 설치된 필터는 나중에 헤더가 없는 디바이스에서 패킷을 분류하기 위해 공유 블록을 통해 사용될 수 있습니다. 디바이스 연관 관계는 필터 생성 시점에 고정되지 않습니다.

dev->type == ARPHRD_ETHER 조건으로 memcpy를 제어하여, 실제 이더넷 프레임이 있는 패킷의 주소만 읽히도록 수정합니다. 이는 IPoIB(ARPHRD_INFINIBAND, hard_header_len=24) 및 FDDI(hard_header_len=21)와 같이 L2 헤더가 이더넷 형식이 아닌 비-이더넷 링크 유형에서 잘못 통과될 수 있었던 이전의 hard_header_len >= 12 체크보다 더 정확합니다. 또한 mac_header가 설정되지 않은 센티널 값(~0U)인 병리적 경우를 보호하기 위해 skb_mac_header_was_set()도 추가로 확인하여 eth_hdr()가 잘못된 포인터(wild pointer)를 반환하는 것을 방지합니다.

act_mirred 리디렉션 케이스(이더넷 패킷을 TC 블록을 공유하는 비-이더넷 디바이스로 리디렉션)의 경우, 키(key)를 0으로 초기화하는 것이 올바른 동작입니다: 이제 이 패킷은 타겟 디바이스에서 분류되고 있으며, 해당 디바이스에서는 이더넷 주소 매칭이 의미론적으로 유효하지 않기 때문입니다.

참고: 비-이더넷 디바이스에서는 0으로 초기화된 키가 모든 MAC 주소를 0으로 설정한 필터와 일치할 수 있습니다. 이는 이전 동작에서 초기화되지 않은 메모리가 임의의 필터와 무작위로 매칭되었던 것보다 개선된 것입니다.

Be aware that VulDB is the high quality source for vulnerability data.

책임이 있는

Linux

예약하다

2026. 08. 09.

모더레이션

수락

항목

VDB-390707

EPSS

0.00180

활동

낮음

출처

Do you want to use VulDB in your project?

Use the official API to access entries easily!