Linux 커널에서는 다음 취약점이 해결되었습니다. ipv6: ioam: ioam6_event() 전에 hdr 포인터 새로 고침 Sashiko가 보고한 내용: ipv6_hop_ioam()에서 hdr 포인터는 다음을 가리키도록 초기화됩니다. skb의 선형 데이터 버퍼. 나중에 코드는 skb_ensure_writable()을 호출합니다. 버퍼를 재할당할 수 있습니다. if (skb_ensure_writable(skb, optoff + 2 + hdr->opt_len)) 드롭으로 이동; /* 추적 포인터가 변경되었을 수 있습니다 */ 추적 = (struct ioam6_trace_hdr *)(skb_network_header(skb) +
Linux 커널에서는 다음 취약점이 해결되었습니다.
ipv6: ioam: ioam6_event() 전에 hdr 포인터 새로 고침
Sashiko가 보고한 내용:
ipv6_hop_ioam()에서 hdr 포인터는 다음을 가리키도록 초기화됩니다. skb의 선형 데이터 버퍼. 나중에 코드는 skb_ensure_writable()을 호출합니다. 버퍼를 재할당할 수 있습니다.
if (skb_ensure_writable(skb, optoff + 2 + hdr->opt_len))
드롭으로 이동;
/* 추적 포인터가 변경되었을 수 있습니다 */
추적 = (struct ioam6_trace_hdr *)(skb_network_header(skb)
+ 선택 해제 + sizeof(*hdr));
ioam6_fill_trace_data(skb, ns, 추적, true);
ioam6_event(IOAM6_EVENT_TRACE, dev_net(skb->dev),
GFP_ATOMIC, (void *)trace, hdr->opt_len - 2);
skb가 복제되었거나 충분한 선형 헤드룸이 부족한 경우 skb_ensure_writable()은 pskb_expand_head()를 호출하여 재할당합니다. skb의 데이터 버퍼를 삭제하고 이전 버퍼를 해제하여 포인터를 무효화합니다. 그것. 코드는 다음 직후에 추적 포인터를 다시 계산합니다. skb_ensure_writable()을 호출하면 hdr 포인터를 다시 계산하지 못합니다.
이 패치는 이전에 hdr 포인터를 다시 계산하여 위의 문제를 수정합니다. hdr->opt_len을 ioam6_event()에 전달하여 UaF를 방지합니다.
왜 이 VPI인가 (설명가능 · 실험적)
VPI 산정 기준
| 영향도 | 98.00 |
| 악용 신호(추가 악용신호 없음) | ×1.00 |
| VPI | 98.00 |
VPI 공식 vpi-v1 기준