CSRF в моем домашнем роутере и как я ее закрыл

в 14:06, , рубрики: asus, csrf, wl500g, администрирование локалхоста, домашний роутер, информационная безопасность, Настройка Linux, системное администрирование, уязвимость

В продолжение публикации «Был получен доступ к тысячам персональных данных пользователей «Билайн проводной интернет»».

Как вы уже узнали, в этой небольшой коробочке скрывается довольно много интересного.

Есть такая совершенно очевидная и в то же время сравнительно невинная ошибка, CSRF. Примечательно, что она находится именно в тех роутерах, в которых ничего из недавней статьи нет. Однако, в отличие от тех багов, ее могут эксплуатировать не только ваши соседи, а кто угодно, вроде коварного собеседника в чате или единожды посещенного сайта.

CSRF работает так: каким-либо образом попросить браузер жертвы загрузить сочиненный url, при этом целевой сайт, узнав ваш браузер, что-то сделает, как будто этого хотели вы.

Примерно вот так будет выглядеть адрес от человека, собирающего ботнет для дерзкой icmp-атаки на ya.ru:

у-у-у

http://192.168.1.1/apply.cgi?
current_page=Main_AdmStatus_Content.asp&
next_page=Main_AdmStatus_Content.asp&
next_host=192.168.1.1&
sid_list=FirewallConfig%3B&
group_id=&
modified=0&
action_mode=+Refresh+&
first_time=&
action_script=&
SystemCmd=nohup+ping+ya.ru+%26&
action=Refresh

В конце статьи будет само решение проблемы, тоже ничего

Есть то, что защищает обладателей типичных CSRF-уязвимых роутеров, это с большой вероятностью отсутствующая у жертвы в момент атаки авторизованная сессия, что сводит на нет любой удачно сформированный от ее имени запрос.

А вы знали, что Safari не имеет привычки забывать* один раз введенные данные http аутентификации? Я вот не знал, но уже несколько недель как захожу в веб интерфейс не вводя пароль, хотя никогда не просил его сохранять. И, что удивительно, даже ничего не могу с этим сделать. Иначе говоря, если роутер при логине показывает такое системное окошко с предложением пройти аутентификацию, а у вас Safari, то закончить сессию так просто не получится. На этом месте я осознал необходимость что-то со всем этим сделать.

* Safari, похоже, считает параметры basic access authentication в http чем-то долговременным вроде куков, но при этом их нет ни в списке куков, ни в списке запомненных паролей, и оттого непонятно как от них избавляться. Возможно, стоит их вводить в приватном режиме.

Но, к делу

Веб интерфейс роутера, при беглом поверхностном взгляде, — это довольно большое количество страниц неизвестного качества кода с суффиксами .asp, так что выбор был не очень сложным…

… закрыть на фиг 80 порт через iptables. Читаем гайд по прошивке wl500g и бежим по ssh фиксить Проблему…

$ pwd
/usr/local/root
$ mkdir /usr/local/sbin
$ vi /usr/local/sbin/post-firewall

#!/bin/sh
iptables -I INPUT -p tcp --dport 80 -j DROP
# На самом деле, я вставляю это правило не в начало таблицы, а после accept established,
# где-то так: -I INPUT 4 . Проконсультируйтесь с вашим iptables -vL INPUT .
# Стоит заметить, без номера оно более универсально и легче переживет апдейт прошивки.

$ chmod +x /usr/local/sbin/post-firewall
$ flashfs save && flashfs commit && flashfs enable
$ reboot

Из мануала по прошивке я узнал, что интерфейс местной системы инициализации заключается в пользовательских скриптах в /usr/local/sbin/ с правильными именами; /sbin/flashfs — возможность сохранить изменения файловой системы после ребута (конкретно, он складывает tar от управляемых им файлов в /dev/mtd4 и вытаскивает оттуда при загрузке).
Я не узнал, чем отличаются увиденные в /sbin/flashfs mtd4 от mtdblock4 и от nvram, в последнем из которых в виде key-value хранятся остальные пользовательские настройки.

Но, оно уже работает правильно. Как теперь заходить в веб интерфейс? Понятное дело, каждый раз вручную открывать iptables было бы ну очень некрасиво..?

Можно пробросить 80 порт роутера через ssh-тоннель в 8080 порт на рабочем локалхосте.

$ ssh -N -L 8080:192.168.1.1:80 admin@192.168.1.1 # на рабочей машине

… и обнаружить веб интерфейс по адресу http://localhost:8080. Коннект к httpd будет устанавливаться от локального (для роутера) sshd и не застрянет в input chain айпи-таблиц. Осталось запустить браузер и насладиться работой технологии.

Вот такие нехитрые действия, и наш маленький бытовой роутер больше не светит 80-ым портом, прямо как совсем большой. Красота. :]

Автор: TheRipper

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js