Chyba #iamroot v macOS 10.13 High Sierra

Operační systém macOS 10.13 High Sierra obsahuje závažnou bezpečnostní chybu, kdy jakýkoliv uživatel (je jedno zda standardní nebo administrátor) může nastavit heslo jinému uživateli, který žádné heslo nastavené nemá. Takovým uživatelem je i super uživatel root, pod kterým se provádí například instalace nových systémových služeb.

Update:
Apple vydal aktualizaci Security Update 2017-001 (download) opravující chybu. Tato aktualizace nevyžaduje restart a bude nainstalována na pozadí bez vědomí uživatele, pokud je v System Preferences -> App Store nastavena automatická instalace systémových souborů a bezpečnostních aktualizací. První vydání aktualizace (aktualizuje macOS na verzi 17B1002) mohlo v macOS rozbít službu sdílení souborů. Apple vydal návod na opravu a následně aktualizaci nahradil novou verzí (-> macOS 17B1003), která problém se sdílením řeší.

Uživatel root na macOS standardně není zapnutý (nelze se za něj přihlásit). Zapíná se právě nastavením hesla, ale tuto možnost mají pouze účty administrátorů a systém si před úkonem vyžádá jejich heslo. Chyba umožňuje jakémukoliv uživateli nastavit rootovi libovolné heslo.

Postižené verze macOS 10.13 High Sierra jsou:

  • 10.13.0
  • 10.13.1
  • 10.13.2 beta verze vydané před 29.11.2017

Na sociálních sítích se útok diskutuje post hashtagem #iamroot.

Princip útoku

  1. Libovolný uživatel na Macu vyvolá autentizační dialog. Například v System Preferences -> Security & Privacy klepne na ikonu zámku.
  2. Do políčka uživatele zadá jméno uživatele root a do políčka hesla napíše libovolné heslo (může být i prázdné) a klepne na Unlock.
  3. Na první pokus nedojde k autorizaci (okno se zatřepe), ale kvůli chybě v systému je rootovi zadané heslo nastaveno.
  4. Na druhý pokus se stejným heslem již k autorizaci dojde a je možné měnit chráněná nastavení.
  5. Nyní se lze za uživatele root na počítači přihlásit, jak lokálně na Macu, tak přes síť vzdálenou plochou (pokud je zapnutá).

Útok lze provést i pomocí dalších nástrojů jako su či dscl na příkazové řádce nebo Apple skriptu spouštěného s root privilegii.

Důsledky

Pokud se útočníkovi podaří na Macu spustit jeho program využívající tuto chybu, extrémně snadno získá vzdálený přístup k počítači.

Řešení

Dokud Apple chybu neopraví, dávejte si extrémní pozor na stahování a spouštění aplikací mimo Mac App Store. Rovněž je velmi nebezpečné otevírat jakékoliv soubory z podezřelých zdrojů jako příloha emailu z neznámé/podezřelé adresy či soubor stažený z pochybného webu).

Útoku na super uživatele bez hesla můžeme předejít tím, že mu nastavíme silné heslo my. Pod účtem administrátora použijte příkaz dscl:

dscl . -passwd /Users/root

Jako nové heslo (New Password) zadejte dostatečně silné heslo (viz níže). Po vyzvání k zadání původního hesla (user’s old password) stačí zmáčkout enter. Zadáváte tak prázdné heslo a využíváte chyby k nastavení hesla roota. Standardně (bez přítomnosti chyby) by bylo potřeba spustit příkaz se sudo, zadat nejprve heslo administrátora a získat tak oprávnění heslo roota změnit.

Heslo roota není potřeba si pamatovat, protože pokud na Macu standardně potřebujete získat oprávnění super uživatele, dostanete jej dočasně pro daný úkon zadáním jména a hesla administrátorského účtu. Silné heslo můžete vygenerovat pomocí Password Assistant v System Preferences -> Change Password… -> Ikona zámku či příkazem:

openssl rand -base64 32

Zdroje