Удалённо эксплуатируемая root-уязвимость в утилите ping, поставляемой во FreeBSD

Во FreeBSD выявлена уязвимость (CVE-2022-23093) в утилите ping, входящей в базовую поставку. Проблема потенциально может привести к удалённому выполнению кода с правами root при проверке при помощи ping внешнего хоста, подконтрольного злоумышленнику. Исправление предложено в обновлениях FreeBSD 13.1-RELEASE-p5, 12.4-RC2-p2 и 12.3-RELEASE-p10. Подвержены ли другие BSD-системы выявленной уязвимости пока не ясно (отчётов об уязвимости в NetBSD, DragonFlyBSD и OpenBSD пока не появилось).

Уязвимость вызвана переполнением буфера в коде разбора ICMP-сообщений, приходящих в ответ на проверочный запрос. Код отправки и приёма ICMP-сообщений в ping использует raw-сокеты и выполняется с повышеннымми привилегиями (утилита поставляется с флагом setuid root).
Обработка ответа производится на стороне ping через реконструкцию IP- и ICMP-заголовков пакетов, получаемых из raw-сокета. Выделенные IP- и ICMP-заголовки копируются функцией pr_pack() в буферы, но принимая во внимание то, что в пакете после заголовка IP могут присутствовать дополнительные расширенные заголовки.

Подобные заголовки выделяются из пакета и включаются в блок заголовков, но не учитываются при расчёте размера буфера. В случае если хост в ответ на отправленный ICMP-запрос вернёт пакет с дополнительными заголовками, их содержимое будет записано в область за границей буфера в стеке. В итоге атакующий может перезаписать до 40 байт данных в стеке, что потенциально позволяет добиться выполнения своего кода.

Источник: http://www.opennet.ru/opennews/art.shtml?num=58232