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

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

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

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

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

Категории

Все категории
Loading categories
CVE-2026-52134-libiec61850 — Публичное техническое уведомление и доказательства воспроизведения для CVE-2026-52134, затрагивающего обработку повторного воспроизведения (replay) GOOSE в libiec61850 v1.6. | Kitploit
Инструменты/GitHubGitHub/if-forget/cve-2026-52134-libiec61850
Анализ уязвимостейБезопасность SCADA/ICSСетевая безопасностьОбучение и ОбразованиеПодобранные РесурсыЛаборатории и Практика
GitHubif-forget/cve-2026-52134-libiec61850

CVE-2026-52134-libiec61850

Публичное техническое уведомление и доказательства воспроизведения для CVE-2026-52134, затрагивающего обработку повторного воспроизведения (replay) GOOSE в libiec61850 v1.6.

Репозиторий
172 месяцев назадЕщё не проверено

Популярное

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

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

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

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

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

CVE-2026-52134: обработка повторного воспроизведения GOOSE и свежести сообщений в libiec61850 v1.6

Статус

CVE-2026-52134 присвоен. Публикация соответствующей записи CVE ожидается.

Затронутый продукт

  • Поставщик: MZ Automation GmbH
  • Продукт: libiec61850
  • Протестированная версия: 1.6
  • Статус других версий: не подтверждён
  • Затронутый файл: src/goose/goose_receiver.c
  • Затронутая функция: parseGoosePayload()

Краткое описание

Путь приёма подписчика GOOSE в libiec61850 v1.6 недостаточно полно отклоняет определённые повторно воспроизведённые или устаревшие сообщения GOOSE перед обновлением состояния, видимого подписчику, и вызовом зарегистрированного обратного вызова слушателя.

Два контролируемых эксперимента демонстрируют связанное поведение в одном и том же пути приёма:

  1. Откат к меньшему stNum: после того как подписчик обработал stNum=2, повторное воспроизведение ранее захваченного кадра с stNum=1 привело к тому, что слушатель снова сообщил более старое состояние и данные.
  2. Повторное воспроизведение с невозрастающим sqNum: когда повторно воспроизводился ранее захваченный кадр с тем же stNum, но более старым sqNum, кадр помечался как недействительный, но обратные вызовы слушателя по-прежнему происходили, а повторно переданные данные оставались видимыми.

Они представлены как два связанных наблюдения одной проблемы обработки повторного воспроизведения/свежести сообщений, а не как две отдельные CVE.

Предпосылки атаки

Атакующий должен иметь возможность:

  • Получить доступ к соответствующему широковещательному домену IEEE 802.3 уровня 2 или VLAN
  • Захватывать легитимные Ethernet-кадры GOOSE
  • Внедрять Ethernet-кадры с EtherType 0x88B8

Это не произвольная удалённая атака через Интернет.

Техническое обоснование

Соответствующая логика приёма проверяет sqNum, когда полученный stNum равен сохранённому stNum. Протестированный путь кода не отклоняет меньший stNum до того, как состояние подписчика будет обновлено и будет вызван слушатель.

Тестируемый файл библиотеки не изменялся. Оригинальная и рабочая копии src/goose/goose_receiver.c имели одинаковое значение SHA-256:

c42f2aec80f605c458d0bca524ccb09f2e35f9b83a02f854f95d9444616c075b

Проверка целостности исходного кода

Тестовая среда

  • Ubuntu 20.04.6 LTS
  • libiec61850 v1.6
  • изолированная виртуальная Ethernet-пара Linux veth0 / veth1
  • tcpdump
  • TShark
  • Python 3 и Scapy
  • Изменённые примеры издателя и подписчика, использованные только в качестве тестового стенда

Тестовый стенд обеспечивал контролируемые переходы состояний и выводил значения stNum, sqNum, признак достоверности и данные, видимые в обратных вызовах. Сам уязвимый файл библиотеки не изменялся.

Эксперимент A: откат к меньшему stNum

Базовый сценарий

Контролируемый издатель отправлял два состояния:

State A: stNum=1, sqNum=0, data=1111
State B: stNum=2, sqNum=0, data=2222

Базовый захват пакетов содержал два кадра GOOSE в следующем порядке:

Frame 1: stNum=1, sqNum=0
Frame 2: stNum=2, sqNum=0

Базовые поля и обратные вызовы

В выводе подписчика также присутствовал вспомогательный обратный вызов для stNum=1, sqNum=0, помеченный valid=false перед состоянием B. Этот вспомогательный обратный вызов сохранён в материалах, но не используется как основание для вывода об откате. Решающим состоянием до повторного воспроизведения был более поздний обратный вызов, содержащий stNum=2 и значение данных 2222.

Однократное повторное воспроизведение

Скрипт повторного воспроизведения загрузил базовый захват из двух кадров, выбрал кадр 1 и отправил его один раз через veth0.

Непосредственно перед повторным воспроизведением слушатель сообщил:

stNum=2, sqNum=0, valid=true, allData={2222}

После однократного повторного воспроизведения старого кадра слушатель сообщил:

stNum=1, sqNum=0, valid=true, allData={1111}

Однократное повторное воспроизведение и откат stNum

Это демонстрирует наблюдаемый откат состояния подписчика с stNum=2 на stNum=1 после повторного воспроизведения ранее захваченного кадра с меньшим stNum.

Дополнительные идентичные повторные воспроизведения

Было отправлено ещё четыре копии того же старого кадра. Все четыре содержали stNum=1, sqNum=0.

Более поздние копии были помечены как valid=false, но номера обратных вызовов продолжали увеличиваться, а повторно переданные данные оставались видимыми:

Дублированные повторные воспроизведения по-прежнему вызывают обратные вызовы

Это вторичное наблюдение показывает, что пометка повторного кадра как недействительного не предотвращала доставку слушателю в протестированном пути приёма.

Эксперимент B: повторное воспроизведение с невозрастающим sqNum

Более раннее воспроизведение использовало официальные примеры издателя и подписчика. Издатель формировал обычную последовательность с:

stNum=1
sqNum=0, 1, 2, 3

Первый захваченный кадр (stNum=1, sqNum=0) затем повторно воспроизводился после того, как подписчик уже обработал более позднее значение последовательности.

Исходный базовый сценарий sqNum

Повторно воспроизведённые копии были помечены как недействительные, поскольку полученный sqNum=0 не был новее сохранённого значения последовательности. Однако подписчик продолжал выводить события слушателя, содержащие повторно переданные данные:

Обратные вызовы при повторном воспроизведении исходного sqNum

Этот эксперимент подтверждает более узкое, но связанное наблюдение:

  • Повторное воспроизведение того же состояния было обнаружено с помощью флага достоверности.
  • Обнаружение не предотвратило доставку обратного вызова с повторно переданным сообщением в протестированном примере.

Исходные необработанные скриншоты повторного воспроизведения сохранены в качестве вспомогательных материалов:

  • 12-original-sqnum-replay-command-raw.png
  • 13-original-sqnum-replay-terminal-raw.png

Эти необработанные изображения содержат несвязанные предупреждения об импорте дополнительных модулей Scapy. Предупреждения не помешали скрипту сообщить о захваченных кадрах GOOSE и завершить передачу, однако для просмотра технического результата предпочтительнее приведённые выше более чистые скриншоты.

Связь между двумя экспериментами

Эксперименты демонстрируют разные ветви одной и той же проблемы повторного воспроизведения/свежести сообщений GOOSE:

ObservationReceived messageObserved result
Повторное воспроизведение с меньшим stNumСохранён stNum=2; получен старый stNum=1Старые состояние и данные были доставлены слушателю и в тестовом запуске помечены как достоверные
Повторное воспроизведение с невозрастающим sqNumТот же stNum; получен более старый или повторный sqNumСообщение было помечено как недействительное, но обратные вызовы слушателя и доставка повторно переданных данных продолжились
Скачать инструмент