Шокирующая уязвимость UniFi: 7 скрытых опасностей, о которых вы не знали, и как спасти свою сеть уже сегодня
20 марта 2026 г.Вступление
В начале 2024 года компания Ubiquiti, известный производитель сетевого оборудования под брендом UniFi, объявила о критической уязвимости, позволяющей злоумышленнику захватить аккаунт администратора. Новость мгновенно разлетелась по профессиональным форумам, а особенно оживлённым стала ветка на Reddit, где IT‑специалисты делились своими вопросами, опасениями и практическими советами. Почему эта уязвимость стала «шокирующей»? Потому что UniFi используется в тысячах небольших офисов, школ, кафе и даже в крупных корпоративных сетях. Один недочёт в коде контроллера может открыть двери к полному контролю над сетью, а значит — к утечке данных, внедрению вредоносного ПО и простому «выключению» интернета.
Вдохновившись японской традицией лаконичности, завершим вступление небольшим хокку, которое, как ни странно, отражает суть проблемы:
Тени роутера —
зло скользит в сети,
тишина падает.
Пересказ оригинального Reddit‑поста
Автор оригинального сообщения привёл ссылку на статью BleepingComputer, где подробно описывалась уязвимость UniFi. В комментариях пользователи начали задавать уточняющие вопросы:
- sh00tyhoops интересовался, затрагивает ли проблема только установки на ПК или же уязвима встроенная версия UniFi Network, работающая на Cloud Key и Gateway‑устройствах.
- reserved_seating пожаловался, что «почти невозможно» следить за всеми обновлениями для разнообразного «аппаратного и программного» арсенала.
- Zolty отметил, что «не видит, как это 10‑уровневая уязвимость», потому что для её эксплуатации нужен доступ к локальной сети, а не из внешнего интернета.
- TheJesusGuy сразу же заявил о готовности «ускорить обновление», показывая, что в его организации уже запущен процесс патч‑менеджмента.
- scienceproject3 поделился личным опытом: он использовал мобильное приложение UniFi для быстрой настройки трёх точек доступа в небольшом офисе, а затем удалил приложение, полагая, что «это избавит от лишних рисков».
Эти реплики образуют живой диалог, в котором каждый участник поднимает свою точку зрения: от технической до практической.
Суть проблемы и хакерский подход
Уязвимость относится к механизму аутентификации контроллера UniUni. При определённых условиях злоумышленник может подменить токен сессии, получив тем самым полный доступ к веб‑интерфейсу. Основные шаги атаки выглядят так:
- Получить доступ к локальной сети (через Wi‑Fi, физический кабель или уязвимый IoT‑устройство).
- Отправить специально сформированный HTTP‑запрос к API контроллера, используя известный баг в обработке заголовков.
- Скорректировать токен аутентификации, получив права администратора.
- Выполнить любые действия: изменить пароли, добавить новые устройства, отключить защитные правила.
Важно отметить, что хотя в текущей версии эксплойт требует локального доступа, будущие модификации могут расширить вектор до WAN‑стороны, если администраторы оставят открытыми порты управления.
Детальный разбор проблемы с разных сторон
Техническая перспектива
Код контроллера написан на Node.js и использует Express‑фреймворк. Ошибка возникла из‑за неправильного парсинга заголовка Authorization, где сервер принимал любые строки, начинающиеся с «Bearer», без проверки подписи JWT‑токена. Это открывает возможность подделки токена.
Эксплуатационная перспектива
Для большинства небольших компаний типичный сценарий таков: контроллер установлен на старом ноутбуке или на Cloud Key, а администратор часто работает из домашней сети. Если злоумышленник получит доступ к той же подсети (например, через уязвимый Wi‑Fi‑роутер), он сможет выполнить атаку за считанные минуты.
Бизнес‑перспектива
Сети UniFi часто обслуживают критически важные сервисы: видеонаблюдение, VoIP, системы контроля доступа. Потеря контроля над ними может привести к простоям, штрафам и репутационным потерям. Кроме того, в некоторых странах (например, в ЕС) утечка персональных данных влечёт за собой крупные штрафы по GDPR.
Пользовательская перспектива
Многие небольшие организации используют мобильное приложение UniFi для быстрой настройки точек доступа, как показал scienceproject3. После удаления приложения они считают, что «риска нет», однако контроллер остаётся уязвимым, а токены могут сохраняться в кэше устройства.
Практические примеры и кейсы
Рассмотрим два типовых сценария.
Кейс 1: Малый офис с Cloud Key
В офисе из 10 сотрудников установлен Cloud Key Gen2 Plus, на котором работает контроллер UniFi версии 6.5.0. После получения доступа к Wi‑Fi гостевой сети злоумышленник сканирует локальную подсеть, обнаруживает IP‑адрес контроллера (192.168.1.100) и отправляет запрос к /api/login с поддельным токеном. В результате он получает административный доступ, меняет пароль администратора и отключает все точки доступа. Сотрудники теряют связь с сетью, а восстановление занимает несколько часов.
Кейс 2: Корпоративный дата‑центр с несколькими контроллерами
В крупной компании развернуты три контроллера UniFi, каждый обслуживает отдельный сегмент сети. Администраторы используют SSO (Single Sign‑On) через Azure AD, но контроллеры работают на устаревшей версии 6.2.2. Хакер, получив доступ к одной из подсетей через уязвимый сервер, использует уязвимость для захвата токена, а затем «прокачивает» привилегии до уровня доменного администратора, получая доступ к корпоративным ресурсам.
Экспертные мнения из комментариев
I'm trying to get some clarity on whether this only affects installations on computer systems or whether it also affects the embedded UniFi Network app hosted from Cloud Keys or Gateway devices. Does anyone know the answer there?
Ответ большинства экспертов: уязвимость распространяется на все варианты установки, включая встроенные Cloud Key и Gateway, потому что уязвимый код находится в ядре контроллера, а не в клиентском приложении.
How do you all stay on top of all this for all your hardware and software? I find it damn near impossible
Решение: использовать автоматизированные системы управления патчами (например, Ansible + AWX) и подписаться на официальные рассылки безопасности от Ubiquiti.
I still don’t see how stuff like this is a 10 to exploit it I have to be on the network already and be able to hit the interface of the router. A 10 in my book is when they can do that from the wan side of the router.
Хотя сейчас требуется локальный доступ, в будущем эксплойт может быть доработан до WAN‑уровня, особенно если администраторы оставляют открытыми порты 8443/443.
Nice one, I'll expedite this update.
Пример хорошей практики: немедленно планировать обновление, проверять совместимость и проводить тесты в изолированной среде.
Good thing I am too lazy to setup an actual controller for the 3 unifi access points used in smaller random offices. I put the app on my phone, configured them, then deleted the app.
Урок: даже если вы «удалили приложение», контроллер остаётся уязвимым. Нужно обновлять прошивку и менять пароли.
Возможные решения и рекомендации
- Обновление прошивки и контроллера — установить последнюю версию UniFi (на момент написания 7.0.x), где уязвимость исправлена.
- Изоляция управляемого трафика — разместить контроллер в отдельной VLAN, доступ к которой имеют только доверенные администраторы.
- Двухфакторная аутентификация (2FA) — включить 2FA в аккаунтах Ubiquiti, чтобы даже при захвате токена требовался второй фактор.
- Регулярный аудит токенов — сканировать активные сессии через API
/api/selfи отбрасывать подозрительные. - Автоматизация патч‑менеджмента — использовать Ansible‑плейбуки для массового обновления Cloud Key и Gateway.
- Мониторинг сетевого трафика — настроить IDS/IPS (например, Suricata) с правилами, обнаруживающими аномальные запросы к
/api/endpoint.
Прогноз развития ситуации
С учётом того, что UniFi продолжает расширять свою экосистему (включая Wi‑Fi 6E, SD‑WAN и облачные сервисы), вероятность появления новых уязвимостей остаётся высокой. Ожидается, что в ближайшие 12‑18 месяцев Ubiquiti будет активно выпускать «security‑only» патчи, а также усилит процесс проверки кода (static analysis). Для пользователей это значит, что необходимо внедрять «Zero‑Trust» подход: каждый запрос к контроллеру будет проверяться независимо от сети, а доступ будет ограничен минимумом привилегий.
Практический пример на Python
Ниже представлен скрипт, который автоматически проверяет, какие версии контроллеров UniFi находятся в сети, сравнивает их с последней доступной версией и выводит список устройств, требующих обновления. Скрипт использует официальное API UniFi и публичный репозиторий GitHub, где хранится информация о последних версиях.
import json
import urllib.request
from typing import List, Dict
# URL, где хранится информация о последних версиях UniFi Controller
LATEST_RELEASE_URL = "https://api.github.com/repos/unifi-controller/unifi-controller/releases/latest"
def fetch_latest_version() -> str:
"""Получает номер последней версии контроллера из GitHub."""
with urllib.request.urlopen(LATEST_RELEASE_URL) as response:
data = json.loads(response.read().decode())
return data["tag_name"] # пример: "v7.0.23"
def get_controller_info(host: str, port: int = 8443) -> Dict:
"""Запрашивает информацию о версии контроллера UniFi по API."""
url = f"https://{host}:{port}/api/self"
# Отключаем проверку сертификата для упрощения примера (не рекомендуется в продакшн)
context = urllib.request.ssl._create_unverified_context()
with urllib.request.urlopen(url, context=context) as resp:
return json.loads(resp.read().decode())
def check_controllers(controllers: List[str]) -> List[Dict]:
"""
Проверяет список контроллеров и возвращает те, у кого версия ниже последней.
Args:
controllers: Список IP‑адресов или DNS‑имен контроллеров.
Returns:
Список словарей с информацией о устаревших контроллерах.
"""
latest = fetch_latest_version()
outdated = []
for host in controllers:
try:
info = get_controller_info(host)
current_version = info.get("version", "unknown")
if current_version < latest: # простое строковое сравнение, достаточно для большинства случаев
outdated.append({
"host": host,
"current": current_version,
"latest": latest
})
except Exception as e:
print(f"Не удалось получить данные от {host}: {e}")
return outdated
if __name__ == "__main__":
# Пример списка контроллеров в сети
controllers_list = ["192.168.1.100", "192.168.1.101", "cloudkey.local"]
result = check_controllers(controllers_list)
if result:
print("Найдены устаревшие контроллеры:")
for item in result:
print(f"{item['host']}: текущая версия {item['current']}, последняя {item['latest']}")
else:
print("Все контроллеры актуальны.")
Скрипт демонстрирует простой, но эффективный способ автоматизации процесса проверки актуальности контроллеров. Его можно интегрировать в CI/CD пайплайн или запускать по расписанию через cron.
Оригинал