Heslo v Grub2 lze obejít: stačí stisknout 28× backspace

Petr Krčmář 17. 12. 2015

Bezpečnostní analytici Hector Marco a Ismael Ripoll objevili vážnou bezpečnostní chybu v Grub2, který je nejrozšířenějším zavaděčem linuxových distribucí. Může být chráněn heslem, ale tuto ochranu je možné velmi snadno obejít, není k tomu třeba nic speciálního: stačí stisknout 28× po sobě klávesu backspace.

Dva analytici z University of Valencia’s Cybersecurity research, Hector Marco a Ismael Ripoll, objevili v zavaděči Grub2 vážnou zranitelnost, která může být zneužita k překonání ochrany pomocí hesla a kompromitaci cílového počítače.

Není k tomu přitom potřeba žádný složitý postup: stačí 28krát stisknout klávesu backspace. Na některých linuxových distribucích tím zcela obejdete ochranu zavaděče heslem. V tu chvíli vám nic nebrání v předávání vlastních parametrů jádra nebo nastartování vlastního systému.

Grub2 je dnes jedním z nejpoužívanějších zavaděčů, rozhodně na platformě x86. Používá se ale i jinde, například na embedded zařízeních. Navíc nejen na Linuxu – například Solaris jej na x86 také pro zavádění používá.

Ve zveřejněném popisu chyby se píše, že po 28. stisku je překonána ochrana heslem a uživatel má plný přístup k „rescue shellu“ – příkazové řádce zavaděče. Konkrétně se problém týká verzí 1.98 (prosinec 2009) až 2.02 (prosinec 2015). Jde tedy o šest let starou chybu, která je rozšířena do mnoha distribucí.

Za problémem stojí chyba ve funkci grub_username_get, která zaznamenává počet zapsaných znaků a při stisku backspace hodnotu odečítá. Chyba se objevila v commitu b391bdb2f2c5ccf29da66cecdbfb7566656a704d. Nekontroluje se totiž dolní mez proměnné, takže se hodnota snadno dostane do záporných čísel (integer underflow).

Pokud uživatel dále mačká klávesu backspace, přepisují se nulami proměnné umístěné v paměti před tou, která má být ve skutečnosti vynulována. Při správném počtu stisků (28) je přepsána návratová hodnota funkce grub_memset(). To vede ke spuštění funkce grub_rescue_run() a řádka je na světě.

Chybná funkce vypadá takto:

static int
grub_username_get (char buf[], unsigned buf_size)
{
  unsigned cur_len = 0;
  int key;

  while (1)
    {
      key = grub_getkey ();
      if (key == '\n' || key == '\r')
        break;

      if (key == '\e')
        {
          cur_len = 0;
          break;
        }

      if (key == '\b') # Does not checks underflows !!
        {
          cur_len--; # Integer underflow !!
          grub_printf ("\b");
          continue;
        }

      if (!grub_isprint (key))
        continue;

      if (cur_len + 2 < buf_size)
        {
          buf[cur_len++] = key; # Off-by-two !!
          grub_printf ("%c", key);
        }
    }

  grub_memset (buf + cur_len, 0, buf_size - cur_len); # Out of bounds overwrite

  grub_xputs ("\n");
  grub_refresh ();

  return (key != '\e');
}

Útočník může tuto chybu zneužít a i přes ochranu hesla získat přístup k příkazové řádce, která mu umožní:

  • Zvýšit oprávnění a plně ovládat zavaděč,
  • načíst vlastní jádro a/nebo initramfs (třeba z USB) a pak si přečíst obsah disku nebo zavést rootkit,
  • modifikovat nebo smazat data na discích, i když jsou šifrovaná. Je možné takto smazat i Grub samotný a počítač odstavit.

Vývojáři předvedli funkční postup pro vložení backdooru do nainstalovaného systému. Zveřejnili také opravu v podobě velmi krátkého patche. Řada distribucí už vydala opravnou verzi: Debian, Ubuntu, Red Hat a další. Doporučujeme co nejdříve aktualizovat.

(Zdroj: SecurityAffairs.co)

Našli jste v článku chybu?
Podnikatel.cz: Daňové složenky? U daně z příjmů se nechytly

Daňové složenky? U daně z příjmů se nechytly

Měšec.cz: Banky umí platby na kartu, jen to neříkají

Banky umí platby na kartu, jen to neříkají

Měšec.cz: Nový sazebník mBank radost nedělá

Nový sazebník mBank radost nedělá

Měšec.cz: Kurzy platebních karet: vyplatí se platit? (TEST)

Kurzy platebních karet: vyplatí se platit? (TEST)

120na80.cz: Tipy pro odvodnění organismu

Tipy pro odvodnění organismu

Vitalia.cz: Jak na domácí zmrzlinu?

Jak na domácí zmrzlinu?

Lupa.cz: Vodafone umí volání přes Wi-Fi. Z ciziny jako v ČR

Vodafone umí volání přes Wi-Fi. Z ciziny jako v ČR

120na80.cz: Jaké plavecké pomůcky vaše dítě ochrání?

Jaké plavecké pomůcky vaše dítě ochrání?

DigiZone.cz: Sat novinky: pátý kanál maďarské televize

Sat novinky: pátý kanál maďarské televize

Podnikatel.cz: Nereaguje na výzvu ČOIky, zaplatí milion

Nereaguje na výzvu ČOIky, zaplatí milion

Vitalia.cz: Patří maso do dětského jídelníčku?

Patří maso do dětského jídelníčku?

DigiZone.cz: Reklamy na kurzové sázky? Nejspíš chaos

Reklamy na kurzové sázky? Nejspíš chaos

Lupa.cz: IT scéna po brexitu: přijde exodus vývojářů?

IT scéna po brexitu: přijde exodus vývojářů?

Podnikatel.cz: Místa, kde hází podnikání klacky pod nohy

Místa, kde hází podnikání klacky pod nohy

Podnikatel.cz: Používají čárové kódy, vyhledávače je mají radši

Používají čárové kódy, vyhledávače je mají radši

Lupa.cz: eIDAS: Nepřehnali jsme to s výjimkami?

eIDAS: Nepřehnali jsme to s výjimkami?

Lupa.cz: EU začala prověřovat bezpečnost open-source

EU začala prověřovat bezpečnost open-source

Podnikatel.cz: Fotogalerie: Jesenka už má skoro 50 let

Fotogalerie: Jesenka už má skoro 50 let

Lupa.cz: Japonská invaze. Proč SoftBank kupuje ARM?

Japonská invaze. Proč SoftBank kupuje ARM?

DigiZone.cz: Loewe Subwoofer 300 pro televizory

Loewe Subwoofer 300 pro televizory