Sårbarheter i OpenBSD som tillåter privilegieskalering och förbikoppling av autentisering i smtpd, ldapd och radiusd

Qualys Company avslöjat fyra sårbarheter i OpenBSD, varav en låter dig ansluta på distans utan autentisering till vissa nätverkstjänster, och de andra tre för att öka sina privilegier i systemet. Qualys-rapporten noterade det snabba svaret från OpenBSD-utvecklarna - alla problem var det utslagen в OpenBSD 6.5 и OpenBSD 6.6 inom 40 timmar efter det privata meddelandet.

Den fjärrexploaterbara sårbarheten orsakas av ett fel i att arrangera anropet till autentiseringshanteraren i libc-biblioteket, som anropar
/usr/libexec/auth/login_style-programmet skickar argument på kommandoraden. Inklusive när login_style anropas med den valfria parametern "-s service", är det tillåtet att skicka protokollets namn. Om ett "-"-tecken används i början av användarnamnet kommer detta namn att behandlas som ett alternativ när login_style körs. Följaktligen, om du anger "-schallenge" eller "-schallenge: passwd" som användarnamn under autentiseringen, kommer login_style att uppfatta begäran som en begäran om att använda hanteraren S/Key.

Problemet är att S/Key-protokollet i login_style endast stöds formellt, men det ignoreras faktiskt med utmatningen av ett tecken på framgångsrik autentisering. Således kan en angripare posera som "-utmaning"-användare och kringgå autentisering och få åtkomst utan att ange ett lösenord eller nycklar. Alla nätverkstjänster som använder vanliga libc-anrop för autentisering påverkas potentiellt av problemet. Till exempel bekräftas möjligheten att kringgå autentisering i smtpd (AUTH PLAIN), ldapd och radiusd.

Sårbarheten visar sig inte i sshd, eftersom den har ytterligare skydd med att kontrollera användarens närvaro i systemet. Däremot kan sshd användas för att testa om ett system är mottagligt för en sårbarhet - vid åtkomst till användarnamnet "-sresponse:passwd" hänger anslutningen, eftersom sshd väntar på att login_passwd ska returnera parametrarna för anropet (utmaning), och login_passwd väntar på överföring av saknade parametrar (namnet "- sresponse" tas som ett alternativ). En potentiell lokal angripare kan försöka kringgå autentisering i su-verktyget, men om man skickar namnet "-sresponse" får processen att krascha på grund av att en noll-pekare returneras när funktionen getpwnam_r("-challenge", ...) körs .

Andra sårbarheter:

  • CVE-2019-19520 - Lokal behörighetsupptrappning genom att manipulera xlock-verktyget som följer med sgid-flaggan som ändrar gruppen till "auth". I xlock-koden är omdefiniering av biblioteksvägar förbjuden endast när användar-ID (setuid) ändras, vilket gör att angriparen kan ändra miljövariabeln "LIBGL_DRIVERS_PATH" och organisera laddningen av sitt delade bibliotek, vars kod kommer att exekveras efter privilegieupptrappning till "auth"-gruppen.
  • CVE-2019-19522 - Tillåter en lokal användare i "auth"-gruppen att köra kod som root när S/Key eller YubiKey-autentisering är aktiverad i systemet (inte aktiverat som standard). Att vara medlem i "auth"-gruppen, som kan nås genom att utnyttja ovanstående xlock-sårbarhet, tillåter filer att skrivas till katalogerna /etc/skey och /var/db/yubikey. Till exempel kan en angripare lägga till en ny /etc/skey/root-fil för att generera engångsnycklar för rotautentisering via S/Key.
  • CVE-2019-19519 - Möjlighet att öka resursgränserna genom manipulationer med su-verktyget. När du anger alternativet "-L", vilket innebär en cyklisk upprepning av autentiseringsförsök i händelse av misslyckande, ställs användarklassen endast in en gång och återställs inte vid efterföljande försök. En angripare kan köra "su -l -L" vid det första försöket att ange någon annans inloggning med en annan kontoklass, men vid det andra försöket att framgångsrikt autentisera sig själv. I den här situationen kommer användaren att sätta gränser som motsvarar den användarklass som specificerades vid första försöket (till exempel det maximala antalet processer eller minnesstorleken för en process). Metoden fungerar endast för lånegränser från icke-privilegierade användare, eftersom rotanvändaren måste vara i hjulgruppen).

Dessutom kan det noteras genomförande i OpenBSD en ny metod för att kontrollera giltigheten av systemanrop, vilket ytterligare komplicerar exploateringen av sårbarheter. Metoden tillåter att systemanrop exekveras endast om de nås från tidigare registrerade minnesområden. För att markera minnesområden föreslagen nytt systemanrop msyscall().

Källa: opennet.ru