вНовости программирования

Microsoft выпустила аварийное внеплановое обновление для исправления «ужасной» уязвимости в Windows

Аварийное внеплановое обновление произошло ночью. Компания Microsoft исправила уязвимость в службе MsMpEng, недавно обнаруженную двумя экспертами компании Google, назвавшими её «ужасной» («crazy bad») и примером «худшей RCE-уязвимости Windows на их памяти».

Изначально эксперты Google не раскрывали деталей — не была известна даже версия Windows, в которой была обнаружена ошибка. Но завеса тайн приоткрылась после обновления с исправлением, после чего эксперты вместе с Microsoft поделились более подробными сведениями об обнаруженной «дыре».

MsMpEng

И где находилась уязвимость?

В обоих источниках указано, что ошибка была обнаружена в механизме защиты от вредоносных программ (Microsoft Malware Protertion Engine, MsMpEng) — службе, поставляемой в ядре таких продуктов, как Windows 7, Windows 8.1, Windows 10 и Windows Server 2016. Кроме того, данная служба используется множеством инструментов безопасности от Microsoft, таких как:

  • Windows Defender;
  • Microsoft Security Essentials;
  • Microsoft Endpoint Protection;
  • Microsoft System Center Endpoint Protection;
  • Windows Intune Endpoint Protection;
  • Microsoft Forefront Security for SharePoint Service Pack 3;
  • Microsoft Forefront Endpoint Protection 2010.

Со слов экспертов, обнаруженная уязвимость является ошибкой типизации в NScript — компоненте MsMpEng, который «обрабатывает любые активности сети и файловой системы, которые похожи JavaScript«.

Уязвимостью легко воспользоваться

Исследователи утверждают, что для использования уязвимости не требуется интерактивного вмешательства пользователя. Например, они рассматривают такие сценарии, как отправка письма, содержащего эксплойт JavaScript, на электронную почту, или доставка JS-эксплойта тысячам и даже миллионам пользователей через рекламу на авторитетных сайтах.

Например, пробный эксплойт можно поместить в твит:

Тавис Орманди, один из исследователей Google Project Zero, заявил:

Уязвимости в MsMpEng дают широкие возможности для взлома Windows — из-за привилегий, доступности и распространенности сервиса.

Это связано с тем, что служба работает без «песочницы» — базовой и очень эффективной функции безопасности, и к тому же сервис исполняется как NT AUTHORITY\SYSTEM — системный уровень пользователя с правами без ограничений.

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

Microsoft исправила проблему с MsMpEng за несколько дней

В отличие от прошлых инцидентов, когда Microsoft позволяла эксплуатируемым 0day-уязвимостям разрастаться космическими масштабами, не выпуская исправления по несколько месяцев, на этот раз компания выпустила исправление очень быстро, всего лишь за несколько дней.

Согласно рекомендации Microsoft, уязвимость доступна в Microsoft Malware Protection Engine, начиная с версии v1.1.13701.0, и исправлена в v1.1.13704.0 прошлой ночью, а значит, затрагивает тех, кто не обновился.

Компания Microsoft также заявила, что на последних платформах риск эксплуатации должен быть ниже, если пользователь включил функцию CFG (Control Flow Guard), которая значительно усложняет эксплуатацию уязвимостей на основе использования памяти.

А мне не пришёл патч, что делать?

Был опубликован небольшой PowerShell-скрипт, позволяющий найти все уязвимые Windows Defender в доменной сети:

$ErrorActionPreference = "SilentlyContinue" $computers = Get-ADComputer -Filter 'Enabled -eq $true' -Properties Enabled | select-object -expandproperty name foreach ($computer in $computers) { $productVersion = "" Write-Output $computer try{ $w32reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine',$computer ) $keypath = 'SOFTWARE/Microsoft/Windows Defender/Signature Updates/' $productKey = $w32reg.OpenSubKey($keypath) if ($productKey) { $productVersion = $productKey.GetValue('EngineVersion') if ($productVersion -eq "1.1.13701.0") { write-output "Version: $productVersion VULNERABLE!" } else { write-output "Version OK: $productVersion" } Clear-Item Variable:productVersion } else {write-output "Windows Defender not found"} } catch{ write-output "Computer not accessible" } }

Типичный программист.

Источник: Типичный программист