Добро пожаловать обратно, мои начинающие кибервоины!
Недавно специалисты по безопасности обнаружили критическую уязвимость в системе обработки IPv6-пакетов Windows, которой впоследствии был присвоен идентификатор CVE-2024-38063. Эта уязвимость может привести к отказу в обслуживании, а также к удалённому выполнению кода (RCE) через специально созданные IPv6-пакеты.
В отличие от многих уязвимостей, требующих взаимодействия с пользователем или установки специального программного обеспечения, CVE-2024-38063 потенциально может эксплуатироваться удалённо, без участия пользователя, что делает её особенно опасной. В этом руководстве мы подробно рассмотрим технические детали CVE-2024-38063 и рассмотрим, как её можно эксплуатировать.
Windows использует технологию, называемую объединением пакетов, которая объединяет несколько IP-пакетов для пакетной обработки. Обычно это делается для повышения производительности сети. При обработке этих объединённых пакетов Windows сначала обрабатывает заголовки расширений каждого пакета, а затем переходит к самим данным пакета.
В ходе этого процесса Windows создаёт связанный список объектов пакетов. Каждый из этих объектов содержит так называемый буфер NET_BUFFER, содержащий данные пакета, а также поле текущего смещения. Это поле показывает, насколько глубоко был проанализирован пакет.
Уязвимость проявляется при обработке определённого типа заголовка расширения, называемого «параметрами назначения». Если при разборе этого заголовка возникает ошибка, запускается функция обработки ошибок. Эта функция должна «возвращать» данные буферизированного пакета в начальное состояние и сбрасывать поле текущего смещения в ноль. Однако в этом процессе есть существенный недостаток: только первый пакет в связанном списке помечается как содержащий ошибку.
Вот тут-то и начинается самое интересное. Несмотря на эту ошибку, система продолжает анализировать заголовки расширений других пакетов в списке, даже если они были «отменены». В результате система обрабатывает непредвиденные данные. Вместо того, чтобы указывать на заголовки расширений, как должно быть, данные пакета теперь указывают на заголовок IPv6. Более того, поле смещения равно нулю вместо ожидаемого значения (обычно 0x28).
Настоящие проблемы начинаются, когда система обрабатывает заголовки расширения фрагментов. Чтобы вычислить длину данных, не являющихся заголовками, она вычитает фиксированное значение (0x30) из текущего смещения. Но помните, что наше смещение теперь ошибочно установлено равным нулю. Это вычитание приводит к переполнению, что приводит к очень большому значению длины.
В некоторых случаях тайм-аута это большое значение длины используется в 16-битных вычислениях. Это приводит к переполнению целочисленного значения, что в конечном итоге приводит к переполнению буфера при копировании данных. Именно это переполнение буфера открывает возможности для потенциального DoS-атаки и выполнения произвольного кода.
kali> git clone https://github.com/ynwarcs/CVE-2024-38063.git
Далее перейдите в новый каталог script.
kali> cd script
Затем установите scapy с помощью pip3.
kali> pip3 install scapy
iface='eth0′
ip_addr='1234:1234:1234′
mac_addr="
num_tries=20
num_batches=20
Скрипт пытается вызвать множественные повреждения, чтобы увеличить
вероятность сбоя. Подождите около минуты, чтобы сработал «Ipv6pReassemblyTimeout». В результате работа системы будет нарушена.
Эксплойт, как и любой другой эксплойт, не сработает при любых обстоятельствах.
Для устранения неполадок выполните следующие действия:
Сначала убедитесь, что IPv6-соединение установлено, выполнив команду «ping -6 {ipv6_address}» с хост-компьютера. Также проверьте, поддерживает ли ваш интернет-провайдер IPv6.
Если Scapy сообщает: «Mac-адрес для достижения пункта назначения не найден», устраните проблемы с MAC-адресом, вручную определив MAC-адрес цели.
Вы можете использовать Wireshark или Scapy для получения MAC-адреса, а затем добавить его в поле «mac_addr» в скрипте.
Наконец, устраните проблемы объединения пакетов, изменив настройки сетевого адаптера, такие как «Объединение пакетов» и «Модерация прерываний».
Недавно специалисты по безопасности обнаружили критическую уязвимость в системе обработки IPv6-пакетов Windows, которой впоследствии был присвоен идентификатор CVE-2024-38063. Эта уязвимость может привести к отказу в обслуживании, а также к удалённому выполнению кода (RCE) через специально созданные IPv6-пакеты.
В отличие от многих уязвимостей, требующих взаимодействия с пользователем или установки специального программного обеспечения, CVE-2024-38063 потенциально может эксплуатироваться удалённо, без участия пользователя, что делает её особенно опасной. В этом руководстве мы подробно рассмотрим технические детали CVE-2024-38063 и рассмотрим, как её можно эксплуатировать.
Подробности уязвимости
Чтобы понять уязвимость CVE-2024-38063, необходимо разобраться в тонкостях обработки пакетов IPv6 в Windows. Уязвимость возникает из-за сложного взаимодействия механизмов обработки пакетов в стеке TCP/IP Windows.Windows использует технологию, называемую объединением пакетов, которая объединяет несколько IP-пакетов для пакетной обработки. Обычно это делается для повышения производительности сети. При обработке этих объединённых пакетов Windows сначала обрабатывает заголовки расширений каждого пакета, а затем переходит к самим данным пакета.
В ходе этого процесса Windows создаёт связанный список объектов пакетов. Каждый из этих объектов содержит так называемый буфер NET_BUFFER, содержащий данные пакета, а также поле текущего смещения. Это поле показывает, насколько глубоко был проанализирован пакет.
Уязвимость проявляется при обработке определённого типа заголовка расширения, называемого «параметрами назначения». Если при разборе этого заголовка возникает ошибка, запускается функция обработки ошибок. Эта функция должна «возвращать» данные буферизированного пакета в начальное состояние и сбрасывать поле текущего смещения в ноль. Однако в этом процессе есть существенный недостаток: только первый пакет в связанном списке помечается как содержащий ошибку.
Вот тут-то и начинается самое интересное. Несмотря на эту ошибку, система продолжает анализировать заголовки расширений других пакетов в списке, даже если они были «отменены». В результате система обрабатывает непредвиденные данные. Вместо того, чтобы указывать на заголовки расширений, как должно быть, данные пакета теперь указывают на заголовок IPv6. Более того, поле смещения равно нулю вместо ожидаемого значения (обычно 0x28).
Настоящие проблемы начинаются, когда система обрабатывает заголовки расширения фрагментов. Чтобы вычислить длину данных, не являющихся заголовками, она вычитает фиксированное значение (0x30) из текущего смещения. Но помните, что наше смещение теперь ошибочно установлено равным нулю. Это вычитание приводит к переполнению, что приводит к очень большому значению длины.
В некоторых случаях тайм-аута это большое значение длины используется в 16-битных вычислениях. Это приводит к переполнению целочисленного значения, что в конечном итоге приводит к переполнению буфера при копировании данных. Именно это переполнение буфера открывает возможности для потенциального DoS-атаки и выполнения произвольного кода.
Стратегия эксплуатации
Стратегия эксплуатации использует функцию «Ipv6pReceiveFragment» и включает в себя следующие шаги:- Отправка неверно сформированных параметров назначения для вызова «IppSendError».
- Затем отправьте пакет фрагментов.
- Использовать объединение пакетов для сброса данных и смещения второго пакета.
- Вызвать переполнение в «Ipv6pReceiveFragment», создав объект повторной сборки с большой длиной данных фрагмента в 16 бит.
- Подождите 1 минуту, чтобы сработал «Ipv6pReassemblyTimeout».
- Вызвать целочисленное переполнение при расчете размера буфера, что приведет к переполнению буфера в куче.
Эксплуатация
В этом руководстве мы будем использовать скрипт Python, реализующий эксплойт CVE-2024-38063, разработанный ynwarcs .Шаг 1: Настройка среды
Для начала нам нужно скачать скрипт проверки концепции с github.com.kali> git clone https://github.com/ynwarcs/CVE-2024-38063.git
Далее перейдите в новый каталог script.
kali> cd script
Затем установите scapy с помощью pip3.
kali> pip3 install scapy
Шаг 2: Подготовьте сценарий
Откройте скрипт и измените следующие поля:- iface: укажите сетевой интерфейс для использования (например, «eth0» или «wlan0» в Linux).
- ip_addr: Установите IPv6-адрес целевой системы.
- num_tries и num_batches: отрегулируйте эти параметры, чтобы контролировать количество отправляемых пакетов.
- mac_addr: Оставьте пустым, если только Scapy не сможет автоматически найти MAC-адрес.
iface='eth0′
ip_addr='1234:1234:1234′
mac_addr="
num_tries=20
num_batches=20
Шаг 3: Запуск эксплойта
Скрипт отправит несколько пакетов для эксплуатации уязвимости, включая пакет IPv6 с искажённым заголовком расширения «Destination Options». Он также отправит фрагмент IPv6 № 1, потенциально объединённый с первым пакетом, а затем фрагмент IPv6 № 2 (с тем же идентификатором) для завершения второго фрагмента.Скрипт пытается вызвать множественные повреждения, чтобы увеличить
вероятность сбоя. Подождите около минуты, чтобы сработал «Ipv6pReassemblyTimeout». В результате работа системы будет нарушена.
Эксплойт, как и любой другой эксплойт, не сработает при любых обстоятельствах.
Для устранения неполадок выполните следующие действия:
Сначала убедитесь, что IPv6-соединение установлено, выполнив команду «ping -6 {ipv6_address}» с хост-компьютера. Также проверьте, поддерживает ли ваш интернет-провайдер IPv6.
Если Scapy сообщает: «Mac-адрес для достижения пункта назначения не найден», устраните проблемы с MAC-адресом, вручную определив MAC-адрес цели.
Вы можете использовать Wireshark или Scapy для получения MAC-адреса, а затем добавить его в поле «mac_addr» в скрипте.
Наконец, устраните проблемы объединения пакетов, изменив настройки сетевого адаптера, такие как «Объединение пакетов» и «Модерация прерываний».