SCP/TFTP Downgrade bei Unifi AC ab Firmware 4.3.x geht nicht mehr?

Das ist wenig Zielführend, dashat Ubiquiti (wenn auch extrem billig) mit voller Absicht eingebaut. Neuere Modelle haben auch Signatur-verifikation im Bootprozess aktiv, welchen UBNT selbstverständlich aber auch nur halbherzig implementiert hat und deswegen (bisher) kein großes Hindernis darstellt.

Wer sich dafür interessiert, das habe ich damals hier Zusammengeschrieben: ramips: add support for Ubiquiti UniFi 6 Lite · openwrt/openwrt@fb4d7a9 · GitHub

Dieses mal haben sie ihren eigenen Write-Protext gebaut. Am Kernel image hängt ein DTB, welches den write-protect status der partitionen angibt:

/dts-v1/;

/ {

	ubnthal {

		write-protect {
			compatible = "ubnthal,write-protect";
			default-write-policy = "ro";

			explicit-write-policy {

				mtd {

					partition@0 {
						label = "u-boot-env";
						write-policy = "rw";
					};

					partition@1 {
						label = "bs";
						write-policy = "rw";
					};

					partition@2 {
						label = "cfg";
						write-policy = "rw";
					};
				};
			};
		};
	};
};

Das Kernel-Modul ubnthal.ko parsed dieses und flagged die MTD partitionen entsprechend als read-only.

Das Kernel Modul stellt im procfs ein file bereit, welches mit der richtigen magic beschrieben alle partitionen unprotected. Hierüber bedient auch das ubntbox binary und damit fwupdate.real den write-protect status der partitionen. Das magic ist allerdings statisch, Ubiquiti war aber der Meinung das ganze ist effektiver, wenn man dieses File ausblendet :roll_eyes: .

Beschreibt man das File mit dem korrekten Wert öffnet sich auf magische Art und Weise der Write-Protect von kernel0 und kernel1 und wir können OpenWrt / Gluon wie bisher installieren.

UAP-AC-Lite-BZ.6.2.35# cat /proc/mtd 
dev:    size   erasesize  name
mtd0: 00060000 00010000 "u-boot"
mtd1: 00010000 00010000 "u-boot-env"
mtd2: 00790000 00010000 "kernel0"
mtd3: 00790000 00010000 "kernel1"
mtd4: 00020000 00010000 "bs"
mtd5: 00040000 00010000 "cfg"
mtd6: 00010000 00010000 "EEPROM"
UAP-AC-Lite-BZ.6.2.35# cat /sys/class/mtd/mtd2/flags 
0x800
UAP-AC-Lite-BZ.6.2.35# cat /sys/class/mtd/mtd3/flags 
0x800
UAP-AC-Lite-BZ.6.2.35# echo "5edfacbf" > /proc/ubnthal/.uf
UAP-AC-Lite-BZ.6.2.35# cat /sys/class/mtd/mtd2/flags 
0xc00
UAP-AC-Lite-BZ.6.2.35# cat /sys/class/mtd/mtd3/flags 
0xc00
UAP-AC-Lite-BZ.6.2.35# dd if=/
UAP-AC-Lite-BZ.6.2.35# mv /tmp/gluon-ffda-2.6.0-ubiquiti-unifi-ac-lite-sysupgrad
e.bin /tmp/firmware.bin
UAP-AC-Lite-BZ.6.2.35# dd if=/tmp/firmware.bin of=/dev/mtdblock2

11777+1 records in
11777+1 records out
UAP-AC-Lite-BZ.6.2.35# 
UAP-AC-Lite-BZ.6.2.35# dd if=/tmp/firmware.bin of=/dev/mtdblock3

11777+1 records in
11777+1 records out
UAP-AC-Lite-BZ.6.2.35# 
UAP-AC-Lite-BZ.6.2.35# dd if=/dev/zero bs=1 count=1 of=/dev/mtd4
1+0 records in
1+0 records out
UAP-AC-Lite-BZ.6.2.35# reboot

Ich bin mir nicht sicher, was Ubiquiti mit diesem Versteckspiel bezwecken möchte. Wenn es das ist was ich glaube, so hat der Abend mein Vertrauen in deren Softwareerzeugnisse einmal mehr deutlich herabgestuft. Aber hey, gut für uns.

5 „Gefällt mir“