Интересное сообщение про новую уязвимость в телевизорах LG (бэкдор WTA)
![i-found-another-vulnerability-0-day-that-affects-all-lg-smart-tvs.jpg (76.59 КБ) Просмотров: 1552 i-found-another-vulnerability-0-day-that-affects-all-lg-smart-tvs.jpg](./download/file.php?id=28263&t=1&sid=063e45c9369fb112e1b86086cce69261)
i-found-another-vulnerability-0-day-that-affects-all-lg-smart-tvs.jpg (76.59 КБ) Просмотров: 1552
https://twitter.com/zibri/status/1738411006869577968Я нашел еще одну уязвимость (0-day), которая затрагивает все телевизоры LG Smart.
...
Более подробное описание есть на этой страничке
https://gist.github.com/throwaway96/b17 ... fc6dfd2941В webOS 5+ существует уязвимость/бэкдор, позволяющая легко выполнять произвольные команды от имени root в процессе загрузки. Самый простой способ использовать эту уязвимость - поместить файл на USB-накопитель и подключить его к телевизору во время загрузки. Есть еще два способа, которые более сложны и требуют дополнительных эксплойтов. Компания LG приступила к исправлению уязвимости/бэкдора WTA.
Эта уязвимость была обнаружена компанией Mariotaku.
ИспользованиеВозьмите USB-накопитель, отформатированный в FAT32 или NTFS. Поместите файл wta_usb.sh, содержащий то, что вы хотите выполнить, в корневой каталог накопителя. Перезагрузите телевизор при подключенном USB-накопителе. Убедитесь, что телевизор действительно перезагружается. Может потребоваться некоторое время для выполнения.
Приложенный
wta_usb.sh запускает telnet-сервер на порту 1234 с оболочкой root.
Канал HomebrewЕсли у вас есть установленный Homebrew Channel в режиме разработчика, вы можете вставить следующие команды в wta_usb.sh для рутирования телевизора:
- Код: Выделить всё
/media/developer/apps/usr/palm/services/org.webosbrew.hbchannel.service/elevate-service
rm -rf /var/luna/preferences/devmode_enabled && mkdir -p /var/luna/preferences/devmode_enabled
Внимание: После выполнения этой операции (подтвердите, проверив статус root в Homebrew Channel), убедитесь, что вы удалили приложение Developer Mode перед перезагрузкой телевизора.
Вы также можете просто запустить эти команды через корневой telnet-сервер.
ПримечанияЗаставить телевизор с webOS правильно перезагрузиться может быть непросто. Мне не хочется переписывать это, поэтому смотрите
руководство по crashd для получения дополнительной информации.
Если ваш wta_usb.sh является скриптом (это не обязательно), убедитесь, что он начинается со строки shebang (например, #! /bin/sh) и имеет правильное окончание строки (т. е.LF). Разрешения не должны иметь значения, поскольку все, что находится в файловой системе Windows, рассматривается как исполняемое.
Если у вас возникли проблемы с подключением к telnet-серверу и вы не уверены, что скрипт запущен, попробуйте использовать прилагаемый wta_usb-toast.sh. Не забудьте переименовать его в wta_usb.sh. При успешном выполнении скрипта на экране телевизора появится ряд сообщений. Когда вы увидите сообщения "hello", сервер telnet уже должен быть запущен.
ИсправленияВ этой таблице указана первая версия прошивки, в которой, как известно, была исправлена уязвимость/бэкдор WTA. Они перечислены по (частичному) OTAID. Чтобы найти свой OTAID, обратитесь к руководству crashd.
OTAID First patched in
Prerelease Release
W23A 03.30.30 –
W23H 03.30.35 –
W23M 03.30.40 –
W23O 03.30.35 03.30.60
W23P 03.30.40 –
W22A 04.40.40 –
W22H 04.40.35
13.30.13 04.40.75
W22L 04.40.45 –
W22O 04.40.40
13.30.09 04.40.90
W22P 04.40.40 –
C22H 04.40.75 –
C22P 04.40.70 –
W21A 03.40.70 03.40.70
W21K 03.40.55 –
W21O 03.40.85 –
W21P 03.40.70 03.40.70
W21U 03.40.70 03.40.70
W20H – –
W20O – –
W20P – –
C20P – –
МеханизмСкрипт с именем wtaservice.sh ищет файлы с именем wta_usb.sh в корневых каталогах всех разделов на всех USB-накопителях, присутствующих при загрузке webOS. Если такой файл найден, он выполняется.
ПодробностиНачиная с версии 5, webOS использует systemd для инициализации и управления службами. (В предыдущих версиях webOS использовался Upstart).
С момента внедрения systemd в webOS появился файл wtaservice.service, определяющий службу systemd. Он находится в каталоге /lib/systemd/system, и его единственным действием является запуск сценария оболочки /lib/systemd/system/scripts/wtaservice.sh. Причина запуска wtaservice.service заключается в том, что на него есть символическая ссылка в файле /lib/systemd/system/webos-rbd.target.wants, что делает его зависимым от webos-rbd.target. Это означает, что wtaservice будет запускаться при запросе цели webos-rbd.target. Я не изучал, что вызывает запуск webos-rbd.
/lib/systemd/system/scripts/wtaservice.sh ищет файлы с именем wta_usb.sh с помощью find в каталоге /tmp/usb с максимальной глубиной 3. Поскольку файловые системы USB монтируются, например, в /tmp/usb/sda/sda1, максимальная глубина означает, что будут найдены только файлы в корневом каталоге файловой системы USB.
Примечание: Выполнение команды с помощью exec приводит к тому, что эта команда заменяет текущий запущенный скрипт. Поэтому никакие другие команды из сценария, содержащего exec, выполняться не будут.
Если найден файл wta_usb.sh, он будет выполнен с помощью exec. В противном случае wtaservice.sh теперь проверяет, существует ли папка /var/luna/preferences/wta_enabled, и завершает работу без дальнейших действий, если она не существует. Если он существует, сценарий проверяет, существует ли /media/developer/com.lge.service.wta/service_ok. Если service_ok существует, выполняется /media/developer/com.lge.service.wta/run.sh, также с exec. Если service_ok не существует, порождается новая оболочка (не уверен, почему).
Новая оболочка присваивает несколько значений по умолчанию некоторым переменным окружения, а затем исходникам /var/luna/preferences/wta_enabled. Это означает, что команды, содержащиеся в wta_enabled, выполняются таким образом, что все переменные окружения, которые они устанавливают, будут перенесены в содержащую оболочку. После завершения работы wta_enabled новая оболочка входит в бесконечный цикл, в котором она пингует $SERVER_INTERNAL и $SERVER_EXTERNAL (в таком порядке). Цикл повторяется каждые 60 секунд. При первом ответе сервера на пинг его адрес сохраняется в переменной $SERVER, и цикл завершается. В этот момент запускается обратная оболочка (с помощью /bin/bash), которая подключается к $SERVER по порту, указанному в $PORT (по умолчанию он равен 9001).
По умолчанию для $SERVER_INTERNAL и $SERVER_EXTERNAL используются адреса hewta.lge.com и wta.iptime.org, соответственно. Вы можете использовать /var/luna/preferences/wta_enabled, чтобы установить $SERVER_INTERNAL и $SERVER_EXTERNAL в то значение, которое вы контролируете. Или вы можете просто выполнить любые команды в wta_enabled.