Содержание статьи
Разберем CVE-2023-50920 — присвоение одного и того же идентификатора сессии после перезагрузок. Дальше:
- воспроизведем уязвимость на реальном устройстве;
- повторим процесс поиска уязвимости;
- изучим патч;
- развеем миф, что для поиска уязвимостей в роутерах и устройствах IoT обязательно сидеть с паяльником, осциллографом и «Некрономиконом».
Зачем воспроизводить уже найденные CVE?
Вполне логичный вопрос. Чтобы искать что‑то свое, нужно развить насмотренность и выстроить собственную методологию. Без этого тебе будет сложно приступить к исследованию: ты просто не поймешь, с чего начать.
Для каждой CVE есть описание. Оно сухое и иногда не слишком полезное. Зато мы можем быть уверены, что уязвимость существует. Иногда для нее публикуют proof of concept — его тоже можно использовать как подсказку. Вся эта информация поможет разобраться в уязвимости: воспроизвести ее, докопаться до причины и изучить патч. Это и есть лучший способ учиться.
Подопытный
Почему я выбрал целью именно этот роутер?
- Во‑первых, он дешевый: на момент написания статьи он стоил около 3000 рублей.
- Во‑вторых, большинство устройств IoT и простых роутеров работают в Linux с прошивкой OpenWrt. Ее исходный код открыт, поэтому мы без проблем найдем исходники.
- В‑третьих, веб‑интерфейсы таких устройств часто написаны на скриптовых языках: Lua, PHP или Python. Поэтому для анализа нам не понадобятся ни IDA, ни Ghidra — подойдет любой текстовый редактор. Ну или редактор кода, если хочешь подсветку синтаксиса.
- В‑четвертых, манго в названии! Ну а что?

Я буду вскрывать свой роутер, но прошивку можно найти на официальном сайте, распаковать с помощью binwalk и повторить исследование. Также ее можно попробовать запустить в QEMU, но сегодня не об этом. Для статьи я скачал версию 4.3.7.
Также мы можем подключиться к роутеру по SSH, чтобы смотреть код и искать значения во время выполнения.
Читаем описание уязвимости
Найдем на сайте NVD описание нужной нам CVE-2023-50920:
An issue was discovered on GL.iNet devices before version 4.5.0. They assign the same session ID after each user reboot, allowing attackers to share session identifiers between different sessions and bypass authentication or access control measures. Attackers can impersonate legitimate users or perform unauthorized actions. This affects A1300 4.4.6, AX1800 4.4.6, AXT1800 4.4.6, MT3000 4.4.6, MT2500 4.4.6, MT6000 4.5.0, MT1300 4.3.7, MT300N-V2 4.3.7, AR750S 4.3.7, AR750 4.3.7, AR300M 4.3.7, and B1300 4.3.7.
Vector: CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:N
Страшно? Давай по‑человечески: после каждой перезагрузки роутер выдает одни и те же идентификаторы сессий. Если я один раз соберу набор действующих session id (sid), то после перезагрузки устройства они снова будут работать — и я смогу выдать себя за легитимного пользователя.
Описание дает важную подсказку: нужно искать sid.
Воспроизведение
Прежде чем искать уязвимость в коде, предлагаю попробовать ее воспроизвести. Тем более что для этого нам не нужен PoC.
Продолжение доступно только участникам
Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».
Присоединяйся к сообществу «Xakep.ru»!
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
