🇰🇷 한글 설명
Linux 커널의 vmxnet3 드라이버에서 XDP(eXpress Data Path)를 사용할 때 패킷 데이터가 손상되는 취약점입니다. BPF 프로그램이 캡슐화 헤더를 추가하여 패킷을 전송할 경우, DMA 주소 계산 오류로 인해 잘못된 데이터가 전송되어 연결 문제가 발생할 수 있습니다.
💡 쉬운 설명
가상 네트워크 카드를 사용하는 환경에서 특정 네트워크 처리 기술을 쓸 때 데이터가 깨지는 문제입니다. 이로 인해 인터넷 연결이 끊기거나 데이터 전송에 오류가 생길 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
vmxnet3: Fix packet corruption in vmxnet3_xdp_xmit_frame
Andrew and Nikolay reported connectivity issues with Cilium's service
load-balancing in case of vmxnet3.
If a BPF program for native XDP adds an encapsulation header such as
IPIP and transmits the packet out the same interface, then in case
of vmxnet3 a corrupted packet is being sent and subsequently dropped
on the path.
vmxnet3_xdp_xmit_frame() which is called e.g. via vmxnet3_run_xdp()
through vmxnet3_xdp_xmit_back() calculates an incorrect DMA address:
page = virt_to_page(xdpf->data);
tbi->dma_addr = page_pool_get_dma_addr(page) +
VMXNET3_XDP_HEADROOM;
dma_sync_single_for_device(&adapter->pdev->dev,
tbi->dma_addr, buf_size,
DMA_TO_DEVICE);
The above assumes a fixed offset (VMXNET3_XDP_HEADROOM), but the XDP
BPF program could have moved xdp->data. While the passed buf_size is
correct (xdpf->len), the dma_addr needs to have a dynamic offset which
can be calculated as xdpf->data - (void *)xdpf, that is, xdp->data -
xdp->data_hard_start.
📍 영향받는 시스템
vmxnet3 드라이버를 사용하는 Linux 커널 환경 (Cilium 등 XDP 활용 환경)
⚔️ 공격 벡터
직접적인 공격보다는 특정 네트워크 구성(XDP 기반 캡슐화) 시 데이터 무결성이 깨지는 방식
🛡️ 대응 방법
해당 취약점이 수정된 최신 버전의 Linux 커널로 업데이트
🔧 검증 코드
현재 실행 중인 커널 버전을 확인하여 취약점이 해결된 패치 버전인지 확인