Zranitelnosti v OpenBSD umožňující eskalaci oprávnění a obcházení autentizace v smtpd, ldapd a radiusd

Společnost Qualys odhaleno čtyři zranitelnosti v OpenBSD, z nichž jeden vám umožňuje připojit se na dálku bez autentizace k některým síťovým službám a další tři zvýšit jejich oprávnění v systému. Zpráva Qualys zaznamenala rychlou reakci vývojářů OpenBSD - všechny problémy byly vyloučeno в OpenBSD 6.5 и OpenBSD 6.6 do 40 hodin po soukromém oznámení.

Vzdáleně zneužitelná zranitelnost je způsobena chybou při uspořádání volání autentizační rutiny v knihovně libc, která volá
/usr/libexec/auth/login_style program předávající argumenty na příkazovém řádku. Včetně při volání login_style pomocí volitelného parametru "-s service" je povoleno předání názvu protokolu. Pokud je na začátku uživatelského jména použit znak "-", bude toto jméno považováno za volbu při spuštění login_style. Pokud tedy během ověřování zadáte jako uživatelské jméno „-schallenge“ nebo „-schallenge: passwd“, bude login_style vnímat požadavek jako požadavek na použití handleru. S/Klíč.

Problém je v tom, že protokol S/Key v login_style je podporován pouze formálně, ale ve skutečnosti je ignorován s výstupem známky úspěšné autentizace. Útočník se tak může vydávat za uživatele „-schallenge“ a obejít autentizaci a získat přístup bez zadání hesla nebo klíčů. Všechny síťové služby, které používají běžná volání knihovny libc k ověření, jsou potenciálně ovlivněny tímto problémem. Například schopnost obejít autentizaci je potvrzena v smtpd (AUTH PLAIN), ldapd a radiusd.

Chyba zabezpečení se v sshd neprojevuje, protože má další ochranu s kontrolou přítomnosti uživatele v systému. Sshd však lze použít k testování, zda je systém náchylný k zranitelnosti - při přístupu k uživatelskému jménu "-sresponse:passwd" se připojení zablokuje, protože sshd čeká na login_passwd, aby vrátil parametry volání (výzva) a login_passwd čeká na přenos chybějících parametrů (název "- sresponse" je brán jako možnost). Potenciální místní útočník by se mohl pokusit obejít autentizaci v obslužném programu su, ale předání názvu "-sresponse" způsobí selhání procesu kvůli návratu nulového ukazatele při provádění funkce getpwnam_r("-schallenge", ...) .

Další zranitelnosti:

  • CVE-2019-19520 – Místní eskalace oprávnění prostřednictvím manipulace s nástrojem xlock, který je dodáván s příznakem sgid, který změní skupinu na „auth“. V kódu xlock je redefinice cest knihoven zakázána pouze při změně ID uživatele (setuid), což útočníkovi umožňuje změnit proměnnou prostředí „LIBGL_DRIVERS_PATH“ a organizovat načítání své sdílené knihovny, jejíž kód bude spuštěn. po eskalaci oprávnění do skupiny "auth".
  • CVE-2019-19522 – Umožňuje místnímu uživateli ve skupině „auth“ spouštět kód jako root, když je v systému povoleno ověřování S/Key nebo YubiKey (ve výchozím nastavení není povoleno). Členství ve skupině „auth“, ke které lze získat přístup využitím výše uvedené chyby zabezpečení xlock, umožňuje zapisovat soubory do adresářů /etc/skey a /var/db/yubikey. Útočník by například mohl přidat nový soubor /etc/skey/root pro generování jednorázových klíčů pro autentizaci root pomocí S/Key.
  • CVE-2019-19519 - Možnost zvýšit limity zdrojů pomocí manipulací s obslužným programem su. Při zadání volby "-L", která znamená cyklické opakování pokusů o autentizaci v případě selhání, se třída uživatele nastaví pouze jednou a při dalších pokusech se neresetuje. Útočník může provést „su -l -L“ na první pokus o zadání cizího přihlášení s jinou třídou účtu, ale na druhý pokus o úspěšné ověření pod sebou. V této situaci budou uživateli nastaveny limity odpovídající třídě uživatele zadané na první pokus (například maximální počet procesů nebo velikost paměti pro proces). Tato metoda funguje pouze pro výpůjční limity od neprivilegovaných uživatelů, protože uživatel root musí být ve skupině wheel).

Navíc lze poznamenat implementace v OpenBSD nová metoda pro kontrolu platnosti systémových volání, která dále komplikuje využívání zranitelností. Metoda umožňuje provádět systémová volání pouze v případě, že jsou přístupná z dříve registrovaných paměťových oblastí. K označení oblastí paměti navržený nové systémové volání msyscall().

Zdroj: opennet.ru