Разработчики FreeBSD выпустили экстренный патч против критической уязвимости с переполнением буфера в утилите ping. Проблема получила CVE-2022-23093 (в системе оценок CVSS уязвимость оценена в 9,8 балла — высокий уровень риска) и потенциально может привести к удалённому выполнению кода с правами root при проверке с помощью ping внешнего хоста, подконтрольного злоумышленнику. Исправления бага доступны в обновлениях FreeBSD 13.1-RELEASE-p5, 12.4-RC2-p2 и 12.3-RELEASE-p10.
Разработчики и профильные эксперты пояснили, что уязвимость связана с переполнением буфера в коде, используемом в утилите ping для разбора ICMP-сообщений, приходящих в ответ на проверочный запрос.
Код отправки и приёма ICMP-сообщений в ping использует raw-сокеты и выполняется с повышенными привилегиями, так как утилита поставляется с флагом setuid root, а обработка ответа производится на стороне ping через реконструкцию IP- и ICMP-заголовков пакетов, получаемых из raw-сокета. Собственно, выделенные IP- и ICMP-заголовки копируются функцией pr_pack() в буферы, не принимая во внимание то, что в пакете после заголовка IP могут присутствовать дополнительные расширенные заголовки.
Подобные заголовки выделяются из пакета и включаются в блок заголовков, но не учитываются при расчёте размера буфера. В случае если хост в ответ на отправленный ICMP-запрос вернёт пакет с дополнительными заголовками, их содержимое будет записано в область за границей буфера в стеке. В итоге атакующий может перезаписать до 40 байт данных в стеке, что потенциально позволяет добиться выполнения своего кода.
Опасность проблемы смягчает то, что в момент проявления ошибки процесс находится в состоянии изоляции системных вызовов (capability mode), что затрудняет злоумышленнику получение доступа к остальной системе после попытки эксплуатации уязвимости.
Тем не менее, исследователи рекомендуют обновить уязвимые системы до поддерживаемой стабильной версии FreeBSD. Также пока нет сведений, подвержены ли другие BSD-системы выявленной уязвимости, так как отчётов об уязвимости в NetBSD, DragonFlyBSD и OpenBSD пока не выпущено.