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-58073-check — Sicherheitslücke in der Veeam Service Provider Console zur Authentifizierungsumgehung erkennen – CVE-2026-58073 | Kitploit
Tools/GitHubGitHub/bishopfox/cve-2026-58073-check
Cloud-Infrastruktur-SicherheitSchwachstellenscannerSchwachstellenanalyseNetzwerksicherheitPenetrationstests
GitHubbishopfox/cve-2026-58073-check

CVE-2026-58073-check

Sicherheitslücke in der Veeam Service Provider Console zur Authentifizierungsumgehung erkennen – CVE-2026-58073

Repository anzeigen
vor 1 TagNoch 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

Veeam Service Provider Console Agent-Impersonation — Skript zur Erkennung des Patch-Zustands

Ein sicherer, nicht authentifizierter Detektor für die KB4893-Schwachstellen in Veeam Service Provider Console (veröffentlicht am 04.08.2026). Er beantwortet eine Frage pro Ziel, vor jeder Authentifizierung oder TLS: Sind die KB4893-Fixes auf dieser Konsole vorhanden?

Das Hauptpaar ist eine Kette. CVE-2026-58073 (CVSS 9.5) erlaubt es einem nicht authentifizierten Netzwerk-Peer, einen verbundenen Management-Agenten zu impersonieren und das echte Zertifikat dieses Agenten ausgestellt zu bekommen, weil der Agenten-Handshake die Autorisierung aus der GUID ableitet, die der Peer in sein eigenes Zertifikat geschrieben hat. CVE-2026-58072 (CVSS 9.0) ist ein beliebiges Dateischreiben, das erreichbar ist, sobald man eine Agenten-Identität besitzt. Verkettet ergeben sie eine nicht authentifizierte Remote-Codeausführung auf der Konsole, die die Backups jedes Mandanten verwaltet. Das gleiche Advisory behebt auch CVE-2026-58071 (CVSS 8.2, proxierte Appliance-API als Portal-Administrator) und CVE-2026-58067 (CVSS 8.7, nicht authentifizierter Speicher-Erschöpfungs-DoS). CVE-2026-58073 und CVE-2026-58072 wurden Veeam über HackerOne gemeldet; das Advisory nennt den Melder nicht.

Dieses Skript versucht nicht, eine Impersonation durchzuführen, ein Zertifikat anzufordern oder eine Datei zu schreiben. Es liest die beworbene Protokollgeneration des Routers und sonst nichts.

Ist die Ausführung sicher?

Ja. Der Detektor ist für den Produktions- und Bewertungseinsatz konzipiert:

  • Es wird keine Authentifizierung versucht und keine der beiden Schwachstellen wird ausgenutzt. Es sendet nur einen -Handshake, der einen Empfänger benennt, der nicht existieren wird. Es wird keine TLS-Sitzung ausgehandelt, kein Zertifikat vorgelegt und wird nie aufgerufen.
Connector
SaveFiles
  • Es wird kein Zielzustand geändert. Die einzige Aktion des Servers ist eine fehlgeschlagene Wörterbuchsuche in ChannelHostProxy.m_multiplexers. Es wird kein Empfänger registriert, kein Kanal oder Multiplexer aufgebaut, kein Agenten-Datensatz berührt. Ein Receiver-Typ-Handshake würde einen Namen registrieren; dieses Tool sendet nie einen.
  • Sein Log-Fußabdruck ist dokumentiert und zurechenbar. Zwei TCP-Verbindungen und sechs Zeilen in ConnectionHub.log, jede mit dem Empfängernamen bf-probe-<uuid4>, damit ein Verteidiger einen Scan von einem Angriff unterscheiden kann. Die genauen Zeilen finden Sie unten.
  • Schutz vor Fehlalarmen. Ein Ziel wird nur dann als VULNERABLE gemeldet, nachdem es nachweist, dass es ein VSPC ConnectionHub ist (siehe unten), sodass ein stiller TCP-Dienst nicht mit einer ungepatchten Konsole verwechselt werden kann.
  • Was es auf einem Ziel hinterlässt

    Pro Ziel öffnet das Tool zwei TCP-Verbindungen und sendet auf jeder einen ConnectionHub-Handshake, der einen Empfänger bf-probe-<uuid4> benennt, der nicht existieren wird.

    Unter dem Standard---transport auto kostet ein Ziel, dessen Transport nicht der durch seinen Port implizierte ist, eine zusätzliche Verbindung: Die Sonde mit dem falschen Transport wird während des Handshakes abgelehnt, bevor ein Empfängername gelesen wird, und der richtige Transport wird dann für beide echten Sonden verwendet. Fixieren Sie --transport direct oder --transport gateway, um es bei genau zwei Verbindungen zu halten — sinnvoll, wenn Sie eine Verbindungsanzahl in einem Änderungsantrag angegeben haben.

    Auf dem Server geänderter Zustand: keiner. Der Connector-Codepfad führt eine Wörterbuchsuche in ChannelHostProxy.m_multiplexers durch, findet nichts und gibt einen Fehler zurück. Es wird kein Empfänger registriert, kein Multiplexer oder Kanal erstellt, keine TLS-Sitzung ausgehandelt, kein Agenten-Datensatz berührt. Dieses Tool sendet nie einen Receiver-Typ-Handshake, derjenige wäre es, der einen Namen registrieren würde.

    Logeinträge werden in %ProgramData%\Veeam\Veeam Availability Console\Log\Server\ConnectionHub.log geschrieben. Wörtlich von einem Live-9.2.1.33875-ConnectionHub, mit Zeitstempeln und Scope-JSON gekürzt:

    root@kitploit:~
    Sonde 1 (Version 6), sowohl gepatchte als auch ungepatchte Builds:
        [INFO] ChannelHostProxy: Accept connection begin {"RemoteEndPoint":"<ip>:<port>","Line":"1"}
        [INFO] ChannelHostProxy: Accept connection end   {"RemoteEndPoint":"<ip>:<port>","Line":"2",...}
        [WARN] ChannelHostProxy: Cannot connect transmitter. Requested receiver not found
               (receiver name:bf-probe-<uuid>) {"RemoteEndPoint":"<ip>:<port>","Line":"3",...}
    
    Sonde 2 (Version 7), nur gepatchte Builds:
        die gleichen drei Zeilen
    
    Sonde 2 (Version 7), ungepatchte Builds:
        [INFO] ChannelHostProxy: Accept connection begin
        [WARN] ChannelHostProxy: Handshake failed. Reason:Unsupported client version "7"
        [INFO] ChannelHostProxy: Accept connection end
    

    Zwei Verbindungen, sechs Zeilen, keine weiteren Einträge und keine Zustandsänderung — bestätigt auf einem Live-Host.

    Der wörtliche String bf-probe- in ConnectionHub.log identifiziert den Datenverkehr dieses Tools, sodass ein Verteidiger ihn zuordnen und ein Scan-Team nachweisen kann, was es gesendet hat. Ändern Sie RECEIVER_PREFIX im Quellcode, wenn Sie eine andere Markierung benötigen.

    So funktioniert es

    Der ConnectionHub-Management-Agenten-Router liest einen Client-Handshake vor jeder Authentifizierung oder TLS, und Request.Read validiert die vom Client beworbene Protokollversion gegen einen fest codierten Bereich. Der Fix erweiterte diesen Bereich im selben Build, der die CVEs behob:

    BuildPrüfungAkzeptiert
    <= 9.2.1.33875 (verwundbar)(uint)(versionByte - 3) <= 33, 4, 5, 6
    >= 9.3.0.35057 (gepatcht)(uint)(versionByte - 3) <= 43, 4, 5, 6, 7

    Ein Handshake, der Version 7 bewirbt, ist also ein sauberer binärer Diskriminator. Der Detektor sendet zwei Sonden pro Ziel, in dieser Reihenfolge aus gutem Grund (die Transporterkennung kann eine dritte hinzufügen — siehe unten):

    SondeBewirbtZweck
    1Version 6Muss Requested receiver not found zurückgeben, was beweist, dass das Ziel wirklich ein VSPC ConnectionHub ist
    2Version 7Eine Antwort bedeutet PATCHED; Stille bedeutet VULNERABLE

    Ohne das Stufe-1-Gate würde Stille in Sonde 2 auch zu jedem stillen TCP-Dienst im Internet passen, und Firewalls würden als verwundbare Veeam-Konsolen gemeldet.

    Beide Transporte, pro Ziel erkannt

    Es funktioniert über beide Pfade, die ein Management-Agent verwendet:

    TransportPortExposition
    Direkt zum ConnectionHub9999normalerweise intern
    Über ein Veeam Cloud Connect Gateway6180konstruktionsbedingt internetzugewandt

    Der Gateway-Pfad benötigt einen Relay-Prolog, den der direkte Pfad nicht haben darf, daher dient Sonde 1 gleichzeitig als Transporterkennung. Unter dem Standard---transport auto versucht es einen Transport, und wenn das Fingerprint-Gate nicht besteht, den anderen. Welcher auch immer besteht, wird verriegelt, und Sonde 2 verwendet ihn erneut — eine gemischte Zieldatei benötigt keine Pro-Host-Annotation.

    Die Verriegelung ist tragend. Wenn Sonde 2 auf dem anderen Transport erneut versuchen könnte, wäre Stille nicht mehr der Versionsprüfung zuzuschreiben, sondern nur noch „einer von zwei Byte-Pfaden hat nicht geantwortet", und genau so wird ein falsches VULNERABLE erzeugt.

    Welcher Transport zuerst versucht wird, entscheidet der Port, und das ist nicht kosmetisch — die beiden Fehlanpassungen scheitern mit sehr unterschiedlicher Geschwindigkeit:

    FehlanpassungWie das entfernte Ende es liestKosten
    Relay-Prolog → direkter Hubint16-Meta von hostType 44 / versionByte 0, scheitert an Request.Read-Bereichsprüfungin einem Roundtrip entsorgt
    Direkter Handshake → Gatewayint32-Framelänge von 1.012.729.346Gateway wartet auf Bytes, die nie ankommen; verbraucht das volle Timeout

    auto führt also mit dem Dienst, dem der Port gehört: zuerst Gateway auf 6180, sonst überall direkt. Das hält den häufigen Fall bei einem einzigen Versuch und die teure Fehlanpassung vom schnellen Pfad fern. Eine Sonde, die TCP überhaupt nicht öffnen kann, bricht kurz ab, ohne den zweiten Transport zu versuchen, sodass tote Hosts in einem breiten Sweep ein Timeout kosten, nicht zwei.

    Es meldet die Protokollgeneration, nicht einen exakten Build

    VULNERABLE bedeutet „die KB4893-Fixes sind nicht vorhanden", nicht „das ist 9.2.1.33875". Builds älter als 9.2.1 teilen dieselbe Versionsprüfung, daher sollten sie Protokoll 6 melden und ebenfalls als verwundbar gemeldet werden (aus dem Code abgeleitet, nicht gemessen — siehe Einschränkungen), aber das Tool kann 9.2.1 nicht von 9.1 oder 8.1 unterscheiden. Bestätigen Sie den exakten Build in der Konsolen-UI, wenn Sie ihn benötigen.

    Anforderungen

    • Python 3.8+, nur Standardbibliothek — keine Drittanbieter-Pakete.

    Verwendung

    root@kitploit:~
    # einzelner Host (Standard TCP/9999)
    ./cve_2026_58073_check.py vspc.example.com
    
    # expliziter Port, mehrere Hosts
    ./cve_2026_58073_check.py vspc.example.com:9999 10.0.0.5
    
    # Liste scannen, ein Ziel pro Zeile ('#'-Kommentare erlaubt), kompakte Ausgabe
    ./cve_2026_58073_check.py -f targets.txt --brief
    
    # maschinenlesbare Ausgabe für Pipelines
    ./cve_2026_58073_check.py -f targets.txt --json > results.json
    
    # ein Veeam Cloud Connect Gateway — der Relay-Transport wird automatisch erkannt
    ./cve_2026_58073_check.py cc-gw.example.com:6180
    
    # Transport fixieren, um die Erkennung zu überspringen (Port wird dann standardmäßig 6180)
    ./cve_2026_58073_check.py --transport gateway cc-gw.example.com
    
    # Wire-Codecs ohne Netzwerkzugriff validieren
    ./cve_2026_58073_check.py --self-test
    

    Optionen

    FlagBeschreibung
    targetsEin oder mehrere HOST[:PORT] (Port standardmäßig 9999, oder 6180 mit --transport gateway)
    -f, --targets-file DATEIZiele aus einer Datei lesen (eines pro Zeile; #-Kommentare)
    --transport {auto,direct,gateway}Wie der ConnectionHub erreicht wird. auto (Standard) erkennt es pro Ziel; gateway stellt den Cloud-Connect-Relay-Prolog voran und setzt den Standardport auf 6180
    -p, --port PORTStandardport überschreiben
    --timeout SEKTimeout pro Sonde (Standard: 8)
    --workers NGleichzeitige Ziele (Standard: 16); Ausgabe bleibt in Eingabereihenfolge
    -b, --briefEine ausgerichtete Zeile pro Ziel — ideal zum Scannen vieler Hosts
    --jsonStrukturiertes JSON ausgeben, einschließlich jeder pro Ziel gesendeten Sonde
    --no-colorFarbige Ausgabe deaktivieren (berücksichtigt auch NO_COLOR und Nicht-TTY)
    --self-testDie .NET-Wire-Codecs validieren und beenden; kein Netzwerkzugriff

    Beispiele

    Eine ungepatchte Konsole (die standardmäßige zweizeilige Ausgabe). Die Markierung [!] und VULNERABLE werden auf einem TTY rot dargestellt:

    root@kitploit:~
    $ ./cve_2026_58073_check.py vspc.example.com
    [!] vspc.example.com:9999: VULNERABLE  [protocol-7-rejected]
          ConnectionHub rejects protocol 7 but accepts 6, so the KB4893 fixes are absent (<= 9.2.1.33875)
    

    Eine gepatchte Konsole:

    root@kitploit:~
    $ ./cve_2026_58073_check.py patched.example.com
    [+] patched.example.com:9999: PATCHED  [protocol-7-accepted]
          ConnectionHub accepts protocol 7, so the KB4893 fixes are present (>= 9.3.0.35057)
    

    Ein Gateway-Ziel, mit automatisch erkanntem Relay-Transport. Das Suffix (gateway) benennt den Transport, über den das Urteil gefällt wurde:

    root@kitploit:~
    $ ./cve_2026_58073_check.py cc-gw.example.com:6180
    [!] cc-gw.example.com:6180 (gateway): VULNERABLE  [protocol-7-rejected]
          ConnectionHub rejects protocol 7 but accepts 6, so the KB4893 fixes are absent (<= 9.2.1.33875)
    

    Ein Bestand wird gesweept, eine ausgerichtete Zeile pro Host (--brief). Der Exit-Status ist 1, wenn ein Host VULNERABLE ist, sonst 0 — praktisch in Skripten:

    root@kitploit:~
    $ ./cve_2026_58073_check.py -f targets.txt --brief; echo "exit: $?"
    VULNERABLE    vspc.example.com:9999            protocol-7-rejected
    PATCHED       patched.example.com:9999         protocol-7-accepted
    UNAFFECTED    fileserver.example.com:9999      not-vspc
    ERROR         unused.example.com:9999          unreachable
    exit: 1
    

    Maschinenlesbare Ausgabe für Pipelines (--json). Jede Sonde ist pro Ziel enthalten, sodass ein Befund aus den Beweisen neu abgeleitet werden kann, statt ihm zu vertrauen. transport ist derjenige, über den das Urteil gefällt wurde, und jede Sonde trägt den von ihr verwendeten Transport — ein automatisch erkanntes Ziel zeigt also auch den abgelehnten Versuch:

    root@kitploit:~
    $ ./cve_2026_58073_check.py vspc.example.com --json
    [
      {
        "target": "vspc.example.com:9999",
        "host": "vspc.example.com",
        "port": 9999,
        "transport": "direct",
        "verdict": "VULNERABLE",
        "reason": "protocol-7-rejected",
        "detail": "ConnectionHub rejects protocol 7 but accepts 6, so the KB4893 fixes are absent (<= 9.2.1.33875)",
        "protocol_version": 6,
        "affected_cves": [
          "CVE-2026-58073",
          "CVE-2026-58072",
          "CVE-2026-58071",
          "CVE-2026-58067"
        ],
        "probes": [
          {
            "version_byte": 6,
            "transport": "direct",
            "connected": true,
            "responded": true,
            "status": "Error",
            "message": "Cannot connect transmitter. Requested receiver not found (receiver name:bf-probe-b7c40be0-e2e8-41dc-9fc3-cbbd7345954a)",
            "error": ""
          },
          {
            "version_byte": 7,
            "transport": "direct",
            "connected": true,
            "responded": false,
            "status": "",
            "message": "",
            "error": ""
          }
        ]
      }
    ]
    

    Urteile

    UrteilGrund-TagBedeutung
    VULNERABLEprotocol-7-rejectedBestätigter VSPC ConnectionHub, der Protokoll 6 akzeptiert und 7 ablehnt. Die KB4893-Fixes fehlen (<= 9.2.1.33875).
    PATCHEDprotocol-7-acceptedBestätigter VSPC ConnectionHub, der Protokoll 7 akzeptiert. Die KB4893-Fixes sind vorhanden (>= 9.3.0.35057).
    UNAFFECTEDnot-vspcTCP akzeptiert, aber auf keinem versuchten Transport mit einem gültigen ConnectionHub-Handshake geantwortet, also kein VSPC ConnectionHub.
    INCONCLUSIVEunexpected-replyAuf die Fingerprint-Sonde mit etwas anderem als Requested receiver not found geantwortet.
    INCONCLUSIVEinconclusive-discriminatorDas Fingerprint-Gate bestanden, dann auf die Version-7-Sonde weder bestanden noch nicht bestanden geantwortet — oder diese zweite Verbindung schlug vollständig fehl. Erneut versuchen.
    ERRORunreachableKeine Verbindung möglich, oder das Cloud-Connect-Gateway verweigerte den Relay-Prolog auf dem zuerst versuchten Transport (was unter auto jedes Ziel auf Port 6180 bedeutet).

    Exit-Codes

    CodeBedeutung
    0Kein Ziel war VULNERABLE
    1Mindestens ein Ziel ist VULNERABLE
    2Verwendungsfehler (ungültige Argumente / nicht lesbare Zieldatei)

    Einschränkungen

    • Protokollgeneration, nicht Build-Nummer. Siehe Es meldet die Protokollgeneration, nicht einen exakten Build oben.
    • Der Gateway-Transport wurde nur gegen ein Mock-Relay ausgeführt. Der Prolog und die bytegenaue Durchreichung wurden aus dem dekompilierten Cloud-Connect-Gateway-Code abgeleitet und gegen ein Mock getestet, das wir daraus geschrieben haben. Es wurde nicht gegen ein Produktions-Cloud-Connect-Gateway ausgeführt. Dies gilt auch für das Gateway-Bein von --transport auto; fixieren Sie --transport direct, um den ungetesteten Pfad vollständig aus einem Sweep herauszuhalten.
    • Nur Exposition. Ein VULNERABLE-Urteil spricht über den Patch-Zustand, nicht darüber, ob jemand die Konsole ausgenutzt hat. Ausnutzung hinterlässt ihre eigenen Spuren in den Logs der Konsole sowohl auf gepatchten als auch auf ungepatchten Builds; suchen Sie separat danach.
    • Erreichbarkeit. Ein Ergebnis spiegelt wider, was die Konsole von der Netzwerkposition aus antwortet, von der Sie es ausführen.

    Behebung

    Upgrade auf Veeam Service Provider Console 9.3.0.35057 oder höher (KB4893). Alle vier Probleme sind in diesem einen Build behoben, und es gibt keinen 9.2.x-Backport, daher ist die Behebung ein Versions-Upgrade und kein Hotfix.

    Zwei Dinge, die das Upgrade nicht tut. Es schränkt nicht ein, wer TCP/9999 erreichen kann, das nur die Subnetze beantworten sollte, in denen Ihre Management-Agenten leben. Und es widerruft kein Agentenzertifikat, das die Konsole bereits ausgestellt hat, einschließlich eines, das einem Angreifer ausgestellt wurde, während sie ungepatcht war. Wenn Sie Beweise für Ausnutzung finden, eröffnen Sie einen Veeam-Support-Fall für Anleitung zu kompromittierten Agentenzertifikaten: Deren Rotation ist kein dokumentiertes Verfahren, und die Zertifikate, die Sie im Portal verwalten können, sind nicht die CA, die Agentenzertifikate signiert.

    Lizenz

    Dieser Code wird unter einer MIT-Lizenz verteilt.

    Rechtlicher Haftungsausschluss

    Die Verwendung dieses Tools zum Angriff auf Ziele ohne vorherige gegenseitige Zustimmung ist illegal. Es liegt in der Verantwortung des Endbenutzers, alle geltenden lokalen, staatlichen und bundesstaatlichen Gesetze einzuhalten. Die Entwickler übernehmen keine Haftung und sind nicht verantwortlich für Missbrauch oder Schäden, die durch dieses Programm verursacht werden.

    Siehe auch

    • Veeam KB4893 — das Hersteller-Advisory und der behobene Build
    • NVD — CVE-2026-58073
    • NVD — CVE-2026-58072
    Tool herunterladen