Kwetsbaarheid in de Bootloader van OnePlus 3/3T maakt het mogelijk om SELinux naar de permissieve modus te wijzigen in Fastboot

Een ernstige kwetsbaarheid in de OnePlus 3/3T-bootloader zorgt ervoor dat aanvallers de SELinux-status kunnen omschakelen van Afdwingen naar Permissief! Lees verder om meer te weten!

De OnePlus 3 en de OnePlus 3T behoren tot de beste telefoons die je nu kunt kopen. Hoewel de aankomende vlaggenschepen van 2017 nog aan consumenten moeten worden onthuld, zijn de OnePlus 3/3T domineert de prestaties in de echte wereld tegen een betaalbare prijs.

Maar als we eerlijk willen zijn bij het beoordelen van het apparaat, we moeten erkennen dat, ondanks de inspanningen van OnePlus, de OnePlus 3/3T niet zonder fouten is. We hebben bijvoorbeeld eerder gerapporteerd over beveiligingsproblemen zoals OnePlus lekt IMEI-gegevens via het netwerk wanneer u controleert op updates op uw telefoon. En nu hebben we nog een beveiligingsprobleem om aan de lijst toe te voegen, dit met potentieel gevaarlijkere gevolgen.

Een kwetsbaarheid in de bootloader van de OnePlus 3/3T opent deuren voor kwaadaardige aanvallen. Zoals gevonden door Roee Hay van het IBM X-Force Application Security Research Team en 

onthuld op het IBM X-Force Exchange-platform, stelt deze kwetsbaarheid een aanvaller in staat de SELinux-status op de apparaten te manipuleren, waardoor deze naar de permissieve modus wordt geschakeld. Het enige wat de aanvaller nodig heeft is ofwel fysieke toegang naar het apparaat, of toegang op afstand tot een ADB-verbinding naar het apparaat.

SELinux, of Security-Enhanced Linux, is een Linux-kernelbeveiligingsmodule die toegang tot en beheer van beveiligingsbeleid mogelijk maakt. SELinux werd geïntroduceerd in Android vanaf Android 4.3 en was ingesteld op Handhaving standaardmodus sinds Android 4.4. Dit verplichte toegangscontrolesysteem helpt bij het afdwingen van de bestaande toegangscontrolerechten en probeert escalatieaanvallen op privileges te voorkomen. Dit fungeert als een hindernis voor ongeautoriseerde controle over uw apparaat, zoals een app of kwetsbaarheid die erop gericht is om kwaadwillig root-toegang te verkrijgen. SELinux instellen op Handhaving standaard op Android dient als de eerste stap om normale gebruikers tegen dergelijke aanvallen te beschermen.

De kwetsbaarheid is vrij eenvoudig te misbruiken - in feite lijkt het eerder een grote vergissing van de kant van OnePlus te zijn dan hoe je je zou voorstellen dat een typische exploit eruit zou zien. Eerst start een aanvaller de OnePlus 3/3T opnieuw op in de 'fastboot'-modus. Als je fysieke toegang hebt, druk je tijdens het opstarten eenvoudigweg op de knop Volume omhoog, maar als je dat niet hebt, kun je de ADB-opdracht geven adb reboot bootloader naar het apparaat. De fastboot-modus op het apparaat maakt gebruik van een USB-interface, waardoor geen enkele beveiligingsgevoelige opdracht kan worden uitgevoerd op vergrendelde apparaten. Maar op de OnePlus 3/3T hoeft u alleen maar de fastboot oem selinux permissive commando via de fastboot interface schakelt de SELinux modus uit Handhaving naar Toegeeflijk.

fastboot oem selinux permissive
...
OKAY[ 0.045s]
finished. totaltime: 0.047s

...

OnePlus3:/ $ getenforce
Permissive
OnePlus3:/ $

Om het probleem nog ingewikkelder te maken, hebben de OnePlus 3 en 3T geen enkele vermelding in het 'Over scherm' om de huidige SELinux-status van het apparaat te vermelden. Een slachtoffer zal zich niet bewust blijven van de gecompromitteerde status van zijn apparaat als hij er niet getuige van is dat de exploit actief wordt gebruikt. Het ontbreken van een SELinux-statusvermelding in het 'Over-scherm' ontbreekt in zowel de op Android 6.0 gebaseerde Open Beta-releases als in de officiële ROM's van Android 7.0.

Er bestaan ​​verschillende apps om de SELinux-status naar Toegeeflijk te zetten, zoals de SELinuxModeChanger sollicitatie. Het omschakelen van SELinux via deze methode staat niet toe dat de status blijft bestaan ​​tijdens een herstart. Hoewel, dat kan wel gebruik maken van scripts om de te behouden Toegeeflijk SELinux-status bij harde herstarts. Beide methoden vereisen root-toegang, wat inhoudt dat de gebruiker al op de hoogte is van de risico's waaraan hij wordt blootgesteld. Maar het grote verschil met het veranderen van de SELinux-modus naar Toegeeflijk Het gebruik van bovenstaande kwetsbaarheid is dat het niet alleen is blijft bestaan ​​bij harde reboots, dat doet het zonder root-toegang nodig te hebben.

Er bestaan ​​tot op heden geen remedies tegen de kwetsbaarheid.


UPDATE:

Wij hebben contact opgenomen Sultanxda, een van de meest erkende custom ROM-ontwikkelaars voor OnePlus-apparaten, om te zien of hij ons kon helpen meer over dit probleem te weten te komen. Hij dook prompt in de code om de rootbron te vinden, dit is wat hij vond:

De manier waarop de "fastboot oem selinux " commando werkt is dat het een extra argument toevoegt aan de kernelopdrachtregel bij het opstarten van Linux. Het extra argument komt in de vorm van "androidboot.selinux=", waar kan ‘toegeeflijk’ zijn. Er is waar het grappig wordt: "androidboot."argumenten op de kernelopdrachtregel worden geparseerd door Android's init. In een normale Android-productiebuild (een 'user'-build) wordt het argument 'androidboot.selinux' volledig genegeerd en wordt selinux altijd gedwongen om af te dwingen. Deze bug bestaat dus uit twee problemen:

  1. Gebruikers kunnen de bootloader een vlag laten doorgeven die normaal gesproken selinux tolerant zou maken voor een engineering/debugging ROM-build
  2. OnePlus heeft de init van Android aangepast om de vlag "androidboot.selinux" te respecteren, zelfs voor productie-ROM-builds

Hier is de init van Android geconfigureerd om de vlag "androidboot.selinux" te negeren voor productiebuilds: https://android.googlesource.com/platform/system/core/+/android-6.0.0_r41/init/Android.mk#7

De vlag ALLOW_DISABLE_SELINUX in de broncode is alleen ingesteld op 1 voor userdebug- en technische builds

(Mijn ROM heeft hier geen last van omdat ik mijn ROM in productiemodus (gebruikersmodus) bouw)

Dus "androidboot.selinux" wordt eenvoudigweg genegeerd in mijn ROM, de "fastboot oem selinux " Het lijkt er ook op dat OnePlus iets heeft gemaakt, aangezien zo'n commando niet bestaat in de openbare bootloader-bronnen van CAF. Uit mijn hoofd kan ik 4 manieren bedenken om dit op te lossen voor gebruikers met ontgrendelde bootloaders:

  1. Hex-edit de bootloader om alle instanties van de string "selinux" te veranderen in iets anders (zoals "sclinux") zodat de vlag niet wordt herkend door de init van Android
  2. Hex-bewerk het Android init binaire bestand in OxygenOS om alle exemplaren van "androidboot.selinux" te vervangen door iets anders (zoals "androidboot.sclinux") zodat Android init het androidboot.selinux-vlag
  3. Voeg een hack toe aan het commandoregelstuurprogramma van de kernel, vergelijkbaar met mijn SafetyNet-bypass, om de vlag "androidboot.selinux" te verbergen voor de init van Android

We willen Sultanxda bedanken voor zijn tijd en moeite om ons te helpen uitzoeken wat er achter de schermen gebeurt. We hebben ook contact opgenomen met OnePlus, die op de hoogte is van de situatie en de zaak onderzoekt.


We hopen dat OnePlus het ernstige probleem publiekelijk erkent en transparant is in hun plannen om het probleem op te lossen.