PJSIP - это бесплатная мультимедийная коммуникационная библиотека с открытым исходным кодом, написанная на C. В 2.16 и ранее наблюдается пе…
PJSIP - это бесплатная мультимедийная коммуникационная библиотека с открытым исходным кодом, написанная на C. В 2.16 и ранее наблюдается переполнение буфера при декодировании аудиокадр Opus из-за недостаточной валидации размера буфера на пути декодирования кодека Opus. Буферы декодирования FEC (dec_frame[].buf) были распределены на основе формулы PCM-производной: (sample_rate/1000) * 60 * channel_cnt * 2. При 8 кГц моно это дает только 960 байт, но codec_parse() может выводить закодированные кадры до MAX_ENCODED_PACKET_SIZE (1280) байты через opus_repacketizer_out_range(). Три pj_memcpy() вызова в codec_decode() скопировали байты размера ввода->размера без проверки границ, вызывая переполнение кучи буфера.
Переполнение кучи — это условие переполнения буфера, при котором перезаписываемый буфер выделен в области кучи памяти, что, как правило, означает выделение буфера с помощью функции наподобие malloc().
https://cwe.mitre.org/data/definitions/122.html →Открыть в коллекции CWE →Данная атака приводит к выходу целочисленной переменной за допустимый диапазон значений. Целочисленная переменная нередко используется в качестве смещения, например при выделении памяти и т. п. Злоумышленник, как правило, контролирует значение такой переменной и стремится вывести его за допустимые границы. Например, если рассматриваемое целое число инкрементируется сверх максимально допустимого значения, оно может обернуться в очень маленькое или отрицательное число, что повлечёт некорректное поведение. В худшем случае злоумышленник может выполнить произвольный код.
https://capec.mitre.org/data/definitions/92.html →Открыть в коллекции CAPEC →