
Уязвимость BDU:2018-01357 (CVE-2018-14847) MikroTik
Уязвимость BDU:2018-01357 (CVE-2018-14847) в компоненте Winbox RouterOS (MikroTik) позволяет удалённому злоумышленнику обходить аутентификацию и читать произвольные файлы через путь с последовательностью //./../
. Уязвимость возникает из-за некорректной нормализации путей при обработке запросов Winbox.
Анализ уязвимости
Уровень опасности: 9.1 CRITICAL
Вектор атаки: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N
-
Уязвимость доступна из сети (AV:N)
-
Низкая сложность эксплуатации (AC:L)
-
Не требует привилегий (PR:N)
-
Не требует действий пользователя (UI:N)
-
Не оказывает влияния на другие системы (S:U)
-
Раскрытие конфиденциальных данных (C:H)
-
Полное нарушение целостности (I:H)
-
Нет воздействия на доступность (A:N)
Условия эксплуатации
-
Устройство под управлением RouterOS ≤ v6.42.
-
Порт Winbox (8291) открыт для злоумышленника.
-
Доступ к внутренней сети не обязателен – атака возможна через интернет при открытом порте.
Анализ эксплойтов из общего доступа
1. Эксплойт "By the Way" (C++)
Цель: Чтение файла user.dat при помощи уязвимости CVE-2018-14847
, активация backdoor-аккаунта devel
.
Ключевые функции:
-
Извлечение паролей (
getPasswords
):
Отправляет вредоносный Winbox-запрос для чтения//./.././../flash/rw/store/user.dat
:msg.add_string(1, "//./.././.././../flash/rw/store/user.dat"); winboxSession.send(msg);
Сервер возвращает содержимое файла без аутентификации.
-
Расшифровка пароля (
get_password
):
Пароль вuser.dat
зашифрован XOR с MD5-хэшем от логина + соли283i4jfkai3389
:std::string hash_this(p_username); hash_this.append("283i4jfkai3389"); MD5 md5; md5.update(hash_this.c_str(), hash_this.size()); std::string md5_hash(md5.getDigest()); decrypted = encrypted_pass[i] ^ md5_hash[i % md5_hash.size()];
-
Создание backdoor (
create_file
):
Записывает файлы, активирующие учётную записьdevel
:msg.add_string(1, "//./.././.././../pckg/option"); msg.add_string(1, "//./.././.././../flash/nova/etc/devel-login");
После этого входит в систему как
devel
с паролем администратора через Telnet/SSH.
2. Эксплойт на Go
Цель: Только извлечение учётных данных.
Особенности:
-
Использует "сырые" байтовые пакеты для эксплуатации:
a = []byte{0x68, 0x01, 0x00, 0x66, 0x4d, 0x32, 0x05, 0x00, ...} // Payload для LFI b = []byte{0x3b, 0x01, 0x00, 0x39, 0x4d, 0x32, 0x05, 0x00, ...} // Payload для чтения данных
-
Расшифровка пароля идентична C++-версии:
hasher.Write([]byte("283i4jfkai3389")) key := hasher.Sum(nil) passw[i] = passEnc[i] ^ key[i%len(key)]
Защитные меры
-
Обновление ПО: Установить RouterOS ≥ v6.43.
-
Блокировка портов: Закрыть порт 8291 для внешнего доступа. Пример правила для MikroTik:
/ip firewall filter add chain=input protocol=tcp dst-port=8291 action=drop
-
Отключение Winbox: Использовать только SSH/WebFig (порт 22/80).
-
Сетевой ACL: Разрешать доступ к порту управления только с доверенных IP.
-
Аудит паролей: Сменить пароли администраторов после обновления.
