Новости
Найдена уязвимость в утилите ping для FreeBSD

Найдена уязвимость в утилите ping для FreeBSD

Во FreeBSD найдена уязвимость, позволяющая выполнить код от пользователя root. Самое забавное, что на этот раз "дыра" была обнаружена в утилите ping.

ping – одна из самых базовых сетевых утилит. По сути она позволяет проверить доступность компьютера в сети. Принцип работы очень прост: посылаешь специальный сетевой пакет, его принимает адресат и отправляет ответ назад с необходимой информацией. Это не единственный вариант, как можно применять ping и сам протокол ICMP, но, пожалуй, самый частый.

Немного о "пингах смерти" 90-х

Сегодняшняя новость имеет мало общего с "пингом смерти" (ping of death), который использовался для сетевых атак в 90-ые годы. Однако, именно эта "связь веков" у меня и вызвала улыбку.

Тогда, на заре развития сети Интернет многие пользователи "разыгрывали" своих сетевых друзей, использовавших, например Windows 95. Достаточно было знать IP "жертвы": посылался запрос

ping -l 65510 {{ IP }}

И компьютер по ту сторону уходил в BSOD (синий экран смерти).

Если не вдаваться в детали, "65510" – это длина дополнительных данных в пакете запроса. С учётом необходимых данных для пинга, размер пакета переваливал за размер буфера – происходило переполнение на ПК адресата, какие-то другие важные данные перетирались и происходила ошибка.

"Обратный пинг смерти", наши дни

Что же происходит в наши дни с утилитой ping? Ситуация, на самом деле, похожая. В рамках уязвимости CVE-2022-23093 атаке подвергается уже отправитель запроса.

Если коротко: можно в ответ на пинг отправить пакет с ответом, содержащим дополнительные данные между IP и ICMP заголовками. Данные будут скопированы в буфер меньшего размера, следовательно, переполнение. Всё это делается при помощи raw-сокетов, с привилегиями root-а.

На самом деле атакующий сможет записать так только 40 байт в стек. Но сам факт того, что это опять ping, опять переполнение буфера, но в этот раз "наоборот", меня сильно повеселил.

И да, исправление уже добавлено в FreeBSD 13.1-RELEASE-p5, 12.4-RC2-p2 и 12.3-RELEASE-p10. Не забывайте обновляться!