Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
CVE-2026-52134-libiec61850 — Avviso tecnico pubblico e prove di riproduzione per la CVE-2026-52134 che riguarda la gestione del replay GOOSE in libiec61850 v1.6. | Kitploit
Strumenti/GitHubGitHub/if-forget/cve-2026-52134-libiec61850
Analisi delle VulnerabilitàSicurezza SCADA/ICSSicurezza di ReteApprendimento e FormazioneRisorse CurateLab e Pratica
GitHubif-forget/cve-2026-52134-libiec61850

CVE-2026-52134-libiec61850

Avviso tecnico pubblico e prove di riproduzione per la CVE-2026-52134 che riguarda la gestione del replay GOOSE in libiec61850 v1.6.

Vedi Repository
61 mese faNon ancora revisionato

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

CVE-2026-52134: gestione del replay GOOSE e della freschezza dei messaggi in libiec61850 v1.6

Stato

CVE-2026-52134 è stato assegnato. La pubblicazione del corrispondente record CVE è in sospeso.

Prodotto interessato

  • Fornitore: MZ Automation GmbH
  • Prodotto: libiec61850
  • Versione testata: 1.6
  • Stato delle altre versioni: Non confermato
  • File interessato: src/goose/goose_receiver.c
  • Funzione interessata: parseGoosePayload()

Riepilogo

Il percorso di ricezione del subscriber GOOSE in libiec61850 v1.6 non rifiuta adeguatamente alcuni messaggi GOOSE riprodotti (replay) o obsoleti prima di aggiornare lo stato visibile al subscriber e invocare la callback del listener registrato.

Due esperimenti controllati dimostrano un comportamento correlato nello stesso percorso di ricezione:

  1. Rollback di stNum inferiore: dopo che il subscriber ha elaborato , la riproduzione di un frame catturato in precedenza ha causato la segnalazione da parte del listener dello stato e dei dati più vecchi.
stNum=2
stNum=1
  • Replay di sqNum non crescente: quando è stato riprodotto un frame catturato in precedenza con lo stesso stNum ma un sqNum più vecchio, il frame è stato contrassegnato come non valido, ma le callback del listener si sono comunque verificate e i dati riprodotti sono rimasti visibili.
  • Questi sono presentati come due osservazioni correlate di un unico problema di gestione del replay/freschezza dei messaggi, non come due CVE separati.

    Prerequisiti dell'attacco

    Un attaccante deve essere in grado di:

    • Accedere al dominio di broadcast Layer-2 IEEE 802.3 o alla VLAN pertinenti
    • Catturare frame Ethernet GOOSE legittimi
    • Iniettare frame Ethernet utilizzando l'EtherType 0x88B8

    Non si tratta di un attacco remoto arbitrario basato su Internet.

    Base tecnica

    La logica di ricezione pertinente controlla sqNum quando lo stNum ricevuto è uguale allo stNum memorizzato. Il percorso di codice testato non rifiuta uno stNum inferiore prima che lo stato del subscriber venga aggiornato e il listener venga invocato.

    Il file di libreria testato non è stato modificato. La copia originale e quella di lavoro di src/goose/goose_receiver.c avevano lo stesso valore SHA-256:

    root@kitploit:~
    c42f2aec80f605c458d0bca524ccb09f2e35f9b83a02f854f95d9444616c075b
    

    Verifica dell'integrità della sorgente

    Ambiente di test

    • Ubuntu 20.04.6 LTS
    • libiec61850 v1.6
    • Coppia Ethernet virtuale isolata veth0 / veth1 di Linux
    • tcpdump
    • TShark
    • Python 3 e Scapy
    • Publisher e subscriber di esempio modificati, usati solo come banco di prova

    Il banco di prova ha prodotto transizioni di stato controllate e ha stampato i valori di stNum, sqNum, validità e dati visibili dalla callback. Il file di libreria vulnerabile stesso non è stato modificato.

    Esperimento A: rollback di stNum inferiore

    Riferimento

    Il publisher controllato ha inviato due stati:

    root@kitploit:~
    State A: stNum=1, sqNum=0, data=1111
    State B: stNum=2, sqNum=0, data=2222
    

    La cattura di pacchetti di riferimento conteneva due frame GOOSE in questo ordine:

    root@kitploit:~
    Frame 1: stNum=1, sqNum=0
    Frame 2: stNum=2, sqNum=0
    

    Campi e callback di riferimento

    L'output del subscriber conteneva anche una callback ausiliaria per stNum=1, sqNum=0 contrassegnata come valid=false prima dello Stato B. Questa callback ausiliaria è conservata nell'evidenza ma non viene utilizzata come base per la conclusione del rollback. Lo stato decisivo pre-replay era la callback successiva contenente stNum=2 e il valore di dati 2222.

    Replay singolo

    Lo script di replay ha caricato la cattura di riferimento a due frame, ha selezionato il frame 1 e lo ha inviato una volta attraverso veth0.

    Immediatamente prima del replay, il listener aveva riportato:

    root@kitploit:~
    stNum=2, sqNum=0, valid=true, allData={2222}
    

    Dopo che il vecchio frame è stato riprodotto una volta, il listener ha riportato:

    root@kitploit:~
    stNum=1, sqNum=0, valid=true, allData={1111}
    

    Replay singolo e rollback di stNum

    Questo dimostra un rollback osservato dello stato del subscriber da stNum=2 a stNum=1 dopo aver riprodotto un frame con stNum inferiore catturato in precedenza.

    Replay identici aggiuntivi

    Sono state inviate altre quattro copie dello stesso vecchio frame. Tutte e quattro contenevano stNum=1, sqNum=0.

    Le copie successive sono state riportate come valid=false, ma i numeri delle callback hanno continuato ad aumentare e i dati riprodotti sono rimasti visibili:

    I replay duplicati causano ancora callback

    Questa osservazione secondaria mostra che contrassegnare come non valido un frame ripetuto non ha impedito la consegna al listener nel percorso di ricezione testato.

    Esperimento B: replay di sqNum non crescente

    Una riproduzione precedente ha utilizzato il publisher e il subscriber di esempio ufficiali. Il publisher ha prodotto una sequenza normale con:

    root@kitploit:~
    stNum=1
    sqNum=0, 1, 2, 3
    

    Il primo frame catturato (stNum=1, sqNum=0) è stato quindi riprodotto dopo che il subscriber aveva già elaborato il valore di sequenza successivo.

    Baseline sqNum originale

    Le copie riprodotte sono state riportate come non valide perché lo sqNum=0 ricevuto non era più recente del valore di sequenza memorizzato. Tuttavia, il subscriber ha continuato a stampare eventi del listener contenenti i dati riprodotti:

    Callback di replay sqNum originali

    Questo esperimento supporta un'osservazione più ristretta ma correlata:

    • Il replay dello stesso stato è stato rilevato tramite il flag di validità.
    • Il rilevamento non ha impedito la consegna della callback del messaggio riprodotto nell'esempio testato.

    Gli screenshot grezzi del replay originale sono conservati come materiale di supporto:

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

    Queste immagini grezze contengono avvisi non correlati relativi all'importazione di moduli opzionali di Scapy. Gli avvisi non hanno impedito allo script di segnalare i frame GOOSE catturati e di completare la trasmissione, ma per esaminare il risultato tecnico sono preferiti gli screenshot più puliti mostrati sopra.

    Relazione tra i due esperimenti

    Gli esperimenti dimostrano rami diversi dello stesso problema di replay/freschezza dei messaggi GOOSE:

    OsservazioneMessaggio ricevutoRisultato osservato
    Replay con stNum inferiorestNum=2 memorizzato; ricevuto vecchio stNum=1Lo stato e i dati vecchi sono stati consegnati al listener e riportati come validi nell'esecuzione testata
    Replay di sqNum non crescenteStesso stNum; ricevuto sqNum più vecchio o duplicatoIl messaggio è stato riportato come non valido, ma le callback del listener e la consegna dei dati riprodotti sono continuate

    La prima osservazione è il risultato principale della CVE perché dimostra il rollback da uno stato più recente a uno più vecchio. La seconda osservazione è un'evidenza di supporto su come i replay non validi dello stesso stato continuino attraverso il percorso del listener.

    Impatto osservato

    L'impatto dimostrato a livello software è:

    • Uno stato GOOSE precedentemente accettato può essere consegnato al listener dopo che uno stato più recente è già stato elaborato.
    • Lo stato visibile al subscriber può passare da uno stNum più recente a uno stNum più vecchio.
    • I frame obsoleti ripetuti possono continuare a causare attività del listener anche quando le copie successive vengono riportate come non valide.

    Le applicazioni che consumano i dati della callback senza un controllo indipendente della freschezza potrebbero elaborare valori obsoleti o riprodotti.

    L'effetto a valle dipende dall'applicazione subscriber, dalla configurazione, dalla logica di interblocco e dalla logica di protezione.

    In questi esperimenti non è stato testato o utilizzato alcun relè di protezione fisico, circuito di sgancio, interruttore automatico o rete di sottostazione di produzione.

    Direzione di correzione suggerita

    Prima di aggiornare lo stato del subscriber o di invocare il listener:

    1. Rifiutare uno stNum ricevuto più vecchio dell'ultimo stNum accettato.
    2. Quando lo stNum è invariato, rifiutare uno sqNum non crescente.
    3. Assicurarsi che un frame classificato come non valido non possa sovrascrivere l'ultimo stato accettato o consegnare dati obsoleti attraverso il normale percorso del listener.
    4. Tenere conto del riavvio legittimo, della risincronizzazione e del comportamento di gestione dei contatori nell'implementazione finale.

    Riduzione temporanea del rischio

    • Limitare l'accesso ai segmenti Ethernet GOOSE e alle VLAN.
    • Impedire a dispositivi non autorizzati di iniettare frame Layer-2.
    • Monitorare rollback inattesi di stNum e valori sqNum ripetuti.
    • Validare la freschezza dei dati del subscriber prima di utilizzare i valori della callback in logiche critiche.
    • Testare le modifiche in un ambiente di laboratorio isolato prima della distribuzione in produzione.

    Evidenze di supporto

    Le seguenti immagini forniscono informazioni sulla provenienza e sull'ambiente. Supportano la riproduzione ma non sono singolarmente necessarie per comprendere il risultato principale.

    Ispezione del banco di prova

    Ispezione del banco di prova

    Build riuscita

    Build riuscita

    Rete veth isolata

    Rete veth isolata

    Riepilogo della cattura di riferimento

    Riepilogo della cattura di riferimento

    Checksum degli artefatti

    Checksum degli artefatti

    Classificazione proposta

    • Debolezza: debolezza di validazione del replay e della freschezza dei messaggi
    • CWE proposta: CWE-294, Authentication Bypass by Capture-replay

    Il risultato dimostrato è l'accettazione del replay e la consegna di stato obsoleto. Non dipende dalla dimostrazione che l'autenticazione crittografica fosse abilitata nell'ambiente testato.

    Riferimenti

    • Repository ufficiale di libiec61850
    • File sorgente interessato nell'albero v1.6
    • CVE-2026-52134 su CVE.org

    Crediti

    Segnalato da:

    • Wang Jing
    • Li Chen Yu
    • Guo Lu Lu
    • Guo Jia Xin
    • Zhang Jia Tu
    Scarica lo strumento