
Patchen Sie Ihr von CVE-2024-3272 betroffenes D-Link-Gerät.
Bist du einer der über 92.000 Personen1, die mit einem D-Link NAS festsitzen, das anfällig für CVE-2024-3272 ist, und kein Patch in Sicht?
Dieses Tool verwendet den Exploit selbst, um ein anfälliges Gerät zu patchen.
1: Siehe ursprüngliche Offenlegung in den Referenzen
Dinkleberry führt einen Befehl aus, um die anfällige Datei nas_sharing.cgi durch eine gepatchte Version zu ersetzen – dabei wird der system()-Aufruf mit NOPs überschrieben.
Der Ordner /usr/local/modules (in dem die Datei liegt) ist schreibgeschützt, daher wird stattdessen eine Kopie in /usr/local/config erstellt und der Symlink in /var/www/cgi-bin wird aktualisiert, um auf die sicherere Version zu verweisen.
Ich habe mich dafür entschieden, nur den system-Aufruf zu NOP-en, damit der Befehl wie gewohnt antwortet, nur ohne tatsächlich etwas auszuführen.
[!NOTE] Das Dateisystem wird beim Booten aus dem Flash neu geladen. Das Anwenden dieses Patches funktioniert nur, bis das Gerät neu gestartet wird. Wenn Sie eine dauerhaftere Lösung wünschen, müssen Sie die Firmware neu flashen – vielleicht mit Debian
aliask:~/git/dinkleberry$ python3 ./src/main.py -h 10:01:02
usage: dinkleberry [-h] [--telnet] [--kill-telnet] [--test] [--verbose] target
positional arguments:
target Target NAS to patch
options:
-h, --help show this help message and exit
--telnet Start telnet server
--kill-telnet Stop telnet server
--test Test if device is vulnerable
--verbose, -v Set this to print debug messages
Wenn keine optionalen Flags angegeben werden, führt das Skript das Patchen durch.
Wenn Sie einfach nur auf dem Gerät herumstöbern möchten, verwenden Sie den Befehl --telnet, der eine Telnet-Sitzung auf Port 23 startet.
Das ist haarsträubend unsicher, aber Ihr Gerät ist bereits haarsträubend unsicher, also können Sie genauso gut die bequeme Shell nehmen.
[!CAUTION] Verwenden Sie dieses Tool auf eigene Gefahr. Es verändert die eigentliche Gerätesoftware.
Ich bin nicht verantwortlich für:
- dass Ihr Gerät nicht mehr funktioniert
- Datenverlust auf dem NAS
- einen Brand auslösen
- dass der TA, der Ihr Gerät fröhlich ausgenutzt hat, verärgert ist
Während der Analyse der Binärdateien nas_sharing.cgi und libsmbif.so wurde schnell klar, dass die Software auf diesem Gerät extrem anfällig ist. Anfällig im Sinne von 'nicht wartbar, komplett neu schreiben'.
Es gibt allein in nas_sharing.cgi etwa 80 Aufrufe von system() – viele davon haben einen Weg für Benutzereingaben. Ich habe mich nicht darum gekümmert, sie alle zu analysieren, um weitere Löcher zum Patchen zu finden, aber hier ist ein erstklassiges Beispiel:
/* Why use system() instead of libc fopen/fwrite?
What if you want to write a long string or your filename is long?
Painfully obvious command injection playground 🤦 */
void append_to_file(const char* string, const char* file) {
char s_cmd[1024];
sprintf(s_cmd, "echo %s >> %s", string, file);
system(s_cmd);
return;
}
Abgesehen von all diesen wahnsinnigen system-Aufrufen gibt es mehr Pufferüberläufe, als man mit einem Stock hervorkitzeln kann – und ich kann eine Menge Stöcke hervorkitzeln.
Dieses CVE steht auf CISA's KEV-Liste – Wenn Sie so ein Gerät im Internet haben, nehmen Sie es offline. Sofort.
Vielleicht sogar den Rat von D-Link befolgen und das EOL-Gerät ersetzen. Aber ich würde sicherlich kein D-Link-Produkt kaufen.