Ressourcen
>
Research
>
Das X in XFTP steht für eXecute

Das X in XFTP steht für eXecute

Das X in XFTP steht für eXecute
Quentin Kaiser
Lead Security Researcher
Inhaltsverzeichniss

SIND SIE BEREIT, IHR RISIKOMANAGEMENT ZU VERBESSERN?

Machen Sie Cybersicherheit und Compliance mit ONEKEY effizient und effektiv.

Jetzt in Aktion sehen

Im Rahmen der Qualitätssicherung sammelt das Forschungsteam regelmäßig zufällige Firmware aus dem Internet und führt eine „Triage“ der von der ONEKEY-Plattform ausgeführten Firmware-Analysen durch, um die Ergebnisse zu validieren und potenzielle Verbesserungsbereiche für unsere Analysefunktionen zu identifizieren. Dieser Prozess ist vergleichbar mit einer Risikobewertung der Firmware von IKT-Produkten, zu der jedes Unternehmen, das in den Geltungsbereich des Digital Operational Resilience Act (DORA) oder der neuen Richtlinie über Netzwerk- und Informationssicherheit (NIS2) fällt, zur Bewältigung von Lieferkettenrisiken durchführen muss.

In einigen seltenen Fällen stoßen wir auf wirklich seltsame Bugs, deren Ursache wir nicht wirklich zurückverfolgen können.

Aktuelle Beispiele umfassen ein Objektsymbol, das auf eine Zeichenfolge verweist, die mit einem Nullbyte begann, und ein Funktionssymbol, das auf eine Thumb-2-Funktion mit einer Adresse ohne LSB-Satz verweist (das bedeutet, dass, wenn eine Binärdatei diese Bibliothek importiert und diese bestimmte Funktion aufgerufen hätte, abgestürzt wäre).

Wir befinden uns in einer besonderen Situation, in der wir die Auswirkungen der Fehler sehen können, sie aber nicht zu ihren Ursprüngen zurückverfolgen können, da wir keinen Zugriff auf die Build-Toolchain oder den Quellcode haben, um diese einzigartigen Fehler zu reproduzieren, die sich auf das auswirken, was ich persönlich als „transiente Abhängigkeiten“ bezeichne (z. B. Compiler, Linker, Builder).

Zusätzlich zu diesen Toolchainfehlern mit beobachtbaren Auswirkungen kann die Plattform Sicherheitslücken melden, die Binärdateien betreffen und für die es keine legitimen Gründe gibt. Dies ist die Geschichte unserer Untersuchung von xftp, eine Binärdatei, die mit Dahua-Firmwares nichts zu tun hat.

Entdeckung

Anfänglich meldete die ONEKEY Product Cybersecurity & Compliance Platform automatisch eine Command-Injection-Schwachstelle, die sich auf xftp binär:

Der Dienst beginnt mit dem Öffnen eines Sockets, eines TCP-Sockets auf IPv4 oder IPv6, abhängig vom angegebenen Befehlszeilenargument (-v4 oder -v6) und binde es an Port 19365. All dies wird in Funktion ausgeführt xftp_server_start.

Sobald der Socket geöffnet und gebunden ist, ruft die Binärdatei auf xftp_server_rec, wobei der Socket als Argument angegeben wird:

socket = xftp_server_start(Socket);

if (-1 < Socket) {
    do {
        iVar10 = xftp_server_recv(Buchse);

        if (iVar10 < 0) {
            puts("Die Serverwiederherstellung ist fehlgeschlagen.");
        }

        schlafen(1000000);

    } while (wahr);
}

Das xftp_server_recv starte eine Busschleife mit akzeptieren, wartet auf eine eingehende Netzwerkverbindung. Wenn eine Verbindung hergestellt ist, ruft der Server an xftp_recv:

while (sockfd_00 = accept(sockfd, (sockaddr *)0x0, (socklen_t *)0x0), sockfd_00 < 0) {
    schlafen(500000);
}

iVar1 = xftp_recv(sockfd_00, &buffer, &bufsize, &type);
typedef struct xftp_pktheader {
    int pktype;
    int datalen;
};

Die Funktion liest also 8 Byte aus dem Socket, um den Paket-Header abzurufen. Dann führt sie eine Zuweisung durch gemäß datalen und liest datalen Byte aus dem Socket.

int xftp_recv(int sockfd, char **buffer, int *bufsize, int *type)
{
    int gelesen;
    char* buf;

    lesen = recv(sockfd, &pktheader, 8, 0);

    buf = malloc(pktheader.datalen);

    lesen = recv(sockfd, buf, pktheader.datalen, 0);

    *typ = pktheader.pkttype;
    *puffer = Fehler;
    *bufsize = pktheader.data;
}

Dann wieder rein xftp_server_recv, wenn der Typ 1 ist, analysiert die Binärdatei ein durch Null getrenntes Paket, das einen Dateinamen, einen Status und den Dateiinhalt enthält. Es schreibt den Dateiinhalt auf die Festplatte mit xftp_filewrite. Wenn der Status auf gesetzt ist WAHR, dann werden die Dateiausführungsberechtigungen gesetzt mit chmod und die Datei wird ausgeführt:

size_t length;
int index;
char strcmd[512];

if (Typ == 1) {
    // Parse a null-separated packet containing filename, status, and file content
    char* Dateiname;
    char* Status;
    char* Inhalt;
    int content_length;

    iVar2 = xftp_writefile(Dateiname, Inhalt, Inhaltslänge);

    if (index_2 > 0) {
        if (strcmp("WAHR", status) == 0) {
            strcmd = "chmod +x";
            Länge = strlen(Dateiname);
            strncpy(strcmd + 9, Dateiname, Länge);
            // NOTE: Possible stack buffer overflow via filename value

            Länge = strlen(Dateiname);
            strcmd[Länge + 9] = '\0';

            iVar1 = system(strcmd);
            // NOTE: Command injection via filename

            iVar1 = system(filename);
            // NOTE: Command injection via filename
        }
    }

    // snip
    return 0;
}

free(Puffer);
close(sockfd_00);

Durch Senden einer Anfrage an den XFTP-Server kann ein nicht authentifizierter Remote-Angreifer das Gerät dazu bringen, beliebigen Code auszuführen. Entweder indem er seinen eigenen Code über den Dateiinhalt übermittelt oder Befehle einschleust Dateiname. Der potenzielle Stack-Überlauf ist nicht ausnutzbar, da strcmd Der Puffer ist 512 Byte lang und die maximal zulässige Größe für einen Dateinamen unter UNIX beträgt 256 Byte.

Warte

Alles gut, die Vulns scheint gültig zu sein. Etwas erregte jedoch unsere Aufmerksamkeit. Die Binärdatei ist für AARCH64 gebaut:

Die gesamte Firmware ist jedoch für ARM32-Geräte konzipiert. Sowohl der Kernel als auch die Binärdateien (z. B. Busybox) sind für ARM 32bit gebaut:

Wir haben uns umgesehen und keinen Hinweis darauf gefunden, dass diese Binärdatei tatsächlich verwendet wird. Es wird in der referenziert SIG-Dateiliste, was bedeutet, dass Dahua sich dieser Binärdatei bewusst ist und dass sie explizit in der Firmware enthalten ist.

Auf der Jagd nach XFTP

Wir haben nach dem Vorhandensein von XFTP in unserem Firmware-Korpus gesucht und es in anderen Dahua-Firmwares entdeckt, einschließlich des Vorkommens von ARM32-XFTP-Binärdateien in ARM32-Firmwares:

{
  "arch": "ARM",
  "Bits": "32",
  "category": "DATEI:BINÄR:APPLICATION:ELF:EXEC",
  "fwid": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "Maschine": "32",
  "magic": "ELF 32-Bit-LSB-Programmdatei, ARM, EABI5 Version 1 (SYSV), dynamisch verknüpft, Interpreter /lib/ld-uclibc.so.0, mit debug_info, nicht entfernt",
  "magic_mime": "Anwendung/X-ausführbare Datei",
  "Pfad": "/_dh_ipc-hx8xxx-nova_eng_p_stream3_v2.600.0000.14.r.20170830.bin.extracted/_romfs-x.squashfs.img.extracted/squashfs-root/usr/bin/xftp",
  "statisch": "0",
  "entfernt": "0",
  "symlink": "Falsch",
  "Typ": "ELF"
}

Die Binärdateien werden niemals entfernt und enthalten immer Debug-Informationen. Anfangs vermuteten wir, dass wir eine versteckte Hintertür entdeckt hatten, die bei Bedarf aktiviert werden konnte. Nachdem wir jedoch jede Firmware auf Anzeichen einer aktiven Nutzung untersucht hatten, fanden wir keine. Unsere Hypothese ist, dass Dahua wahrscheinlich in den meisten seiner Firmware-Versionen für Sicherheitskameras xftp mitliefert, zumindest für seine PFR5QI-E60- und IPC-HX8XXX-Produktlinien. Wir haben jedoch immer noch keine Ahnung warum.

Berichterstattung

Auch wenn die Binärdatei selbst nicht gestartet wird, wollten wir Dahua trotzdem darüber informieren, dass sie Firmwares für ARM32-Geräte mit anfälligen AARCH64-Binärdateien veröffentlichen. Wir hatten gehofft, dass sie einige Informationen darüber teilen würden, wie und warum es dazu kam. Wir waren auch neugierig auf den genauen Zweck von xftp da in den Dahua-Verwaltungshandbüchern nirgends darauf verwiesen wird.

Wir haben uns an gewandt cybersecurity@dahuatech.com seit dem 14. Februar 2024 mehrfach mit detaillierten Informationen. Wir haben nie etwas von ihnen gehört.

Wichtige Erkenntnisse

Die Tatsache, dass Dahua Firmwares für ARM32-Geräte mit anfälligen AARCH64-Binärdateien veröffentlicht, sollte ihren Kunden einige Bedenken hinsichtlich des Vertrauens geben, das sie in ihre Build-Pipeline setzen können.

Trotz alledem ist es nur ein weiteres Vorkommen dessen, was wir als „unerwünschte Software“ bezeichnen. Jegliche Software, die das Gerät im normalen Betrieb nicht benötigt, die aber Angreifern bei der Recherche oder wenn das Gerät kompromittiert ist, hilft (z. B. tcpdump, gdb, netcat). Diese unerwünschte Software wird von der Plattform gemeldet, und xftp wird in die Liste aufgenommen, damit unsere Kunden von ihrer Existenz erfahren.

Im Grunde genommen xftp implementiert eine benutzerdefinierte Protokollschicht über einfaches FTP, die es Clients ermöglicht, Upload- und Ausführungsanfragen durchzuführen. Ein ausgezeichneter C2-Mechanismus, den Sie, wenn Sie nichts davon wüssten, wahrscheinlich nicht in Netzwerk-Traces erkennen würden.

Teilen

Über Onekey

ONEKEY ist der führende europäische Spezialist für Product Cybersecurity & Compliance Management und Teil des Anlageportfolios von PricewaterhouseCoopers Deutschland (PwC). Die einzigartige Kombination der automatisierten ONEKEY Product Cybersecurity & Compliance Platform (OCP) mit Expertenwissen und Beratungsdiensten bietet schnelle und umfassende Analyse-, Support- und Verwaltungsfunktionen zur Verbesserung der Produktsicherheit und -konformität — vom Kauf über das Design, die Entwicklung, die Produktion bis hin zum Ende des Produktlebenszyklus.

KONTAKT:
Sara Fortmann

Senior Marketing Manager
sara.fortmann@onekey.com

euromarcom public relations GmbH
team@euromarcom.de

Verwandte Researchartikel

Beyond PHP2Shell: Finding Vulnerable PHP Across Your Firmware Portfolio
eMudhra CA Compromise: Are Your Embedded Devices at Risk?
Security Advisory: Secure Boot Bypass on NVIDIA Jetson for Linux

Machen Sie Cybersicherheit und Compliance mit ONEKEY effizient und effektiv.