← All reports

Native `GPUVideoDecoderVTBH265` with HEVCUtilities NAL/VPS parsing

Component: WebKit WebRTC codecs | d9eaeec

WebRTC 비디오 디코딩은 sandbox가 적용된 GPU process에서 수행됩니다. WebContent process가 codec을 협상하면, GPU process는 LibWebRTCCodecsProxy를 통해 decoder를 생성합니다. 이 decoder가 remote peer로부터 도착하는 frame을 처리합니다. Annex-B H265 stream은 NAL start code로 스스로 구분되며, VPS/SPS/PPS parameter set을 포함합니다. CMFormatDescription을 구성하려면 이 parameter set을 bit 단위로 파싱해야 합니다. 이번 commit에서는 VideoToolbox 기반의 native H265 decoder인 GPUVideoDecoderVTBH265가 추가되어 libwebrtc의 RTCVideoDecoderH265를 대체했습니다. 또한 HEVCUtilities에 NAL 탐색과 VPS 파싱/변환 기능이 추가되었고, LibWebRTCCodecsProxy::createLocalDecoder를 통해 연결되었습니다.

수신 WebRTC 비디오의 H265 bitstream 파싱이 third-party library에서 GPU process 내 WebKit 자체 코드로 옮겨졌습니다. 이 코드는 remote WebRTC peer가 직접 도달할 수 있는 위치에 있습니다.

좁은 범위: 새로 추가된 HEVCUtilities의 NAL 경계 탐색과 VPS 필드 추출(예: max-reorder-pics)은 공격자의 영향을 받는 byte stream을 파싱합니다. 따라서 start code 탐색과 parameter set 길이 필드의 bounds를 점검해야 합니다. 넓은 범위: 같은 공유 계층의 SPS/PPS 파싱 경로도 remote peer가 동일하게 도달할 수 있습니다. HEVCUtilities의 parameter set 파서 전체를 검토할 필요가 있습니다. 징후: stream에서 읽은 길이 값만큼 bit reader를 전진시키면서 남은 byte 수는 확인하지 않는 코드.