Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
CVE-2026-52134-libiec61850 — Öffentlicher technischer Sicherheitshinweis und Reproduktionsnachweise für CVE-2026-52134, das die GOOSE-Replay-Behandlung in libiec61850 v1.6 betrifft. | Kitploit
Tools/GitHubGitHub/if-forget/cve-2026-52134-libiec61850
SchwachstellenanalyseSCADA/ICS-SicherheitNetzwerksicherheitLernen & BildungKuratierte RessourcenLabs & Praxis
GitHubif-forget/cve-2026-52134-libiec61850

CVE-2026-52134-libiec61850

Öffentlicher technischer Sicherheitshinweis und Reproduktionsnachweise für CVE-2026-52134, das die GOOSE-Replay-Behandlung in libiec61850 v1.6 betrifft.

Repository anzeigen
6vor 1 MonatNoch nicht geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

CVE-2026-52134: GOOSE-Replay und Behandlung der Nachrichtenfrische in libiec61850 v1.6

Status

CVE-2026-52134 wurde zugewiesen. Die Veröffentlichung des zugehörigen CVE-Eintrags steht noch aus.

Betroffenes Produkt

  • Hersteller: MZ Automation GmbH
  • Produkt: libiec61850
  • Getestete Version: 1.6
  • Status anderer Versionen: Nicht bestätigt
  • Betroffene Datei: src/goose/goose_receiver.c
  • Betroffene Funktion: parseGoosePayload()

Zusammenfassung

Der Empfangspfad des GOOSE-Subscribers in libiec61850 v1.6 lehnt bestimmte wiederabgespielte oder veraltete GOOSE-Nachrichten nicht ausreichend ab, bevor der für den Subscriber sichtbare Zustand aktualisiert und der registrierte Listener-Callback aufgerufen wird.

Zwei kontrollierte Experimente zeigen zusammenhängendes Verhalten im selben Empfangspfad:

  1. Rollback auf niedrigeres stNum: Nachdem der Subscriber verarbeitet hatte, führte das erneute Abspielen eines zuvor erfassten -Frames dazu, dass der Listener den älteren Zustand und die älteren Daten erneut meldete.
stNum=2
stNum=1
  • Replay mit nicht steigendem sqNum: Wenn ein zuvor erfasster Frame mit demselben stNum, aber einem älteren sqNum erneut abgespielt wurde, wurde der Frame als ungültig markiert, aber Listener-Callbacks traten weiterhin auf und die wiederabgespielten Daten blieben sichtbar.
  • Diese werden als zwei zusammenhängende Beobachtungen eines einzigen Problems bei der Replay-/Nachrichtenfrische-Behandlung dargestellt, nicht als zwei separate CVEs.

    Angriffsvoraussetzungen

    Ein Angreifer muss in der Lage sein:

    • Auf die relevante IEEE-802.3-Layer-2-Broadcast-Domain oder das VLAN zuzugreifen
    • Legitime GOOSE-Ethernet-Frames zu erfassen
    • Ethernet-Frames mit EtherType 0x88B8 einzuschleusen

    Dies ist kein beliebiger internetbasierter Remote-Angriff.

    Technische Grundlage

    Die relevante Empfangslogik prüft sqNum, wenn das empfangene stNum dem gespeicherten stNum entspricht. Der getestete Codepfad lehnt ein niedrigeres stNum nicht ab, bevor der Subscriber-Zustand aktualisiert und der Listener aufgerufen wird.

    Die getestete Bibliotheksdatei wurde nicht modifiziert. Das Original und die Arbeitskopien von src/goose/goose_receiver.c hatten denselben SHA-256-Wert:

    root@kitploit:~
    c42f2aec80f605c458d0bca524ccb09f2e35f9b83a02f854f95d9444616c075b
    

    Source integrity check

    Testumgebung

    • Ubuntu 20.04.6 LTS
    • libiec61850 v1.6
    • Isoliertes virtuelles Ethernet-Paar veth0 / veth1 unter Linux
    • tcpdump
    • TShark
    • Python 3 und Scapy
    • Modifizierte Beispiel-Publisher und -Subscriber, die nur als Testaufbau verwendet wurden

    Der Testaufbau erzeugte kontrollierte Zustandsübergänge und gab die im Callback sichtbaren Werte für stNum, sqNum, Gültigkeit und Daten aus. Die verwundbare Bibliotheksdatei selbst wurde nicht modifiziert.

    Experiment A: Rollback auf niedrigeres stNum

    Baseline

    Der kontrollierte Publisher sendete zwei Zustände:

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

    Der Baseline-Paketmitschnitt enthielt zwei GOOSE-Frames in dieser Reihenfolge:

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

    Baseline fields and callbacks

    Die Subscriber-Ausgabe enthielt außerdem einen zusätzlichen Callback für stNum=1, sqNum=0, der vor State B als valid=false markiert war. Dieser zusätzliche Callback ist in den Beweismitteln enthalten, wird aber nicht als Grundlage für die Rollback-Schlussfolgerung verwendet. Der entscheidende Zustand vor dem Replay war der spätere Callback mit stNum=2 und dem Datenwert 2222.

    Einzelnes Replay

    Das Replay-Skript lud den Baseline-Mitschnitt mit zwei Frames, wählte Frame 1 aus und sendete ihn einmal über veth0.

    Unmittelbar vor dem Replay hatte der Listener gemeldet:

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

    Nachdem der alte Frame einmal erneut abgespielt wurde, meldete der Listener:

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

    Single replay and stNum rollback

    Dies zeigt ein beobachtetes Rollback des Subscriber-Zustands von stNum=2 auf stNum=1, nachdem ein zuvor erfasster Frame mit niedrigerem stNum erneut abgespielt wurde.

    Zusätzliche identische Replays

    Vier weitere Kopien desselben alten Frames wurden gesendet. Alle vier enthielten stNum=1, sqNum=0.

    Die späteren Kopien wurden als valid=false gemeldet, aber die Callback-Nummern stiegen weiter an und die wiederabgespielten Daten blieben sichtbar:

    Duplicate replays still cause callbacks

    Diese sekundäre Beobachtung zeigt, dass das Markieren eines wiederholten Frames als ungültig die Zustellung an den Listener im getesteten Empfangspfad nicht verhinderte.

    Experiment B: Replay mit nicht steigendem sqNum

    Eine frühere Reproduktion verwendete den offiziellen Beispiel-Publisher und -Subscriber. Der Publisher erzeugte eine normale Sequenz mit:

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

    Der zuerst erfasste Frame (stNum=1, sqNum=0) wurde dann erneut abgespielt, nachdem der Subscriber den späteren Sequenzwert bereits verarbeitet hatte.

    Original sqNum baseline

    Die wiederabgespielten Kopien wurden als ungültig gemeldet, weil das empfangene sqNum=0 nicht neuer war als der gespeicherte Sequenzwert. Der Subscriber gab jedoch weiterhin Listener-Ereignisse mit den wiederabgespielten Daten aus:

    Original sqNum replay callbacks

    Dieses Experiment stützt eine engere, aber verwandte Beobachtung:

    • Das Replay desselben Zustands wurde über das Gültigkeitsflag erkannt.
    • Die Erkennung verhinderte im getesteten Beispiel nicht die Zustellung der wiederabgespielten Nachricht per Callback.

    Die rohen ursprünglichen Replay-Screenshots sind als unterstützendes Material aufbewahrt:

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

    Diese rohen Bilder enthalten für das Experiment irrelevante Warnungen zum Import optionaler Scapy-Module. Die Warnungen verhinderten nicht, dass das Skript die erfassten GOOSE-Frames meldete und die Übertragung abschloss. Für die Überprüfung des technischen Ergebnisses sind jedoch die oben gezeigten saubereren Screenshots zu bevorzugen.

    Zusammenhang zwischen den beiden Experimenten

    Die Experimente zeigen verschiedene Zweige desselben GOOSE-Replay-/Nachrichtenfrische-Problems:

    BeobachtungEmpfangene NachrichtBeobachtetes Ergebnis
    Replay mit niedrigerem stNumGespeichert stNum=2; empfangen altes stNum=1Alter Zustand und alte Daten wurden an den Listener übermittelt und im getesteten Lauf als gültig gemeldet
    Replay mit nicht steigendem sqNumGleiches stNum; empfangen älteres oder doppeltes sqNumNachricht wurde als ungültig gemeldet, aber Listener-Callbacks und die Zustellung wiederabgespielter Daten liefen weiter

    Die erste Beobachtung ist der primäre CVE-Befund, da sie ein Rollback von einem neueren zu einem älteren Zustand zeigt. Die zweite Beobachtung ist ein unterstützender Beleg dafür, wie ungültige Replays desselben Zustands weiterhin durch den Listener-Pfad laufen.

    Beobachtete Auswirkungen

    Die nachgewiesenen Auswirkungen auf Software-Ebene sind:

    • Ein zuvor akzeptierter GOOSE-Zustand kann an den Listener übermittelt werden, nachdem bereits ein neuerer Zustand verarbeitet wurde.
    • Der für den Subscriber sichtbare Zustand kann von einem neueren stNum zu einem älteren stNum wechseln.
    • Wiederholte veraltete Frames können weiterhin Listener-Aktivität verursachen, selbst wenn spätere Kopien als ungültig gemeldet werden.

    Anwendungen, die Callback-Daten ohne unabhängige Durchsetzung der Frische konsumieren, können veraltete oder wiederabgespielte Werte verarbeiten.

    Die nachgelagerte Wirkung hängt von der Subscriber-Anwendung, der Konfiguration, der Verriegelungslogik und der Schutzlogik ab.

    In diesen Experimenten wurde kein physisches Schutzrelais, kein Auslösestromkreis, kein Leistungsschalter und kein Produktionsnetz einer Umspannstation getestet oder betrieben.

    Vorgeschlagener Behebungsansatz

    Vor der Aktualisierung des Subscriber-Zustands oder dem Aufruf des Listeners:

    1. Ein empfangenes stNum, das älter ist als das zuletzt akzeptierte stNum, ablehnen.
    2. Wenn stNum unverändert ist, ein nicht steigendes sqNum ablehnen.
    3. Sicherstellen, dass ein als ungültig klassifizierter Frame den zuletzt akzeptierten Zustand nicht überschreiben oder veraltete Daten über den normalen Listener-Pfad zustellen kann.
    4. Legitimes Neustart-, Resynchronisations- und Zählerbehandlungsverhalten in der endgültigen Implementierung berücksichtigen.

    Vorübergehende Risikominderung

    • Den Zugriff auf GOOSE-Ethernet-Segmente und VLANs beschränken.
    • Verhindern, dass nicht autorisierte Geräte Layer-2-Frames einschleusen.
    • Unerwartetes stNum-Rollback und wiederholte sqNum-Werte überwachen.
    • Die Frische der Subscriber-Daten validieren, bevor Callback-Werte in kritischer Logik verwendet werden.
    • Änderungen vor dem Produktionseinsatz in einer isolierten Laborumgebung testen.

    Unterstützende Beweismittel

    Die folgenden Bilder liefern Herkunfts- und Umgebungsinformationen. Sie unterstützen die Reproduktion, sind aber einzeln nicht erforderlich, um das Hauptergebnis zu verstehen.

    Inspektion des Testaufbaus

    Test harness inspection

    Erfolgreicher Build

    Successful build

    Isoliertes veth-Netzwerk

    Isolated veth network

    Zusammenfassung des Baseline-Mitschnitts

    Baseline capture summary

    Prüfsummen der Artefakte

    Artifact checksums

    Vorgeschlagene Klassifizierung

    • Schwachstelle: Schwäche bei der Replay- und Nachrichtenfrische-Validierung
    • Vorgeschlagene CWE: CWE-294, Authentication Bypass by Capture-replay

    Das nachgewiesene Ergebnis ist die Akzeptanz von Replays und die Zustellung veralteter Zustände. Es hängt nicht vom Nachweis ab, dass in der getesteten Bereitstellung kryptografische Authentifizierung aktiviert war.

    Referenzen

    • Offizielles libiec61850-Repository
    • Betroffene Quelldatei im v1.6-Baum
    • CVE-2026-52134 auf CVE.org

    Danksagungen

    Gemeldet von:

    • Wang Jing
    • Li Chen Yu
    • Guo Lu Lu
    • Guo Jia Xin
    • Zhang Jia Tu
    Tool herunterladen