Skip to content
KitploitKITPLOIT
ToolsBlog
Log in
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-2024-11467 — VMWare Horizon Client für macOS LPE aufgrund eines XPC-Logikfehlers. Verspäteter POC für einen 0-Day, den ich verantwortungsvoll an Omnissa gemeldet habe. | Kitploit
Tools/GitHubGitHub/null-event/cve-2024-11467
Privilege EscalationSchwachstellenanalyseCode-AnalyseExploitationReverse EngineeringPenetrationstestsBinary-Exploitation
GitHubnull-event/cve-2024-11467

CVE-2024-11467

VMWare Horizon Client für macOS LPE aufgrund eines XPC-Logikfehlers. Verspäteter POC für einen 0-Day, den ich verantwortungsvoll an Omnissa gemeldet habe.

Repository anzeigen
9vor 8 MonatenNoch 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-2024-11467

Das macOS-Betriebssystem verwendet XPC-Dienste für die grundlegende Interprozesskommunikation zwischen verschiedenen Prozessen, wie z. B. zwischen dem XPC-Dienst-Daemon und privilegierten Hilfsprogrammen von Drittanbieter-Anwendungen. Der VMware Horizon Client registriert bei der Installation den privilegierten Helfer com.vmware.horizon.CDSHelper unter dem Verzeichnis /Library/PrivilegedHelperTools/.

Es ist auch zu beachten, dass der Mach-Name com.vmware.horizon.CDSHelper vom privilegierten Helfer verwendet wird, um auf eingehende XPC-Verbindungen zu lauschen, wie oben gezeigt. Mit den Standard-Entwicklertools von macOS wurden dann Symbole aus der Helfer-Binärdatei extrahiert, um festzustellen, dass sie XPC-Verhalten integriert:

» nm -a /Library/PrivilegedHelperTools/com.vmware.horizon.CDSHelper | grep -i xpc                                                                                       
                 U __xpc_error_connection_invalid
                 U __xpc_error_key_description
                 U __xpc_type_connection
                 U __xpc_type_dictionary
                 U __xpc_type_error
                 U _xpc_connection_create_mach_service
                 U _xpc_connection_get_pid
                 U _xpc_connection_resume
                 U _xpc_connection_send_message
                 U _xpc_connection_set_event_handler
                 U _xpc_dictionary_create_reply
                 U _xpc_dictionary_get_remote_connection
                 U _xpc_dictionary_get_string
                 U _xpc_dictionary_set_int64
                 U _xpc_get_type
                 U _xpc_release

Das Hopper Disassembler Werkzeug wurde dann verwendet, um den Helfer in einen Decompiler zu laden, um ihn weiter rückwärts zu entwickeln, wie unten gezeigt:

open -a /Applications/Hopper\\ Disassembler\\ v4.app /Library/PrivilegedHelperTools/com.vmware.horizon.CDSHelper

Die Funktion EntryPoint() wurde lokalisiert und überprüft, wodurch bestätigt wurde, dass sie den Haupt-Einstiegspunkt des CDSHelper darstellt.

Die Funktion sub_100005fa0 wurde dann dekompiliert und bestätigte damit, dass das privilegierte Helfer-Programm des VMware Horizon Client die XPC-Dienste-API verwendet – dies ist die untere C-Ebene-API, die Apple bereitstellt, im Gegensatz zur XPC-Verbindungs-API, die auf der Objective-C/Swift-Ebene liegt:

int sub_100005fa0(int arg0, int arg1) {
    sub_1000063d4("Starting service: %s\n");
    r0 = xpc_connection_create_mach_service(arg0, 0x0, 0x1);
    xpc_connection_set_event_handler(r0, &var_38);
    r0 = xpc_connection_resume(r20);
    dispatch_main();
    return r0;
}

Nachdem der Mach-Dienst erstellt wurde (via xpc_connection_create_mach_service(com.vmware.horizon.CDSHelper)), werden Nachrichten zwischen dem Client und dem XPC-Dienst des Horizon Client über XPC-Wörterbuchobjekte ausgetauscht, die mit der Methode xpc_dictionary_create() erstellt werden. Werte können zu diesem Wörterbuch mit Methoden hinzugefügt werden, die Apple Entwicklern zur Verfügung stellt; diese beginnen typischerweise mit xpc_dictionary_set_*. Der Client kann diese XPC-Wörterbuchobjekte über Methoden wie xpc_connection_send_* an den XPC-Dienst senden. Auf der Seite des XPC-Dienstes des Horizon Client wird ein Handler registriert, der die vom Client empfangenen XPC-Wörterbuchobjekte verarbeiten kann. Dies geschieht mit der Methode xpc_connection_set_event_handler(). Schließlich werden Werte aus dem empfangenen XPC-Wörterbuchobjekt mit Methoden wie xpc_dictionary_get_* gelesen. Nachdem EntryPoint() des CDSHelper zurückgekehrt ist, wird die Funktion sub_100056d0 aufgerufen:

image

An diesem Punkt geht die Ausführung an sub_1000056ec über, die den Großteil der Arbeit bei der Verarbeitung eingehender XPC-Nachrichten übernimmt. Die gesamte dekompilierte Funktion ist unten angegeben. Die relevanten anfälligen Teile werden unmittelbar danach überprüft.

int sub_1000056ec(int arg0, int arg1) {
    r31 = r31 - 0x90;
    var_30 = r24;
    stack[-56] = r23;
    var_20 = r22;
    stack[-40] = r21;
    var_10 = r20;
    stack[-24] = r19;
    saved_fp = r29;
    stack[-8] = r30;
    r19 = arg1;
    var_38 = **___stack_chk_guard;
    sub_1000063d4("CDSHelper: The cds helper will call HelperMain.\n");
    r0 = xpc_dictionary_get_string(r19, "cdsjob");
    if (r0 == 0x0) goto loc_1000057bc;

loc_100005738:
    r20 = r0;
    r0 = sub_1000063d4("CDSHelper:  cdsJob is %s.\n");
    if (strcmp(r20, "cdsjob_runscript") == 0x0) goto loc_100005818;

loc_100005760:
    if (strcmp(r20, "cdsjob_movefile") == 0x0) goto loc_1000058c4;

loc_100005774:
    if (strcmp(r20, "cdsjob_installpackage") == 0x0) {
            if (**___stack_chk_guard == var_38) {
                    r0 = sub_100005498(r19);
            }
            else {
                    __stack_chk_fail();
            }
    }
    else {
            r0 = sub_100005380(r19, 0x16);
            sub_100006434("NOT_REACHED %s:%d\n");
    }
    return r0;

loc_1000058c4:
    r0 = sub_1000068b8();
    if (r0 == 0x0) goto loc_100005980;

loc_1000058d4:
    r22 = r0;
    r0 = xpc_dictionary_get_string(r19, "cds_movefile_srcfile");
    r20 = r0;
    if (r0 == 0x0) goto loc_1000059b0;

loc_1000058f0:
    r0 = xpc_dictionary_get_string(r19, "cds_movefile_dstdir");
    r21 = r0;
    if (r0 == 0x0) goto loc_1000059f8;

loc_100005908:
    sub_1000069b8();
    sub_1000069b8();
    sub_100006998();
    if (0x0 == 0x0) goto loc_100005a60;

loc_100005948:
    sub_100006978();
    sub_1000067b8();
    r0 = "CDSHelper:  Failed to move the file : %s.\n";
    goto loc_100005a00;

loc_100005a00:
    sub_1000063d4(r0);
    goto loc_100005a04;

loc_100005a04:
    r22 = 0x16;
    strerror(0x16);
    sub_1000063d4("CDSHelper: The cds moving failed : %s from %s to %s!\n");
    goto loc_100005a24;

loc_100005a24:
    r0 = r19;
    r1 = r22;
    goto loc_100005a2c;

loc_100005a2c:
    r0 = sub_100005380(r0, r1);
    if (**___stack_chk_guard != var_38) {
            __stack_chk_fail();
    }
    return r0;

loc_100005a60:
    sub_1000063d4("CDSHelper: The cds moving ran successfully!\n");
    r22 = 0x0;
    goto loc_100005a24;

loc_1000059f8:
    r0 = "CDSHelper:  Invalid parameter of moving: destination dir.\n";
    goto loc_100005a00;

loc_1000059b0:
    sub_1000063d4("CDSHelper:  Invalid parameter of moving: source file.\n");
    r21 = 0x0;
    goto loc_100005a04;

loc_100005980:
    sub_1000063d4("CDSHelper:  Failed to get the invalid file manager.\n");
    r21 = 0x0;
    r20 = 0x0;
    goto loc_100005a04;

loc_100005818:
    r0 = xpc_dictionary_get_string(r19, "vmwareid");
    if (r0 == 0x0) goto loc_100005960;

loc_10000582c:
    r20 = r0;
    r0 = xpc_dictionary_get_string(r19, "path");
    if (r0 == 0x0) goto loc_10000596c;

loc_100005844:
    r21 = r0;
    if ((sub_100005df4(r20, "vmware-id") & 0x1) == 0x0) goto loc_100005998;

loc_10000585c:
    r0 = xpc_dictionary_get_string(r19, "appDir");
    if (r0 == 0x0) goto loc_1000059c4;

loc_100005870:
    r22 = r0;
    r0 = xpc_dictionary_get_string(r19, "tempDir");
    if (r0 == 0x0) goto loc_1000059c4;

loc_100005888:
    sub_100006460();
    sub_1000063d4("CDSHelper:  The cds script %s is running...\n");
    r0 = sub_100005410(&var_60);
    r20 = r0;
    if (r0 == 0x0) {
            r0 = "CDSHelper: The cds script ran successfully!\n";
    }
    else {
            strerror(r20);
            r0 = "CDSHelper: The cds script failed to run : %s!\n";
    }
    goto loc_1000059e8;

loc_1000059e8:
    sub_1000063d4(r0);
    r0 = r19;
    r1 = r20;
    goto loc_100005a2c;

loc_1000059c4:
    r0 = "CDSHelper:  Invalid parameter.\n";
    goto loc_1000059cc;

loc_1000059cc:
    sub_1000063d4(r0);
    r20 = 0x16;
    goto loc_1000059d4;
Tool herunterladen