Xiaomi Mi Router 4A

Xiaomi Mi Router 4A

Achtung!

Es sind verschiedene Versionen des ‘‘‘Xiaomi Mi 4A Gigabit’’’ im Umlauf, von denen sich aktuell einige nicht mit OpenWrt / Freifunk betreiben lassen.

Weitere Infos im Abschnitt Hardware-Revisionen unterscheiden.

Hardware-Revisionen unterscheiden #

Es gibt mehrere Hardware-Revisionen des Xiaomi Mi 4A Gigabit:

Gerät aktuell unterstützt
Xiaomi Mi 4A Gigabit v1 (GigaDevice SPI-Flash)
Xiaomi Mi 4A Gigabit v1 (cFeon SPI-Flash)
Xiaomi Mi 4A Gigabit v2

Die Revision des Board-Layouts lässt sich nach Ausnutzen des Exploits über den Befehl ls /etc/Wireless feststellen.

  • v1: mt7603e mt7612
  • v2: mt7603e mt7663
root@XiaoQiang:~# ls /etc/Wireless
mt7603e  mt7612

Ab Firmwareversion 20221201 werden beide Varianten des v1-Layouts vom selben Image unterstützt und müssen nicht unterschieden werden. Das v2-Layout wird aktuell nicht unterstützt. Solltest du ein Gerät mit v2-Layout erhalten haben, nimm bitte Kontakt mit den Firmware-Entwicklern oder der Community auf.

Installation #

Zum Überschreiben der Herstellerfirmware ist ein Exploit des Web-UI nötig: https://github.com/acecilia/OpenWRTInvasion

Videozusammenfassung des Exploits: https://www.youtube.com/watch?v=VxzEvdDWU_s
Die Videoanleitung sollte nur als zusätzliche Hilfestellung, nicht aber als Referenz genutzt werden!

Router vorbereiten #

Achtung!

Für den Mi Router 4A 100m (nicht Gigabit) ist eine ältere Herstellerfirmware nötig, da OpenWrt nicht mit dem Partitionslayout der neueren kompatibel ist.

Herstellerfirmware downgraden
  • Ältere Herstellerfirmware herunterladen: bigota.miwifi.com
  • Mit gedrückter Reset-Taste Strom verbinden und warten bis die LED orange blinkt
  • DHCP Server bereitstellen, mit einem der beiden LAN-Port verbinden
  • Auf dem Default-Gateway einen TFTP Server starten, Firmware als test.bin ablegen
  • Beispiel für TFTP unter Linux:
    sudo dnsmasq --no-daemon --bind-interfaces -p0 --dhcp-authoritative --dhcp-range=192.168.1.100,192.168.1.200 --log-dhcp --enable-tftp --tftp-root=$(pwd) --listen-address 192.168.1.1
    
  • Warten, bis die blaue LED schnell blinkt
  • Strom trennen und erneut verbinden

  • Router mit dem Internet verbinden (wichtig, da beim Installationsvorgang zusätzliche Daten vom Router aus dem Internet geladen werden müssen!)
    • entweder über den WAN-Port
    • oder per WiFi Client (Modus “WiFi Access Point”, hier ändert sich allerdings die IP Adresse des Web-UI!)
  • PC mit einem der beiden LAN-Ports verbinden, IPv4 Adresse per DHCP beziehen
  • Mit 192.168.31.1 verbinden und Setup-Assistenten durchlaufen
  • Stok auslesen: Im Web UI einloggen. Die URL in der Adresszeile beinhaltet etwas wie stok#3700b146c87e45fea51170f87f47d34c

Exploit ausnutzen #

Hierfür kann auch der Anleitung des OpenWRTInvasion Exploits gefolgt werden.

Für Windows gibt es eine Dockervariante, die in der oben verlinkten Anleitung beschrieben wird. (nicht getestet)

  • Git Repository klonen:
    git clone https://github.com/acecilia/OpenWRTInvasion.git
    
  • python3-pip installieren
  • Im geklonten Repository ./remote_command_execution_vulnerability.py ausführen:
    cd OpenWRTInvasion
    ./remote_command_execution_vulnerability.py
    
  • IP Adresse des Routers und stok (nur den Teil nach stok#) eingeben

Firmware flashen #

  • Mit telnet auf dem Router einloggen (User: root, Passwort: root):
    telnet 192.168.31.1
    
  • Ein OpenWrt oder Freifunk sysupgrade Image nach /tmp/firmware.bin kopieren
    • openwrt-[version]-ramips-mt7621-xiaomi_mi-router-4a-gigabit-squashfs-sysupgrade.bin
    • fff-[variant]-[version]-xiaomi_mi-router-4a-gigabit-sysupgrade.bin
    cd /tmp
    wget -O firmware.bin <firmware-url>
    
  • Prüfsumme berechnen:
    ./busybox sha256sum firmware.bin
    
  • Installieren:
    mtd -e OS1 -r write firmware.bin OS1
    

Ports für Layer3 Konfiguration #

  • wan:* bzw. wan:t
  • lan1:* bzw. lan1:t
  • lan2:* bzw. lan2:t