- Beim Entpacken der Firmware-Datei ließ sich die interne Struktur des Geräts leicht nachvollziehen, und beim Rodecaster Duo war SSH im Auslieferungszustand offen
- Das Update-Paket lag als gzipped tarball vor, und das Gerät enthielt zwei Partitionen, sodass bei einer Beschädigung von der anderen gebootet werden konnte, sowie Shell-Skripte für Updates
- Für eingehende Firmware gab es keine Signaturprüfung, der tatsächliche SSH-Zugriff wurde über eine Ethernet-Verbindung bestätigt, und es war nur Pubkey-Authentifizierung erlaubt
- Unter Windows wurde durch Mitschneiden des USB-Update-Ablaufs bestätigt, dass der Wechsel in den Update-Modus und das Flashing über die einzelnen ASCII-Befehle
MundUerfolgen; danach werdenarchive.tar.gzundarchive.md5kopiert und nach einem Neustart ist die neue Firmware installiert - Unter macOS war mit Custom Firmware sogar ein echter Login möglich, indem SSH-Passwortauthentifizierung aktiviert und ein öffentlicher Schlüssel hinzugefügt wurde; warum SSH standardmäßig aktiv war und Standardschlüssel enthalten waren, blieb letztlich ungeklärt
Firmware-Update und standardmäßig aktiviertes SSH
- Beim Rodecaster Duo ließen sich die während des Firmware-Updates an das Gerät übertragenen Dateien leicht einsehen, und SSH war standardmäßig aktiviert
- Unter macOS wurde die Plattenaktivität verfolgt, um den Speicherort der Firmware zu finden; die Firmware lag als einfacher gzipped tarball vor
- Auf dem getesteten Gerät war das Schreiben auf den USB-Datenträger deaktiviert, weshalb dieses Update scheiterte
- Im Inneren des Geräts fanden sich ausführbare Binärdateien und Shell-Skripte für Updates; auf dem Datenträger gab es zwei Partitionen, damit bei einer Beschädigung von der anderen gebootet werden konnte
- Für eingehende Firmware gibt es keine Signaturprüfung
- Ein Test mit angeschlossenem Ethernet-Kabel zeigte, dass SSH tatsächlich offen war und nur Pubkey-Authentifizierung erlaubt wurde
- Es wurden zwei standardmäßig hinterlegte SSH-Schlüssel gefunden
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCX/bCFTDgViuPvdFL/VMMVRrw9b5S8HcDQk17qoCEYwmI+IIG8rEAsLiaeCOwyhf9IN+8/LRaN0Z5ZfU3WMbmsKEg8zd1Yvqq74nFbhO47vbtzmCi9S4ucIKkBEVOyvyN5lt9hWf5t5nZSmlfldZK3Pem5y8wHM5A+K/gSnzp4gwQ1QYfFb068uQ+ciIdOhb8SkUs8CwzotglIbp19I6ZmXmsNj/TmpbUf5rMfUAf1gysZ5j1UdRWrvWVh5daqvZRsBBPbXEeJfDU3Nr3HR14XYt9mgexrz/5oyKSj/lQYLmh9cDfsxvkGNIQ8fF9l+n2L1KZM4lLgiGk4KFBjQHaIBZx9OebCiiZCO4NTJUBDk9a+SZpiDiipADV07s7vTInYyFA6GrmKtnq3M6upT4WJBvVuL/BMnK5yY1RZtoqox2/pcCg2rH5S1GIy0v0HFJisl7kWInlaG2mdsaCx19wAjCFe/qT9LyxjQ6+0rArI55/JJFDkNeMjrewRQwNdASjCox8vqXCBfjvsR9qv70/ywcymgsnLAnq2LuYg5FYwMMDYOvVnhACC+BYTdNDTn5oeMIjQCUenY/DPCHpJkf4YOf3YCMUTEU9tExhtwW/X+m21hS3+STLtTfqbUeg9CeuPQZgfl9vc65n3tMxAdlEGEDoTaNMAgr2TzJv92Ka9iQ==ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDaNyzPfIcEeQsfzyQs/wyX6mX52kiS+4eNHfCaxFlgj
Update-Ablauf und Custom Firmware
- Unter Windows wurde mit Wireshark und USBPcap der Update-Traffic mitgeschnitten, um den Steuerungsablauf zu analysieren, den die RODECaster App an das Gerät sendet
- Es gab den 'M'-Befehl, der das Gerät in den Update-Modus versetzt, und den 'U'-Befehl, der das Update ausführt
- Beide Befehle wurden als einzelnes ASCII-Zeichen über HID report 1 übertragen
- Die tatsächliche Update-Struktur war einfach
- Nach dem Senden des
M-Befehls werdenarchive.tar.gzundarchive.md5auf den neu eingeblendeten Datenträger kopiert archive.md5war der md5sum-Wert des Archivs- Anschließend wird der Datenträger ausgehängt und der
U-Befehl gesendet; dann beginnt das Flashing und danach startet das Gerät mit der neuen Firmware neu
- Nach dem Senden des
- Unter macOS wurde mithilfe eines Containers eine Custom Firmware erstellt, die SSH-Passwortauthentifizierung aktiviert und den eigenen öffentlichen Schlüssel zu den authorized keys hinzufügt
- Ein minimales Funktionsbeispiel für das Flashing findet sich hier
- Nach dem Ausführen des Skripts und dem Flashing war eine SSH-Verbindung zum Gerät möglich
- Die Firmware dieses Geräts ließ sich sehr leicht flashen, und der Grund für das standardmäßig aktivierte SSH sowie die enthaltenen Standardschlüssel blieb ungeklärt
- Das Problem wurde per Ticket an RODE gemeldet, eine Antwort blieb jedoch aus
- Künftige Firmware-Updates sollen weiter beobachtet werden, um mögliche Änderungen festzustellen
1 Kommentare
Hacker-News-Kommentare
Es ist völlig in Ordnung, die Verifikation standardmäßig zu aktivieren, aber die Person, die die Hardware gekauft hat, sollte die Kontrolle als Eigentümer haben, etwa indem sie eigene Schlüssel registriert, einen Jumper umsteckt oder beim Booten einen Knopf drückt.
In der Praxis bieten das nur einige Chromebooks und Netzwerkgeräte, deshalb endet jede Diskussion über Firmware-Sicherheit immer als Streit zwischen „alles dichtmachen“ und „alles komplett offenlassen“, während die Struktur verschwindet, in der der zahlende Nutzer entscheidet.
Dass Rode per tarball + hash verteilt, ist sehr gut, und selbst wenn sie es später stärker absichern, hoffe ich, dass es weiterhin einen Weg gibt, auf meine eigene Hardware das aufzuspielen, was ich möchte.
Ich wünschte, es gäbe mehr so offene Geräte, und hoffe, dass Rode das nicht sieht und daraufhin Firmware-Upgrades sperrt.
Bitte ändert das nicht.
Es war ein Drucker von etwa 2009, und um den RAM auf 256 MB aufzurüsten, war ein Firmware-Update nötig; man musste dem Drucker nur das Tarball per FTP über das Netzwerk schicken.
Ich habe es mit FileZilla hochgeladen, ein paar Minuten gewartet, und das Update war direkt fertig; seitdem frage ich mich, warum Firmware-Updates überhaupt komplizierter sein müssen.
Aus Sicherheitsgründen kann man gern eine Checksumme prüfen, aber es wäre schön, wenn man einfach per FTP, SCP oder SFTP einen Blob hochlädt und fertig.
Man sollte erst in eine Art DFU mode wechseln müssen, sonst kann jedes beliebige Ding mit USB-Zugriff versehentlich falsche Firmware einschieben und das Gerät bricken.
Vor 10 oder 20 Jahren wäre so etwas wahrscheinlich auf einem kleinen 16- oder 32-Bit-SoC mit einem RTOS wie VxWorks implementiert worden.
Da es auch viele physische Bedienelemente gibt, wirkt der nächste logische Schritt fast wie der Umbau zur Spielkonsole.
Außerdem hat es zwei 1GbE-Ports, die jeweils mit anderen Teilen der Maschine kommunizieren.
So eine Konfiguration ist in der Pro-Audio-Welt allerdings nicht besonders ungewöhnlich; auf dem Schreibtisch zu Hause wirkt das beeindruckend, in der Branche ist es eher ziemlich normal.
Vielleicht wird die Geschichte interessanter, wenn ich später eine Root-Shell bekomme oder das Ding bricke.
Auch bei Kosten und Kompatibilität ist Linux schwer zu schlagen.
Unten drunter läuft meistens ein minimales Linux auf einem ARM-SoC, und es kommt vor, dass ein Vendor-BSP versehentlich mit aktiviertem sshd ausgeliefert wird.
Das ist weniger böse Absicht als vielmehr ein Fall, in dem sich im Audiobereich niemand wirklich verantwortlich um das rootfs kümmert.
Entscheidend ist, ob das nur im USB-seitigen Netzwerk offen ist oder auch im echten LAN.
Ersteres ist eher lästig, Letzteres wirklich besorgniserregend.
Im Vergleich dazu hat Android grundlegende Image-Typen wie eng / userdebug / user, sodass man solche Fehler schon vermeidet, wenn man nur die vorkonfigurierten Defaults richtig auswählt.
Ich konnte nicht prüfen, ob es auch auf diesem Interface offen ist, weil es sich nur für bestimmte Funktionen mit dem Wi‑Fi verbindet.
Man wirft so etwas einfach einem Agenten hin, und nach wenigen Minuten bekommt man einen Ansatz, wie man in die Firmware schaut und das Gerät modifiziert.
Noch letztes Jahr wäre das etwas gewesen, das mindestens einen Hacker auf Hotz-Niveau oder jemanden mit enorm viel Ausdauer gebraucht hätte.
Es ist zwar richtig, dass LLMs Analyse, Debugging und Umgehungen viel einfacher gemacht haben, aber dieses Gerät war so schwach geschützt, dass schon jemand mit mittleren Fähigkeiten, Motivation und etwas Zeit damit Erfolg haben konnte.
Es gab keine verschlüsselte Firmware, keine Signaturprüfung und sogar eingebauten SSH access.
Der PS3-Hypervisor, den George Hotz geknackt hat, war aus Sicht des Angreifers dagegen deutlich robuster ausgelegt, und der tatsächliche Exploit brauchte sogar Voltage Glitching mit FPGA.
Bei solchen Angriffen können LLMs zwar helfen, aber ohne vollständige Feedback-Schleife bleibt weiterhin viel Handarbeit nötig.
https://rdist.root.org/2010/01/27/how-the-ps3-hypervisor-was-hacked/
Wenn Wireshark nicht installiert ist, spart das vielleicht etwas Zeit, bringt aber auch ein gewisses Halluzinationsrisiko mit sich.
Ansonsten wurde nur in Docker
~root/.ssh/authorized_keysund/etc/shadowim Firmware-Tarball verändert, dazu ein einfaches Python-Skript verwendet, das die relevanten HID-Nachrichten sendet und das modifizierte Tarball auf ein Volume kopiert, das das Gerät wie ein USB-Laufwerk bereitstellt.Dafür braucht man also keinen verrückten Hacker, sondern nur solide Linux-Sysadmin-Grundlagen und das Niveau, ein kleines Programm mit einer USB-HID-Bibliothek zusammenzusetzen.
Kurz war ich allerdings irritiert, warum im Ubuntu-Container das Paket
whoisinstalliert wurde, aber auf Debian-artigen Systemen liegt mkpasswd aus historischen Gründen eben dort.Und wenn die
sshd_configdes Geräts unverändert auf den Defaults beruhte, war Root-Passwort-Login wegenPermitRootLoginwomöglich ohnehin von vornherein nicht möglich.https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=116260
Ich habe ein Credo 50 als IQ250 ausgegeben; intern sind sie praktisch identisch.
Sich tief einzuarbeiten macht Spaß, aber je älter man wird, desto schwerer wird es, 16 Stunden am Stück an irgendeinem zufälligen Firmware-Blob zu sitzen.
Außerdem braucht es keine besonderen Fähigkeiten, um mit einem Gerät umzugehen, auf dem SSH offen ist.
Vor allem den Teil, in dem er mit seiner Freundin im selben Raum spielt und Discord nutzt, während beide ihre Mikrofone jeweils an den eigenen Computer anschließen wollen, aber ohne Echo.
Ihr könnt beide demselben Discord-Call beitreten, dabei beide Mikrofone zu einem Eingang auf einem Rechner zusammenmischen und auf dem anderen Rechner das Mikro stummschalten, sodass dort im Client nur Audio empfangen wird.
Weil das Mixing lokal passiert, entsteht kein Echo.
Es ist so einfach, dass ich fast sagen würde: Schreib mir eine Mail, wenn du mehr Details willst.
Die Latenz liegt bei ungefähr 40 ms, über Wi‑Fi eher bei 50–60 ms.
Man könnte den Mixer auf einem PC laufen lassen und dort das lokale Mikro als einen Eingangskanal nutzen, während der andere PC sein Mikro streamt und damit Kanal 2 des Mixers speist; so ließe sich das Problem ähnlich lösen.
Auf dem lokalen PC kann auch Musik laufen, und der Mixer oder Broadcaster kann einen lokalen Sink erzeugen.
Am Ende mischt man alles im Mixer zusammen, schickt den Main-Out an Discord und gibt die Monitor-Linie nach der Discord-Audio-Ausgabe wieder an den anderen PC weiter, damit man in Echtzeit mithören kann.
Natürlich kann es sein, dass ich die Situation falsch verstanden habe.
Ich kenne mich mit Zola nicht aus, aber egal ob das ein gängiges Template oder etwas Eigenes ist, es sieht wirklich gut aus.
Deshalb erzwingen sie vermutlich signierte Images und Ähnliches.
Bei so einem Interface hätte ich eher gedacht, dass man es absichtlich offenlassen möchte.
Dort spricht man ja fast Englisch, also sollte die Verständigung klappen.