[Update: Zweite Sicherheitslücke behoben] Zwei kritische Sicherheitslücken im OnePlus 3/3T-Bootloader entdeckt, eine davon gepatcht und die andere behoben

Für OnePlus 3 und OnePlus 3T wurden zwei Fehler im Zusammenhang mit dem Bootloader entdeckt. Eines wurde gepatcht, das andere wird behoben.

Seit der Veröffentlichung dieses Artikels hat Oxygen OS Version 4.0.3 die zweite in diesem Artikel besprochene Sicherheitslücke geschlossen, nämlich die dm-verity-Sicherheitslücke.

Bevor Sie in die wunderbare Welt des Android-Rootings, benutzerdefinierter ROMs, Kernels und anderer Modifikationen eintauchen, müssen Sie zunächst den Bootloader auf Ihrem Gerät entsperren.

Auf manchen Geräten (insbesondere solchen von Mobilfunkanbietern) stellt dies ein Problem dar, da Benutzer erhebliche technische Hürden überwinden müssen, bevor sie den Bootloader entsperren können. Bei anderen Geräten wie Huawei-Telefonen müssen Sie beim OEM einen eindeutigen Bootloader-Entsperrcode beantragen – eine geringfügige Eintrittsbarriere, aber nicht sehr schwierig. Noch besser sind die Google Nexus/Pixel-Serie oder OnePlus-Telefone, bei denen Sie nur eine Option in den Entwicklereinstellungen ankreuzen und dann einige senden müssen Fastboot Befehle.

Aber egal wie schwierig es auch sein mag, Ihren Bootloader zu entsperren, eines wird immer gleich bleiben: die Anforderung, das Gerät beim Entsperren zu löschen. Dies geschieht aus offensichtlichen Sicherheitsgründen, da Ihre gesamte Datenpartition einfach extrahiert werden kann, sobald der Bootloader entsperrt ist. Eine böswillige Entität (mit technischem Know-how) könnte eine benutzerdefinierte Wiederherstellung per Flash-Boot starten und ein vollständiges Backup Ihres Geräts extrahieren, wenn sie Zugriff auf Ihre Daten erhält. Aus diesem Grund wird das Entsperren Ihres Bootloaders als Sicherheitsrisiko angesehen und Ihr Gerät wird nach dem Entsperren gelöscht. Unter der Annahme, dass alles so läuft, wie es sollte, sollte ein normaler Benutzer davor geschützt sein, dass Angreifer den Bootloader entsperren, um die standardmäßigen Android-Sperrmethoden zu umgehen. Allerdings läuft nicht alles nach Plan.


OnePlus 3/3T Bootloader entsperrt Sicherheitslücke

Es gab eine neue Reihe von Sicherheitslücken gerade bekanntgegeben von Roee Hay (@roeehay), die erste davon ermöglicht das Entsperren des Bootloaders des OnePlus 3/3T ohne Benutzerbestätigung und ohne Auslösen eines Werksresets. Diese Schwachstelle ist beschriftet CVE-2017-5625gilt als Sicherheitslücke mit kritischem Schweregrad und betrifft alle OnePlus 3/3T-Geräte, die unter OxygenOS 3.2-4.0.1 ausgeführt werden. Benutzer, die bereits ein Upgrade auf durchgeführt haben inkrementelles OxygenOS 4.0.2 aktualisieren sind nicht betroffen durch diese Sicherheitslücke, da Herr Hay diesen Fehler privat gegenüber OnePlus offengelegt hat am 23. Januar sodass sie das Problem sofort beheben konnten.

Der Fehler funktioniert durch das Senden eines proprietären, versteckten Fastboot-Befehls: fastboot oem 4F500301. Durch das Senden dieses Befehls wird der Bootloader-Sperrstatus des Benutzers umgangen (auch wenn „OEM-Entsperrung zulassen“ in den Entwicklereinstellungen nicht aktiviert wurde). Das Gerät fordert den Benutzer weder auf, noch löscht es das Gerät, wie es sein sollte – tatsächlich meldet das Gerät immer noch, dass der Bootloader gesperrt ist! Ein weiterer Fastboot-Befehl, fastboot oem 4F500302, setzt einige Bootloader-Einstellungen zurück und kann zum Sperren eines bereits entsperrten Geräts verwendet werden.

Herr Hay entdeckte, dass der erste Fastboot-Befehl das setzt, was er als „magicFlag„, das die Prüfung außer Kraft setzt, die den Sperrstatus des Bootloaders bestimmt, wenn ein Flash- oder Löschbefehl ausgeführt wird.

// 'oem 4F500301' handler
intsub_918427F0()
{
magicFlag_dword_91989C10 = 1;
if ( dword_9198D804 != dword_9198D804 )
assert(1, dword_9198D804, dword_9198D804);
return sendOK((int)"", dword_9198D804);
}

Fastboot-Flash-Handler


// 'flash' handler
constchar *__fastcall sub_91847EEC(char *partitionName, int *a2, int a3)
{
char *pname; // r5@1
...
pname = partitionName;
v4 = a2;
v5 = a3;
if ( returnTRUE1(partitionName, (int)a2) )
{
result = (constchar *)sub_918428F0(pname, v6);
if ( (result || magicFlag_dword_91989C10)
&& ((result = (constchar *)sub_91842880(pname, v10)) != 0 || magicFlag_dword_91989C10) )
{
result = (constchar *)sub_918428F0(pname, v10);
if ( !result || magicFlag_dword_91989C10 )
goto LABEL_7;
v8 = dword_9198D804;
if ( dword_9198D804 != dword_9198D804 )
goto LABEL_28;
v11 = "Critical partition flashing is not allowed";
}
else
{
v8 = dword_9198D804;
if ( dword_9198D804 != dword_9198D804 )
goto LABEL_28;
v11 = "Partition flashing is not allowed";
}
return (constchar *)FAIL2((int)v11, v10);
}
LABEL_7:
...
if ( *v4 != 0xED26FF3A )
{
if ( *v4 == 0xCE1AD63C )
cmd_flash_meta_img(pname, (unsigned int)v4, v5);
else
cmd_flash_mmc_img(pname, (int)v4, v5);
goto LABEL_10;
}
v7 = v4;
}
cmd_flash_mmc_sparse_img(pname, (int)v7, v5);
...
 }

mehr lesen

Fastboot-Erase-Handler


// 'erase' handler
int __fastcall sub_91847118(char *partitionName, int a2, int a3)
{
 ...
v3 = partitionName;
v4 = returnTRUE1(partitionName, a2);
if ( !v4 )
{
LABEL_7:
...
if ( v4 )
{
if ( dword_9198D804 == dword_9198D804 )
return eraseParition(v3);
}
...
}
v4 = sub_918428F0(v3, v5);
if ( !v4 && !magicFlag_dword_91989C10 )
{
v6 = dword_9198D804;
if ( dword_9198D804 == dword_9198D804 )
{
v7 = "Partition erase is not allowed";
return FAIL2((int)v7, v5);
}
goto LABEL_23;
}
v4 = sub_91842880(v3, v5);
if ( !v4 && !magicFlag_dword_91989C10 )
{
v6 = dword_9198D804;
if ( dword_9198D804 == dword_9198D804 )
{
v7 = "Partition flashing is not allowed";
return FAIL2((int)v7, v5);
}
LABEL_23:
assert(v4, v5, v6);
}
v4 = sub_918428F0(v3, v5);
if ( !v4 || magicFlag_dword_91989C10 )
goto LABEL_7;
v6 = dword_9198D804;
...
v7 = "Critical partition erase is not allowed";
return FAIL2((int)v7, v5);
}

mehr lesen

CVE-2017-5626 kann verwendet werden Kernelcode ausführen. Ein Angreifer kann jedes gewünschte Boot-Image flashen. Wenn sie jedoch ein geändertes Boot-Image flashen, tritt Verified Boot in Kraft und warnt den Benutzer, dass eine Änderung erkannt wurde. Eine Möglichkeit, dies zu umgehen, besteht darin, ein älteres, unverändertes Boot-Image zu flashen – eines, das ältere Exploits enthält, die inzwischen gepatcht wurden. Trotzdem hält die „Warnung“, die Sie erhalten, nur 5 Sekunden lang an, schließt sich automatisch ab und startet im verifizierten Startzustand, in dem der Code des Angreifers weiterhin ausgeführt wird.

Herr Hay erwähnt, dass es unzählige Möglichkeiten gibt, diesen Fehler auf böswillige Weise auszunutzen. Beispielsweise hat er ein Boot-Image geändert, um den SELinux-Modus festzulegen freizügig Außerdem wird der ADB-Zugriff beim Booten automatisch eingebunden. Nachdem er diese Sicherheitslücke ausgenutzt hatte, um sein modifiziertes Boot-Image zu flashen, konnte er auf a zugreifen Root-Shell, bevor der Benutzer überhaupt seine Anmeldeinformationen eingeben kann.

OnePlus3:/ # id
uid=0(root) gid=0(root) groups=0(root),1004(input),1007(log),1011(adb),
1015(sdcard_rw),1028(sdcard_r),3001(net_bt_admin),3002(net_bt),
3003(inet),3006(net_bw_stats),3009(readproc) context=u: r: su: s0

OnePlus3:/ # getenforce
Permissive

Das ist natürlich ziemlich ernst. Ein gestohlenes oder manipuliertes Gerät, das Sie aufgrund Ihrer üblichen Sicherheitsmaßnahmen für sicher halten, kann mit diesem Exploit vollständig ausgeschaltet werden.


OnePlus 3/3T SELinux-Sicherheitslücke

Die zweite Schwachstelle mit der Bezeichnung CVE-2017-5624, beeinflusst alle Versionen von OxygenOS und erlaubt es einem dm-verity deaktivieren. Herr Hay hat diese Schwachstelle dem OnePlus-Sicherheitsteam am gemeldet 16. Januar, aber es sollte beachtet werden, dass XDA Senior Member th3g1zhat diese Sicherheitslücke unabhängig voneinander entdeckt An 23. Januar. Wir haben mit OnePlus gesprochen, die das getan haben bestätigte, dass sie diese zweite Sicherheitslücke erkannt haben und beheben werden in einem zukünftigen Update.

Dieser Angriff ist auch ziemlich einfach durchzuführen. Man muss nur einen einzigen Fastboot-Befehl ausgeben, um dm-verity zu deaktivieren (oder zu aktivieren): fastboot oem disable dm-verity. Um es zu aktivieren, geben Sie es einfach aus fastboot oem enable dm-verity. Der Handler für diesen Befehl, der einem Dump des Bootloaders entnommen wurde, ist unten dargestellt.


// 'oem disable_dm_verity' handler
intsub_9183B8EC()
{
int v0; // r0@1
int v1; // r1@1

dmVerity_dword_91960740 = 0;
v0 = sub_91845E10("ANDROID-BOOT!");
if ( dword_9198D804 != dword_9198D804 )
assert(v0, v1, dword_9198D804);
return sendOK((int)"", v1);
}

Durch die Ausgabe dieses Befehls wird ein Flag gesetzt, das Herr Hay dmVerity nennt und das vom Bootloader verwendet wird, um ein Kernel-Befehlszeilenargument zu senden, das dm-verity aktivieren oder deaktivieren kann.

Dies kann in Kombination mit der ersten Schwachstelle genutzt werden, um hochprivilegierten Code auf dem OnePlus 3/3T ohne Zustimmung des Benutzers auszuführen – und mit Zugriff auf die Daten des Benutzers. Beispielsweise konnte Herr Hay eine Anwendung unter /system/priv-app installieren, was dazu führte, dass die Anwendung zur priv-app-Domäne hinzugefügt wurde. Dies ermöglicht einer böswilligen Anwendung den Zugriff auf hochprivilegierte Funktionen auf dem Gerät. Herr Hay demonstriert im Video unten, wie beide Schwachstellen gleichzeitig ausgenutzt werden. Wie Sie sehen können, wird beim Booten des Geräts angezeigt, dass die von ihm erstellte Anwendung bereits vorinstalliert ist.


Fazit & Hinweis von OnePlus

Der potenzielle Missbrauch dieser beiden Sicherheitslücken ist erschreckend. Wir loben Herrn Hay dafür, dass er diese Schwachstellen vertraulich und so schnell gegenüber OnePlus offengelegt hat. Dennoch sind wir beunruhigt darüber, dass solche Fastboot-Befehle auf diesen Geräten verfügbar sind. Als wir eine Anleitung dazu geschrieben haben Entdecken Sie versteckte Fastboot-BefehleUnser Ziel war es, Benutzer darüber zu informieren, dass es möglicherweise einige interessante Befehle gibt, mit denen sie ihr Erlebnis verbessern können. Wir hätten nie gedacht, dass derart hochprivilegierte Befehle im Bootloader-Code enthalten sein würden. Wie für "Warum" Diese Fastboot-Befehle sind in der Firmware enthalten, die wir erhalten haben "kein Kommentar." 

Wenn Sie Ihr OnePlus 3/3T noch nicht aktualisiert haben, sobald jeder Oxygen OS-Build veröffentlicht wurde, empfehlen wir Ihnen dies sofort aktualisieren. Das Update auf Oxygen OS 4.0.2 schützt Sie vor der ersten Schwachstelle, aber wir müssen bis OnePlus warten führt ein Update ein, das die zweite Schwachstelle behebt, bevor wir sagen können, dass Sie vor diesen völlig sicher sind Heldentaten. Wir müssen in Zukunft nach solchen Exploits Ausschau halten.


Quelle: Roee Hay