docs/content/hardware/xiaomi-mi-4a.md

4.6 KiB

title date
Xiaomi Mi Router 4A 2022-12-01T17:25:00+01:00

{{< hint danger >}} 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. {{< /hint >}}

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

{{< hint warning >}} 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. {{< /hint >}} {{< details "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 {{< /details >}}

  • 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