🇰🇷 한글 설명
Linux 커널의 stmmac 네트워크 드라이버에서 TSO(TCP Segmentation Offload) 헤더 길이 처리 시 정수 오버플로 취약점이 발견되었습니다. 헤더 길이가 255바이트를 초과할 경우 u8 타입 변수 사용으로 인해 값이 잘못 계산되는 문제가 있었으며, 이를 unsigned int로 확장하여 해결했습니다.
💡 쉬운 설명
네트워크 데이터를 처리할 때 헤더의 길이를 담는 그릇이 너무 작아서 데이터가 넘치는 문제가 있었습니다. 이로 인해 데이터 길이가 실제와 다르게 계산되어 네트워크 통신 오류가 발생할 수 있었습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
net: stmmac: fix TSO header length truncation
stmmac_tso_xmit() stores the protocol header length returned by
stmmac_tso_header_size() in a u8. stmmac_tso_valid_packet() admits
headers up to 1023 bytes, so a header longer than 255 bytes wraps modulo
256 (486 becomes 230, 256 becomes 0).
A TCP over IPv6 socket carrying a few hundred bytes of sticky
destination/hop-by-hop options makes skb_tcp_all_headers() exceed 255
while staying below the 1023-byte limit, so such an skb reaches
stmmac_tso_xmit().
Widen proto_hdr_len to unsigned int, which is sufficient since the value
is bounded by the hardware limit, and adjust the debug print specifier
accordingly.
📍 영향받는 시스템
stmmac 드라이버를 사용하는 Linux 커널 버전
⚔️ 공격 벡터
특수하게 조작된 IPv6 옵션을 포함한 TCP 패킷을 전송하여 헤더 길이를 255바이트 이상으로 유도
🛡️ 대응 방법
stmmac_tso_xmit() 함수 내 proto_hdr_len 변수 타입을 u8에서 unsigned int로 업데이트한 최신 커널로 업데이트
🔧 검증 코드
출력된 커널 버전이 해당 패치가 적용된 최신 보안 업데이트 버전인지 확인