Vulnerabilitatea bootloader-ului OnePlus 3/3T permite schimbarea SELinux în modul permisiv în Fastboot

click fraud protection

O vulnerabilitate gravă în bootloader-ul OnePlus 3/3T permite atacatorilor să comute starea SELinux de la Enforcing la Permisive! Citiți mai departe pentru a afla mai multe!

The OnePlus 3 si OnePlus 3T sunt printre cele mai bune telefoane pe care le puteți cumpăra chiar acum. În timp ce viitoarele produse emblematice din 2017 încă nu au fost dezvăluite consumatorilor, în absența acestora, OnePlus 3/3T domină performanța în lumea reală la un pret accesibil.

Dar, dacă vrem să fim corecți în evaluarea dispozitivului, trebuie să recunoaștem că, în ciuda eforturilor OnePlus, OnePlus 3/3T nu este lipsit de defecte. De exemplu, am raportat anterior probleme de securitate, cum ar fi OnePlus scurge detalii IMEI prin rețea când verificați actualizările pe telefon. Și acum, avem o altă problemă de securitate de adăugat la listă, aceasta cu ramificații potențial mai periculoase.

O vulnerabilitate în bootloader-ul OnePlus 3/3T deschide porți atacurilor rău intenționate. După cum a descoperit Roee Hay de la IBM X-Force Application Security Research Team și 

dezvăluit pe platforma IBM X-Force Exchange, această vulnerabilitate permite unui atacator să manipuleze starea SELinux pe dispozitive, comutând astfel în modul permisiv. Tot ce are nevoie atacatorul este fie acces fizic la dispozitiv sau acces de la distanță la o conexiune ADB la dispozitiv.

SELinux, sau Security-Enhanced Linux, este un modul de securitate a nucleului Linux care permite accesul și gestionarea politicilor de securitate. SELinux a fost introdus în Android începând cu Android 4.3 și a fost setat la Implementarea modul implicit de la Android 4.4. Acest sistem obligatoriu de control al accesului ajută la aplicarea drepturilor existente de control al accesului și încearcă să prevină atacurile de escaladare a privilegiilor. Acest lucru acționează ca un obstacol pentru controlul neautorizat asupra dispozitivului dvs., cum ar fi o aplicație sau o vulnerabilitate care are ca scop obținerea accesului root în mod rău intenționat. Setarea SELinux la Implementarea implicit pe Android servește ca prim pas pentru a proteja utilizatorii normali de astfel de atacuri.

Vulnerabilitatea este destul de simplu de exploatat - de fapt, pare a fi o neglijare uriașă din partea OnePlus, mai degrabă decât cum ți-ai imagina că ar arăta exploitul tău tipic. În primul rând, un atacator repornește OnePlus 3/3T în modul „fastboot” - dacă aveți acces fizic, pur și simplu apăsați butonul de creștere a volumului în timpul pornirii, dar dacă nu o faceți, puteți lansa comanda ADB adb reboot bootloader la dispozitiv. Modul de pornire rapidă de pe dispozitiv expune o interfață USB, care nu ar trebui să permită finalizarea vreunei comenzi sensibile la securitate pe dispozitivele blocate. Dar pe OnePlus 3/3T, pur și simplu emitând fastboot oem selinux permissive comanda prin interfața fastboot comută între modul SELinux Implementarea la Permisiv.

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

...

OnePlus3:/ $ getenforce
Permissive
OnePlus3:/ $

Pentru a complica și mai mult problema, OnePlus 3 și 3T nu au nicio intrare în „Despre ecran” pentru a menționa starea curentă SELinux a dispozitivului. O victimă va continua să nu țină seama de starea compromisă a dispozitivului său dacă nu a fost martoră la utilizarea activă a exploitului. Lipsa unei intrări de stare SELinux în „Despre ecran” lipsește atât din versiunile Open Beta bazate pe Android 6.0, cât și din ROM-urile oficiale Android 7.0.

Există mai multe aplicații pentru a comuta starea SELinux la Permisiv, cum ar fi SELinuxModeChanger aplicarea. Comutarea SELinux prin această metodă nu permite stării să persistă printr-o repornire. Deși, poți utilizați scripturi pentru a menține Permisiv Stare SELinux la repornirile hard. Ambele metode necesită acces root, ceea ce implică faptul că utilizatorul cunoaște deja riscurile la care este expus. Dar diferența majoră cu schimbarea modului SELinux la Permisiv folosind vulnerabilitatea de mai sus este că nu numai persistă în timpul repornirilor hard, asa face fără a avea nevoie de acces root.

În prezent, nu există remedii împotriva vulnerabilității.


ACTUALIZAȚI:

Ne-am adresat Sultanxda, unul dintre cei mai recunoscuți dezvoltatori de ROM personalizate pentru dispozitivele OnePlus, pentru a vedea dacă ne poate ajuta să aflăm mai multe despre această problemă. A săpat rapid în cod pentru a găsi sursa rădăcină, iată ce a găsit:

Modul în care „fastboot oem selinux „Comanda funcționează este că adaugă un argument suplimentar pe linia de comandă a nucleului la pornirea Linux. Argumentul suplimentar vine sub forma „androidboot.selinux=", Unde poate fi „permisiv”. Acolo lucrurile devin amuzante: „androidboot." argumentele de pe linia de comandă a nucleului sunt analizate de init-ul Android. Într-o versiune de producție Android normală (o versiune „utilizator”), argumentul „androidboot.selinux” este total ignorat și selinux este întotdeauna forțat să se impună. Deci, acest bug este compus din două probleme:

  1. Utilizatorii pot face ca bootloader-ul să treacă un steag care, în mod normal, ar face Selinux permisiv pe o construcție ROM de inginerie/depanare
  2. OnePlus a modificat inițializarea Androidului pentru a onora steagul „androidboot.selinux” chiar și pentru versiunile de ROM de producție

Iată unde init-ul Android este configurat pentru a ignora indicatorul „androidboot.selinux” pentru versiunile de producție: https://android.googlesource.com/platform/system/core/+/android-6.0.0_r41/init/Android.mk#7

Indicatorul ALLOW_DISABLE_SELINUX din codul sursă este setat doar la 1 pentru userdebug și versiuni de inginerie

(ROM-ul meu nu este afectat de acest lucru deoarece îmi construiesc ROM-ul în modul producție (utilizator))

Deci „androidboot.selinux” este pur și simplu ignorat în ROM-ul meu, „fastboot oem selinux” ", de asemenea, pare să fie ceva creat de OnePlus, deoarece nu există o astfel de comandă în sursele publice de încărcare de încărcare ale CAF. Din capul meu, mă pot gândi la 4 moduri de a remedia acest lucru pentru utilizatorii cu bootloadere deblocate:

  1. Editați hex bootloader-ul pentru a schimba toate instanțele șirului „selinux” cu ceva diferit (cum ar fi „sclinux”), astfel încât steag-ul să nu fie recunoscut de inițial Android
  2. Editați hex binarul de inițializare Android în OxygenOS pentru a înlocui toate instanțele „androidboot.selinux” la ceva diferit (cum ar fi „androidboot.sclinux”), astfel încât Android init să nu recunoască steag androidboot.selinux
  3. Adăugați un hack la driverul liniei de comandă a nucleului similar cu bypass-ul meu SafetyNet pentru a ascunde marcajul „androidboot.selinux” din inițial Android

Am dori să-i mulțumim lui Sultanxda pentru timpul și efortul acordat pentru a ne ajuta să ne dăm seama ce se întâmplă în culise. De asemenea, am luat legătura cu OnePlus, care este conștient de situație și analizează problema.


Sperăm că OnePlus recunoaște în mod public problema gravă și este transparent în planurile lor de remediere.