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.

Geräte, die ab September 2021 gefertigt wurden, sind mit einem anderen SPI Flash ausgestattet. Diese werden erst ab Firmwareversion 20221201 unterstützt. Ältere Firmwares führen zu einer Bootloop und dürfen daher nicht installiert werden.

Geräte mit Stock-Firmware 2.30.20 sind eine neue Hardware-Revision (“v2”, “Xiaomi Router AC1200”). Diese lassen sich aktuell nicht mit OpenWrt / Freifunk betreiben.

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

OpenWrt flashen #

  • Mit telnet auf dem Router einloggen (User: root, Passwort: root):
    telnet 192.168.31.1
    
  • OpenWrt sysupgrade Image nach /tmp/firmware.bin kopieren
    cd /tmp
    wget -O firmware.bin <firmware-url>
    
  • Prüfsumme berechnen:
    ./busybox sha256sum firmware.bin
    
  • Installieren:
    mtd -e OS1 -r write firmware.bin OS1
    

Theoretisch kann hier auch direkt die Freifunk Firmware heruntergeladen und geflasht werden.

Freifunk Firmware flashen #

  • Über LAN-Port in OpenWrt einloggen
    • IP: 192.168.1.1
    • User: root
  • Freifunk Firmware flashen
    • per Web-UI:
      • System → Backup / Flash Firmware → “Flash new firmware image”
      • Wichtig: “Keep settings” abwählen!
    • per SSH:
      scp -O ~/Downloads/fff-firmware.bin root@192.168.1.1:/tmp/
      
      ssh root@192.168.1.1
      # Wichtig: -n nicht vergessen!
      sysupgrade -n /tmp/fff-firmware.bin
      

Ports für Layer3 Konfiguration #

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