Недавно стало известно о критической уязвимости в системе обработки IPv6-пакетов Windows, которая получила идентификатор CVE-2024-38063. Уязвимость может привести к отказу в обслуживании (DoS), а также к удаленному выполнению кода (RCE) через специально сформированные IPv6-пакеты. В отличие от многих уязвимостей, требующих взаимодействия пользователя или наличия определенного ПО, CVE-2024-38063 может быть выполнена удаленно без какого-либо участия пользователя, что делает ее особенно опасной. Давайте рассмотрим технические аспекты CVE-2024-38063, и PoC (практическую эксплуатацию уязвимости).
Еще по теме: Как взломать Windows 11 используя PowerShell
Уязвимость CVE-2024-38063
Чтобы понять CVE-2024-38063, нужно разобраться в том, как Windows обрабатывает IPv6-пакеты. Уязвимость возникает из-за сложного взаимодействия механизмов обработки пакетов в стекe TCP/IP Windows.
Windows использует технику, называемую объединением пакетов (packet coalescing), где несколько IP-пакетов объединяются для пакетной обработки. Это делается для улучшения производительности сети. Во время обработки таких объединенных пакетов Windows сначала обрабатывает заголовки расширения для каждого пакета, а затем переходит к самим данным пакета.
В процессе обработки Windows создает связанный список объектов пакетов. Каждый из этих объектов содержит NET_BUFFER, который хранит сами данные пакета, а также поле текущего смещения (current-offset), указывающее, насколько далеко был проанализирован пакет.
Статья в образовательных целях, для обучения этичных хакеров. Несанкционированный взлом Windows является незаконным и рассматривается как уголовное преступление. Ни редакция spy-soft.net, ни автор не несут ответственности за ваши действия.
Уязвимость проявляется при обработке определенного типа заголовка расширения, называемого «параметры назначения» (destination options). Если при анализе этого заголовка возникает ошибка, срабатывает функция обработки ошибок. Эта функция должна «откатить» буферизованные данные пакета к исходной точке и сбросить поле текущего смещения до нуля. Однако в этом процессе есть критический изъян: только первый пакет в связанном списке помечается как содержащий ошибку.
Вот тут и начинаются проблемы. Несмотря на эту ошибку, система продолжает анализировать заголовки расширения других пакетов в списке, даже если они были «откачены». В результате система начинает обрабатывать неожиданные данные. Вместо того чтобы указывать на заголовки расширения, как должно быть, данные пакета теперь указывают на заголовок IPv6. Более того, поле смещения установлено в ноль вместо ожидаемого значения (обычно 0x28).
Настоящие проблемы начинаются, когда система обрабатывает заголовки расширения фрагментов. Для расчета длины данных без учета заголовков она вычитает фиксированное значение (0x30) из текущего смещения. Но помните, наше смещение теперь неправильно установлено на ноль. Это вычитание вызывает переполнение, что приводит к очень большому значению длины.
В определенных сценариях тайм-аута это большое значение длины используется в 16-битных расчетах. Это вызывает целочисленное переполнение, которое в конечном итоге приводит к переполнению буфера при копировании данных. Именно это переполнение буфера открывает возможность для DoS и выполнения произвольного кода.
Эксплуатация уязвимости CVE-2024-38063
Я буду использовать скрипт на Python, реализующий эксплойт CVE-2024-38063.
Сначала нужно скачать демонстрационный скрипт с github.com:
1 |
git clone https://github.com/ynwarcs/CVE-2024-38063.git |
Затем перейдите в новый каталог script:
1 |
cd script |
Установите scapy через pip3:
1 |
pip3 install scapy |
Откройте скрипт и измените следующие поля:
- iface — укаызывает сетевой интерфейс, который нужно использовать (например, eth0 или wlan0 на Linux).
- ip_addr — устанавливает IPv6-адрес целевой системы.
- num_tries и num_batches — изменяет количество отправленных пакетов.
- mac_addr — не стоит изменять, если Scapy не может автоматически найти MAC-адрес.
Вот пример того, как может выглядеть настроенный скрипт:
1 |
iface='eth0' ip_addr='1234:1234:1234' mac_addr='' num_tries=20 num_batches=20 |
После выполнения, скрипт отправит несколько пакетов для эксплуатации уязвимости, включая IPv6-пакет с искаженным заголовком расширения. Также будет отправлен IPv6-фрагмент №1, возможно, соединенный с первым пакетом, а затем IPv6-фрагмент №2 (с тем же идентификатором) для завершения второго фрагмента.
Скрипт попытается вызвать несколько сбоев, чтобы увеличить вероятность краха системы. Подождите около минуты, чтобы сработал Ipv6pReassemblyTimeout. В результате система будет нарушена.
Если возникли проблемы:
- Убедитесь, что IPv6-соединение установлено, выполнив команду “ping -6 {ipv6_address}” с ПК-хоста. Также проверьте, поддерживает ли ваш интернет-провайдер IPv6.
- Если Scapy сообщает «Mac address to reach destination not found», найдите MAC-адрес целевой системы вручную. Используйте Wireshark или Scapy для получения MAC-адреса и добавьте его в поле mac_addr в скрипте.
- Устраните проблемы с объединением пакетов, изменив настройки сетевого адаптера, такие как Packet Coalescing и Interrupt Moderation.
CVE-2024-38063 — серьезная уязвимость, затрагивающая системы Windows с включенным IPv6. Ее обнаружение подчеркивает важность постоянных исследований в области информационной безопасности и необходимость своевременного обновления систем. Обновите свою систему как можно скорее!
ПОЛЕЗНЫЕ ССЫЛКИ: