На этой неделе мы писали про критическое обновление MS15-034 для драйвера http.sys на Windows 7+ (включая Windows 10 TP). Злоумышленник с использованием специально сформированного заголовка запроса HTTP-протокола может удаленно исполнить код, организовать DoS-атаку или уронить систему в BSOD как на клиентских так и на серверных выпусках Windows. Сам драйвер http.sys загружается Windows на самых ранних этапах и отвечает за реализацию логики работы HTTP-протокола (реализует прикладной уровень модели OSI в Windows).



Напрямую эта уязвимость относится к серверным выпускам Windows, поскольку службы IIS, которые отвечают за механизмы реализации веб-сервера, используют этот драйвер для открытия и обслуживания HTTP-портов входящих подключений, которые и могут быть использованы для компрометации системы. Однако, на некоторых современных клиентских выпусках Windows (в зависимости от конфигурации системы и ее сервисов), работающие сервисы также могут открывать HTTP-порты для прослушивания входящих подключений.



Сама эксплуатация (integer-overflow) возможна через задание специального значения поля Range заголовка HTTP (значение регламентировано RFC 2616, 14.35.1). Ниже приведен пример такого запроса.

GET / HTTP/1.1
Host: MS15034
Range: bytes=0-18446744073709551615

Этот запрос также может быть использован для проверки системы на уязвимость.


Рис. Предложение на подпольном форуме о продаже эксплойта для MS15-034.

Update: We are seeing active exploits hitting our honeypots from 78.186.123.180. We will be going to Infocon Yellow as these scans use the DoS version, not the «detection» version of the exploit. The scans appear to be «Internet wide».

isc.sans.edu

Одна из обнаруженных версий эксплойта ITW имела вид:

GET /%7Bwelcome.png HTTP/1.1
User-Agent: Wget/1.13.4 (linux-gnu)
Accept: */*
Host: [server-ip]
Connection: Keep-Alive
Range: bytes=18-18446744073709551615

Комментарии (17)


  1. nikitasius
    18.04.2015 12:11
    +25

    Всем солнечной субботы! Это даже не решето, это:
    image


    1. BalinTomsk
      19.04.2015 05:31
      +1

      Видать в компании Microsoft не знают что такое юнит-тесты.
      Примеры кода Microsoft которые мне попадались — ужасный шлак.


  1. MichaelBorisov
    18.04.2015 13:02
    +9

    Range: bytes=18-18446744073709551615

    Я вот думаю: ошибка в драйвере http.sys, скорее всего, связана с переполнением целого. В RFC723x черным по белому написано, что протокол не имеет ограничений на длину целых чисел, и что реализации должны быть готовы к произвольной их длине, и не оставлять в этом случае дыр.

    Facepalm


  1. amarao
    18.04.2015 15:01
    +19

    Я не буду троллить на тему «винда дырявая» — CVE у всех бывают.

    Я задам другой вопрос: почему HTTP обрабатывается с правами ядра? Это вполне себе user-space задача и могла бы решаться как обычная библиотека, загружающаяся в адресное пространство процесса. В этом случае размер проблемы был бы ограничен конкретным тредом/приложением, а не BSOD'ом.


    1. Nomad1
      18.04.2015 15:12
      +1

      Я вообще увидев http.sys решил, что это апрельская шутка запоздала. Ан нет, kernel mode listener that handles all HTTP traffic for Windows. Может, так быстрее, по аналогии с kernel module для jpeg-декодирования в Linux/Android, или… (на этом мысль обрывается, в голову не приходят еще разумные аргументы).


    1. mejedi
      18.04.2015 15:16

      Так немного быстрее [1, 2].


      1. amarao
        18.04.2015 15:33
        +3

        Да, я понимаю соблазн. Но в случае с bsd, насколько я понимаю, оно всего лишь буфферизирует заголовок http, не вдаваясь в детали (условно говоря — до двойного перевода строки). А tempesta — это «для тех, кто смел и понимает».

        В этом случае-то проблема не в том, что кто-то использует ядро для акселерации user-space задач, а в том, что этот код отдаётся всем кастомерам и включен по-умолчанию на всём, что хоть как-то относится к http с серверной стороны.


        1. ivlad
          19.04.2015 12:14
          +5

          Лет 10-15 назад была битва Windows + IIS vs Linux + Apache на http бенчмарках. Microsoft приложила тогда много усилий (думаю, это случилось как раз в районе Windows 2000) к тому, что б http сервер у них умел больше rps. http.sys — результат этих усилий.

          Впрочем, на мой взгляд, это так и не помогло Microsoft занять лидирующие позиции на рынке интернет-серверов (в протовоположность интранет).


  1. Ivan_83
    18.04.2015 18:13
    +2

    Самый интересный вопрос: а нахрена HTTP в ядре держать?!!!


    1. TerAnYu
      18.04.2015 18:25
      +3

      Возможно что бы проверить акивацию винды или работа wsus-сервиса (сервиса обновления самой системы).
      Так же KMS-активация, она через http(s) работает.


      1. Ivan_83
        18.04.2015 20:59
        +1

        Оно вроде ещё и в ХР было, а там не было никаких KMS активаций.
        WSUS работает через службу фоновой загрузки и WinHTTP апи, насколько я понимаю.


  1. AndersonDunai
    18.04.2015 22:41
    -16

    image


    1. AHTOLLlKA
      19.04.2015 11:29
      +3

      это уже не решето, читай первый коммент


  1. Boba_Fett
    19.04.2015 14:56
    +1

    Однако, на некоторых современных клиентских выпусках Windows (в зависимости от конфигурации системы и ее сервисов

    Где-нибудь имеется более подробная информация о соответствующих настройках системы?


    1. Imposeren
      17.05.2015 20:50

      толи автокад, то ли 3д-макс, то ли еще что-то дорогое и масштабное, ставят такие себе «хелп-серверы» отдающие справочную информацию по http на каком-нибудь нестандартном локальном порту. И кто знает — может иногда оно не только локально работает


  1. Isopropil
    19.04.2015 18:32
    -2

    Ну вот всегда говорил, что индусская прошивка для игровых приставок — не лучшее решение для установки на сервер. Вот вам и очередное подтверждение.


  1. realscorp
    19.04.2015 19:26

    Печаль, но бывает.
    Между тем 13 апреля вышли патчи для серверных ОС Microsoft по поводу этого CVE, гуглить по «KB3042553».