
Asus снова взялся за старое. Вы можете отправить любой исполняемый файл или даже прошивку BIOS на компьютер Asus под видом обновления — этот файл будет автоматически запущен на исполнение с максимальными привилегиями, а прошивка установлена, без каких-либо проверок. Ничего не нужно предпринимать — система взломает сама себя, автоматически.
Вкратце: компьютеры с материнскими платами Asus осуществляют запросы к удалённому серверу по HTTP на регулярной основе. Причиной является программное обеспечение LiveUpdate, которое предустанавливается на компьютеры Asus. Оно отвечает за скачивание новых прошивок BIOS/UEFI и исполняемых файлов. Обновления поступают в архивах ZIP по чистому HTTP, распаковываются во временную папку, а исполняемый файл запускается от им��ни пользователя. Не происходит никакой верификации файлов или аутентификации при их загрузке, что позволяет провести MiTM-атаку и банальную эскалацию привилегий до
NT AUTHORITY\SYSTEM.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"> ACPI\ATK0110 </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> SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{FA540E67-095C-4A1B-97BA-4D547DEC9AF4}\DisplayVersion </assistant>
</item>
</product>В архив «обновления» упакованы копия psexec, вымышленный whoami и скрипт для запуска.

Asus LiveUpdate сразу видит «критически важное» обновление.

Получая «критически важное» о��новление, оно немедленно назначается на исполнение со всеми правами.

Вот результат.

Таким образом, мы запустили на исполнение произвольный код как
NT AUTHORITY\SYSTEM, просто отдав его системе в ответ на вызов по HTTP. Всё остальное за вас делает LiveUpdate.Вообще, ужасная с точки зрения безопасности процедура обновления прошивки свойственна не только материнским платам Asus, но и оборудованию от других производителей. Небезопасным способом обновляются, например, прошивки многих маршрутизаторов.
