Linux 커널에서는 다음 취약점이 해결되었습니다. ovpn: tcp - 스트림에서 패킷 추출 수정 ovpn_tcp_recv에서 TCP 스트림 데이터를 처리할 때 우리는 여러 개의 병합된 패킷을 포함할 수 있는 __strp_rcv에서 복제된 skbs. 현재 구현에는 두 가지 버그가 있습니다. 1. 헤더 오프셋 오버플로: 큰 오프셋과 함께 pskb_pull 사용 병합된 skb로 인해 skb->data - skb->head가 u16 스토리지를 초과함 skb->network_header. 이로 인해 skb_reset_network_header가 발생합니다.
Linux 커널에서는 다음 취약점이 해결되었습니다.
ovpn: tcp - 스트림에서 패킷 추출 수정
ovpn_tcp_recv에서 TCP 스트림 데이터를 처리할 때 우리는 여러 개의 병합된 패킷을 포함할 수 있는 __strp_rcv에서 복제된 skbs. 현재 구현에는 두 가지 버그가 있습니다.
헤더 오프셋 오버플로: 큰 오프셋과 함께 pskb_pull 사용 병합된 skb로 인해 skb->data - skb->head가 u16 스토리지를 초과함 skb->network_header. 이로 인해 skb_reset_network_header가 실패합니다. 캡슐화 해제된 내부 패킷에서 패킷 삭제가 발생합니다.
정렬되지 않은 프로토콜 헤더: 임의의 프로토콜 헤더에서 패킷 추출 병합된 TCP 스트림 내의 위치는 정렬을 제공하지 않습니다. 성능 저하를 초래하는 패킷 데이터에 대한 보장 효율적이고 정렬되지 않은 액세스가 없는 아키텍처. 추가적으로, openvpn의 TCP 패킷에 대한 2바이트 길이 접두사는 후속 오류를 발생시킵니다. 4바이트 opcode 및 패킷 ID 필드는 본질적으로 잘못 정렬됩니다.
각 openvpn 패킷에 대해 새 skb를 할당하여 두 문제를 모두 해결하고 skb_copy_bits를 사용하여 패킷 내용만 새 파일로 추출 버퍼, 2바이트 길이 접두사 건너뛰기. 그리고 길이도 미리 확인해보세요 할당을 수행하는 함수를 호출하여 생성을 방지합니다. 잘못된 skb입니다.
패킷을 사용자 공간으로 전달해야 하는 경우 2바이트 접두사는 다음과 같습니다. 정렬이 어긋나지 않고 안전하게 머리에 밀어 넣어졌습니다.
부작용으로 이 접근 방식은 비용이 많이 드는 선형화도 피합니다. pskb_pull은 페이지 조각이 있는 복제된 skbs에서 트리거됩니다. 테스트에서는 그 결과 TCP 처리량이 최대 74% 향상되었습니다.
왜 이 VPI인가 (설명가능 · 실험적)
VPI 산정 기준
| 영향도 | 75.00 |
| 악용 신호(추가 악용신호 없음) | ×1.00 |
| VPI | 75.00 |
VPI 공식 vpi-v1 기준