Skip to content
KitploitKITPLOIT
ИнструментыЭксплойтыБлог
Log in
Отправить
ИнструментыЭксплойтыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

ЛентыКонтактыКонфиденциальность© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
sonic-gnmi-noauth — Документирует и воспроизводит уязвимость аутентификации типа fail-open в SONiC gNMI, при которой пустая карта UserAuth позволяет неаутентифицированные операции gNMI Set и записи gNOI, с использованием лабораторного стенда на loopback. | Kitploit
Инструменты/GitHubGitHub/abraxas/sonic-gnmi-noauth
Безопасность встроенных системАнализ уязвимостейЭксплуатацияСетевая безопасностьТестирование на ПроникновениеБезопасность оборудования и IoTАутентификацияНеправильная КонфигурацияЛаборатории и Практика
GitHubabraxas/sonic-gnmi-noauth

sonic-gnmi-noauth

715 дней назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

Документирует и воспроизводит уязвимость аутентификации типа fail-open в SONiC gNMI, при которой пустая карта UserAuth позволяет неаутентифицированные операции gNMI Set и записи gNOI, с использованием лабораторного стенда на loopback.

Репозиторий

Abraxas Labs - sonic-gnmi-noauth

abraxaslabs.tech  ·  github.com/abraxas  ·  @abraxas_null  ·  [email protected]  ·  sonic-gnmi-noauth

sonic-gnmi-noauth

SONiC gNMI f13a08e0440f — SONiC Foundation / sonic-net

Community SONiC NOS. Не Dell Enterprise SONiC. Не SonicWall SonicOS. Комитет не выпускает CVE. gnmi-native.sh знает, что пропуск --client_auth раньше полностью отключал аутентификацию, поэтому при отсутствии user_auth он принудительно включает режим сертификатов. Fail-closed. Но затем он никогда не передаёт --ca_crt, когда сертификаты отсутствуют. setupFlags снимает сертификат, потому что нет CA. authenticate() считает пустую карту успехом. Запись через native и translib остаётся скомпилированной (ENABLE_NATIVE_WRITE=y). Два набора production-флагов, один и тот же пропуск: по умолчанию ToR --noTLS --bind_address 127.0.0.1; SmartSwitch DPU --insecure --allow_no_client_auth, пустой bind, все интерфейсы, порт 8080.

Пустой UserAuth после снятия сертификата — это неаутентифицированные gNMI Set и gNOI-запись. DPU без сертификатов доступен удалённо на :8080.

IDпока нет CVE
CWECWE-306, CWE-287
CVSSCritical: 9.8 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H (DPU без сертификата). По умолчанию ToR — тот же пропуск на 127.0.0.1:8080 (High, локально).
Продуктsonic-gnmi / sonic-buildimage
Затронутоsonic-gnmi вплоть до master f13a08e0440f; лаунчер 9495839742e4
Аутентификациянеаутентифицировано
ЛицензияGNU Affero GPL v3.0
Лабораториятолько 127.0.0.1

Что может сделать атакующий

На SmartSwitch DPU без gNMI-сертификатов: из сети, TCP :8080, без JWT, без PAM, без клиентского сертификата. Вызов gnmi.gNMI/Set (native CONFIG_DB / translib). Вызов gnoi.debug.Debug. Перезагрузка. Сброс к заводским настройкам. File.Put в /tmp, /var/tmp, /host.

На обычном ToR/leaf без сертификатов: любой процесс, способный обратиться к 127.0.0.1:8080, делает то же самое. Контейнер gnmi работает в host net, поэтому этот loopback — хостовый.

Это перезапись конфигурации коммутатора и выполнение команд хоста от имени admin без аутентификации. Белый список Debug включает docker, config, redis-cli, sonic-installer, reboot. Пользователь admin по умолчанию входит в docker и %sudo. Это не документированный пароль admin по умолчанию. KillProcess по-прежнему возвращает Unauthenticated при пустом UserAuth. Не используйте это как признак успеха.

Как я это нашёл

Сначала я прочитал SECURITY.md. sonic-net/SONiC — это вики. Код находится в соседних деревьях sonic-net/*. Затем десять поисков по этим пинам: инъекция в CLI, аутентификация REST, gNMI Set, hostcfgd PAM, RESTCONF, ZTP, образ Redis/sshd/sudo, значения по умолчанию FEATURE, GCU/SSTI, DHCP/LLDP/SNMP. Живого коммутатора не было. Планка была Critical/High.

Большая часть этой планки уже закрыта или не является значением по умолчанию. sonic-restapi — это INCLUDE_RESTAPI ?= n. Production-лаунчер RESTCONF принудительно включает PAM. Хостовый Redis слушает 127.0.0.1 без requirepass, что является первым шагом, а не находкой. Контейнер gnmi не является опциональным. INCLUDE_SYSTEM_GNMI = y. FEATURE gnmi включён. Host net, host pid, host userns.

Я не поднимал полный образ sonic-vs. Лаборатория — это тонкая gRPC-обёртка над проверенными по SHA256 извлечениями setupFlags и authenticate() из пина f13a08e0440f. Оба слушателя вернули SONIC-GNMI-NOAUTH-WITNESS с auth_enabled=false и enable_native_write=true. Парольный UserAuth без учётных данных — Unauthenticated. Это и есть настоящий пропуск, а не заглушка, которая всегда успешна.

Уже зафиксированные неверные пути: KillProcess Unauthenticated (этот RPC уже отклоняет пустой UserAuth — лаборатории требуется пропуск authenticate() на пути Set); Probe OK, когда парольный UserAuth включён и нет учётных данных (тогда оракул — заглушка); гаджет gNOI Debug docker, полезная нагрузка nsenter, reverse shell. Театр. Направить это на устройство Dell Enterprise SONiC или на SonicWall. Не тот продукт.

Лаборатория

cd lab
./run.sh

Цель только 127.0.0.1:18080 (ToR plaintext) и 127.0.0.1:18081 (DPU TLS-insecure). Тонкая gRPC, а не полный образ DPU. Извлечения из пина хешируются при сборке относительно sonic-gnmi f13a08e0440f.

IOC tor-connect 127.0.0.1:18080 plaintext no-metadata
IOC tor-check witness=SONIC-GNMI-NOAUTH-WITNESS auth_enabled=false enable_native_write=true user_auth_any=false mode=tor
IOC dpu-connect 127.0.0.1:18081 tls-insecure no-client-cert no-metadata
IOC dpu-check witness=SONIC-GNMI-NOAUTH-WITNESS auth_enabled=false enable_native_write=true user_auth_any=false mode=dpu
IOC tor-negative status=UNAUTHENTICATED
IOC dpu-negative status=UNAUTHENTICATED
SUCCESS SONIC-GNMI-NOAUTH who=unauth tor=18080 dpu=18081 SONIC-GNMI-NOAUTH-WITNESS

Исправление

Если UserAuth пуст после удаления сертификата, не обслуживайте Set/gNOI-запись или не слушайте вне loopback. Копируйте UserAuth также на пути --noTLS. Настройте серверные сертификаты и CA, чтобы --ca_crt был задан и режим сертификатов не снимался. Не запускайте SmartSwitch DPU без сертификата (--insecure --allow_no_client_auth с пустым CA) на доступном :8080. Оба слушателя должны возвращать Unauthenticated при пустом UserAuth на пути записи.

Ссылки

  • sonic-gnmi f13a08e0440f · telemetry.go · server.go · whitelist.go · command.go
  • sonic-buildimage 9495839742e4 · gnmi-native.sh · rules/config · init_cfg.json.j2
  • SECURITY.md
  • CWE-306 · CWE-287

Лицензия

GNU Affero GPL v3.0. См. LICENSE. Только loopback-лаборатория. Без гарантий.

Скачать инструмент