Asus снова взялся за старое. Вы можете отправить любой исполняемый файл или даже прошивку BIOS на компьютер Asus под видом обновления — этот файл будет автоматически запущен на исполнение с максимальными привилегиями, а прошивка установлена, без каких-либо проверок. Ничего не нужно предпринимать — система взломает сама себя, автоматически.
Вкратце: компьютеры с материнскими платами Asus осуществляют запросы к удалённому серверу по HTTP на регулярной основе. Причиной является программное обеспечение LiveUpdate, которое предустанавливается на компьютеры Asus. Оно отвечает за скачивание новых прошивок BIOS/UEFI и исполняемых файлов. Обновления поступают в архивах ZIP по чистому HTTP, распаковываются во временную папку, а исполняемый файл запускается от имени пользователя. Не происходит никакой верификации файлов или аутентификации при их загрузке, что позволяет провести MiTM-атаку и банальную эскалацию привилегий до NT AUTHORITYSYSTEM
.
Asus распространяет программу LiveUpdate со своими ноутбуками и ПК очень давно, ещё со времён Windows XP, более десяти лет. За это время принцип её работы практически не изменился. Клиент делает незашифрованные запрорсы по HTTP к серверам обновления Asus (liveupdate01.asus.com или dlcdnet.asus.com, в зависимости от версии).
Наапример, на ноутбуке модели UX303UA последняя версия LiveUpdate пытается достучаться по следующим адресам. Она делает это до тех пор, пока не получит ответ, отличный от ошибки 404.
- http://liveupdate01.asus.com/pub/ASUS/LiveUpdate/Release/Notebook/UX303UA.ide
- http://liveupdate01.asus.com/pub/ASUS/LiveUpdate/Release/Notebook/UX303UA.idx
- http://dlcdnet.asus.com/pub/ASUS/LiveUpdate/Release/Eee%20Book/UX303UA.ide
- http://dlcdnet.asus.com/pub/ASUS/LiveUpdate/Release/Eee%20Book/UX303UA.idx
Эти файлы “.idx” довольно сложные, они позволяют накатить разные обновления, в том числе перепрошить BIOS через WinFlash (если программа установлена) и установить драйверы.
Например, вот запись в XML-файле обновлённого драйвера ACPI для ноутбука ET1602:
<item name="ATK0110 ACPI Utility">
<description l_id="1033" title="ATK0110 ACPI Utility">ATK0110 ACPI Utility</description>
<description l_id="1028" title="ATK0110 ACPI Utility">ATK0110 ACPI Utility</description>
<description l_id="2052" title="ATK0110 ACPI Utility">ATK0110 ACPI Utility</description>
<type> driver </type>
<hwid version="1043.2.15.37" date="08/13/2004"> ACPIATK0110 </hwid>
<os> WinXP </os>
<version> 1043.2.15.37 </version>
<size> 837015 </size>
<release-date> 1219104000 </release-date>
<zip-path> pub/ASUS/DigitalHome/DAV/B202/ACPI_V104321537.zip </zip-path>
<execute> .AsusSetup.exe </execute>
<index> 1 </index>
</item>
Здесь самое классное — это процедура распаковки и автоматического запуска на исполнение файла .exe.
Это ещё цветочки. Представьте, что можно легко непринуждённо и перепрошить BIOS.
<item name="BIOS 210">
<description l_id="1033" title="BIOS 210">To solve the issue which charge speed will be slower when battery capacity is above 60%</description>
<description l_id="1028" title="BIOS 210">解決當電池容量大於60%時,充電速度變慢的問題</description>
<description l_id="2052" title="BIOS 210">解决当电池容量大于60%时,充电速度变慢的问题</description>
<type> BIOS </type>
<os></os>
<version> 210 </version>
<size> 2717731 </size>
<release-date> 1422628620 </release-date>
<zip-path> pub/ASUS/nb/X453MA/X453MAAS210.zip </zip-path>
<execute> X453MAAS.210 </execute>
<index> 1 </index>
</item>
Не предусмотрено никакой процедуры проверки аутентичности этого XML-файла.
В планировщике задач выставлена частота выполнять задачу раз в час, вдобавок программа обновления постоянно обращается к серверу LiveUpdate по HTTP. Полученный файл будет распакован и запущен на исполнение, что бы в нём ни находилось.
Уязвимость обнаружил специалист по безопасности Морган [indrora] Гангвер (Morgan Gangwere).
Таймлайн событий с момента обнаружения уязвимости 27 апреля до момента публичного разглашения информации очень забавный:
From the vendor that brought you a vulnerable cloud storage platform comes ___ ____ __ __ __ / _ ___ ___ ____/ / / / /__ ___/ /__ _/ /____ / // / -_) _ `/ _ / /_/ / _ / _ / _ `/ __/ -_) /____/__/_,_/_,_/____/ .__/_,_/_,_/__/__/ Because popping SYSTEM /_/ is easy when you trust HTTP Or, "How I learned to stop worrying and execute arbitrary executables from HTTP" Affected software: LiveUpdate (any version? 3.3.5 tested) Vulnerability: HTTP MITM to SYSTEM execution + more. CVSS: est. 9.3 CVSS:3.0/AV:A/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:N (N.B.: This assumes "Hijack some HTTP" is easy and you're local) Timeline: 2016-04-27 Initial discovery 2016-04-28 Attempt to contact vendor (security@asus.com - bounce) 2016-04-28 Disclosure to MSFT MSRC attempting vendor coordination 2016-05-09 Attempt to contact vendor (via phone; told to go away) 2016-05-10 Disclosure to CERT/CC (tracked as VU#215055) 2016-05-11 CERT/CC attempts to contact vendor 2016-05-24 CERT/CC: No response from vendor 2016-06-01 CERT/CC: Disclose at will 2016-06-03 Public disclosure
Как видим, хакер дважды пытался связаться с вендором. Первый раз он написал на адрес security@asus.com
, но получил автоматический отлуп.
Delivery to the following recipient failed permanently: security@asus.com Technical details of permanent failure: Google tried to deliver your message, but it was rejected by the server for the recipient domain asus.com by mg.asus.com. [103.10.4.32]. The error that the other server returned was: 550 #5.1.0 Address rejected.
Затем позвонил по телефону, но ему сказали… больше не звонить.
PoC
Исходя из логики работы автообновления можно запустить любой файл с валидной подписью.
Для наглядной демонстрации атаки с эскалацией привилегий Морган Гангвер использовал SysInternals PSEXEC. Он составил поддельное «обновление».
<product name="UX303UA">
<item name="Garbage File"><description l_id="1033" title="Legitimate System Utility">Shoutout to Joey.</description>
<type> AP </type>
<os> Win10(64) </os>
<version> 48 </version>
<size> 199465 </size>
<release-date> 1459468800 </release-date>
<zip-path> pub/ASUS/nb/Apps/LiveUpdate/LiveUpdate.zip </zip-path>
<execute> update.bat</execute>
<index> 22 </index>
<severity> 1 </severity>
<assistant> SOFTWAREMicrosoftWindowsCurrentVersionUninstall{FA540E67-095C-4A1B-97BA-4D547DEC9AF4}DisplayVersion </assistant>
</item>
</product>
В архив «обновления» упакованы копия psexec, вымышленный whoami и скрипт для запуска.
Asus LiveUpdate сразу видит «критически важное» обновление.
Получая «критически важное» обновление, оно немедленно назначается на исполнение со всеми правами.
Вот результат.
Таким образом, мы запустили на исполнение произвольный код как NT AUTHORITYSYSTEM
, просто отдав его системе в ответ на вызов по HTTP. Всё остальное за вас делает LiveUpdate.
Вообще, ужасная с точки зрения безопасности процедура обновления прошивки свойственна не только материнским платам Asus, но и оборудованию от других производителей. Небезопасным способом обновляются, например, прошивки многих маршрутизаторов.
Автор: alizar