Skip to content
KitploitKITPLOIT
FerramentasExploitsBlog
Log in
Enviar
FerramentasExploitsBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
CVE-2026-52134-libiec61850 — Aviso técnico público e evidência de reprodução para CVE-2026-52134 que afeta o tratamento de replay GOOSE no libiec61850 v1.6. | Kitploit
Ferramentas/GitHubGitHub/if-forget/cve-2026-52134-libiec61850
Análise de VulnerabilidadesSegurança SCADA/ICSSegurança de RedeAprendizado e EducaçãoRecursos CuradosLabs e Prática
GitHubif-forget/cve-2026-52134-libiec61850

CVE-2026-52134-libiec61850

Aviso técnico público e evidência de reprodução para CVE-2026-52134 que afeta o tratamento de replay GOOSE no libiec61850 v1.6.

Ver Repositório
17há 2 mesesAinda não revisado

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

CVE-2026-52134: Tratamento de replay e atualidade de mensagens GOOSE no libiec61850 v1.6

Status

O CVE-2026-52134 foi atribuído. A publicação do registro CVE correspondente está pendente.

Produto afetado

  • Fornecedor: MZ Automation GmbH
  • Produto: libiec61850
  • Versão testada: 1.6
  • Status das demais versões: Não confirmado
  • Arquivo afetado: src/goose/goose_receiver.c
  • Função afetada: parseGoosePayload()

Resumo

O caminho de recepção do assinante GOOSE no libiec61850 v1.6 não rejeita adequadamente determinadas mensagens GOOSE repetidas (replay) ou obsoletas antes de atualizar o estado visível ao assinante e invocar o callback do listener registrado.

Dois experimentos controlados demonstram comportamento relacionado no mesmo caminho de recepção:

  1. Retrocesso de stNum menor: após o assinante processar stNum=2, repetir um quadro stNum=1 capturado anteriormente fez o listener reportar novamente o estado e os dados mais antigos.
  2. Replay de sqNum não crescente: quando um quadro capturado anteriormente com o mesmo stNum, porém com sqNum mais antigo, foi repetido, o quadro foi marcado como inválido, mas os callbacks do listener ainda ocorreram e os dados repetidos permaneceram visíveis.

Estes são apresentados como duas observações relacionadas de um único problema de tratamento de replay/atualidade de mensagens, e não como dois CVEs separados.

Pré-requisitos do ataque

Um atacante deve ser capaz de:

  • Acessar o domínio de broadcast IEEE 802.3 de Camada 2 ou VLAN relevante
  • Capturar quadros Ethernet GOOSE legítimos
  • Injetar quadros Ethernet usando EtherType 0x88B8

Este não é um ataque remoto arbitrário baseado na Internet.

Base técnica

A lógica de recepção relevante verifica sqNum quando o stNum recebido é igual ao stNum armazenado. O caminho de código testado não rejeita um stNum menor antes de o estado do assinante ser atualizado e o listener ser invocado.

O arquivo de biblioteca testado não foi modificado. As cópias original e de trabalho de src/goose/goose_receiver.c tinham o mesmo valor SHA-256:

c42f2aec80f605c458d0bca524ccb09f2e35f9b83a02f854f95d9444616c075b

Verificação de integridade da origem

Ambiente de teste

  • Ubuntu 20.04.6 LTS
  • libiec61850 v1.6
  • Par de Ethernet virtual isolado veth0 / veth1 do Linux
  • tcpdump
  • TShark
  • Python 3 e Scapy
  • Publicador e assinante de exemplo modificados, usados apenas como bancada de teste

A bancada de teste produziu transições de estado controladas e imprimiu valores de stNum, sqNum, validade e dados visíveis no callback. O próprio arquivo vulnerável da biblioteca não foi modificado.

Experimento A: retrocesso de stNum menor

Linha de base

O publicador controlado enviou dois estados:

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

A captura de pacotes da linha de base continha dois quadros GOOSE nesta ordem:

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

Campos e callbacks da linha de base

A saída do assinante também continha um callback auxiliar para stNum=1, sqNum=0 marcado com valid=false antes do Estado B. Esse callback auxiliar é mantido nas evidências, mas não é usado como base para a conclusão do retrocesso. O estado decisivo anterior ao replay era o callback posterior contendo stNum=2 e o valor de dados 2222.

Replay único

O script de replay carregou a captura de linha de base com dois quadros, selecionou o quadro 1 e o enviou uma vez através de veth0.

Imediatamente antes do replay, o listener havia reportado:

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

Depois que o quadro antigo foi repetido uma vez, o listener reportou:

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

Replay único e retrocesso de stNum

Isso demonstra um retrocesso observado do estado do assinante de stNum=2 para stNum=1 após repetir um quadro de stNum menor capturado anteriormente.

Replays idênticos adicionais

Mais quatro cópias do mesmo quadro antigo foram enviadas. Todas as quatro continham stNum=1, sqNum=0.

As cópias posteriores foram reportadas como valid=false, mas os números de callback continuaram aumentando e os dados repetidos permaneceram visíveis:

Replays duplicados ainda geram callbacks

Essa observação secundária mostra que marcar um quadro repetido como inválido não impediu a entrega ao listener no caminho de recepção testado.

Experimento B: replay de sqNum não crescente

Uma reprodução anterior usou o publicador e o assinante de exemplo oficiais. O publicador produziu uma sequência normal com:

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

O primeiro quadro capturado (stNum=1, sqNum=0) foi então repetido depois que o assinante já havia processado o valor posterior da sequência.

Linha de base original do sqNum

As cópias repetidas foram reportadas como inválidas porque o sqNum=0 recebido não era mais recente que o valor de sequência armazenado. No entanto, o assinante continuou a imprimir eventos do listener contendo os dados repetidos:

Callbacks do replay original do sqNum

Este experimento suporta uma observação mais restrita, porém relacionada:

  • O replay do mesmo estado foi detectado por meio do sinalizador de validade.
  • A detecção não impediu a entrega por callback da mensagem repetida no exemplo testado.

As capturas de tela brutas do replay original são mantidas como material de apoio:

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

Essas imagens brutas contêm avisos não relacionados de importação de módulos opcionais do Scapy. Os avisos não impediram o script de reportar os quadros GOOSE capturados e concluir a transmissão, mas as capturas de tela mais limpas acima são preferidas para revisar o resultado técnico.

Relação entre os dois experimentos

Os experimentos demonstram diferentes ramificações do mesmo problema de replay/atualidade de mensagens GOOSE:

ObservaçãoMensagem recebidaResultado observado
Replay de stNum menorstNum=2 armazenado; stNum=1 antigo recebidoO estado e os dados antigos foram entregues ao listener e reportados como válidos na execução testada
Replay de sqNum não crescenteMesmo stNum; sqNum mais antigo ou duplicado recebidoA mensagem foi reportada como inválida, mas os callbacks do listener e a entrega dos dados repetidos continuaram

A primeira observação é o principal achado do CVE porque demonstra retrocesso de um estado mais novo para um estado mais antigo. A segunda observação é uma evidência de apoio sobre como replays inválidos do mesmo estado continuam pelo caminho do listener.

Impacto observado

O impacto demonstrado no nível de software é:

Baixar ferramenta