Эксперимент по удалённому запуску кода на принтере

4 месяца ago admin 0

Якоб Бейнс (Jacob Baines), участвующий в разработке сетевого сканера безопасности Nessus, опубликовал статью, в которой показал печальное состояние с защитой сетевых принтеров. После покупки новых офисных принтеров HP OfficeJet Pro 8210 Якоб обнаружил, что они укомплектованы устаревшей прошивкой, в которой производителем отмечена уязвимость CVE-2017-2741, а автоматическая установка обновлений отключена в настройках.

Производитель приводит только общие сведения об уязвимости CVE-2017-2741, не раскрывая детали. Исследователя насторожило, что проблеме присвоен критический уровень опасности (9.8 из 10) и упоминается, что потенциально проблема может привести к удалённому выполнению кода, поэтому он решить самостоятельно проанализировать защищённость своего принтера. В итоге, было выявлено, что на сетевом порту 9100 принтер без ограничения принимает команды на языке PJL (Printer Job Language). Доступ к файловой системе ограничен каталогами tmp/ и csr_misc/, но данное ограничение тривиально обходится через передачу символов «../» в составе пути, например, для доступа к файлу с паролями можно выполнить команду «@PJL FSUPLOAD NAME=»../../etc/passwd».

Более того, некоторые системные директорию оказались доступны на запись, что позволило разместить собственный скрипт инициализации в директории «/rw/var/etc/profile.d/», который был запущен во время перезапуска принтера. Например, удалось успешно загрузить и запустить бэкдор для удалённого входа на принтер с правами root:

    $ python printer_exploit.py 192.168.1.158 9100   connecting to 192.168.1.158 port 9100   @PJL FSQUERY NAME="0:/../../rw/var/etc/profile.d/lol.sh" TYPE=FILE SIZE=119   Done! Try port 1270 in ~30 seconds   albinolobster@ubuntu:~$ nc 192.168.1.158 1270   whoami   root  


Source: pirates.in.ua