Niedawno ogłoszono wydanie nowej wersji Glibc 2.34. Ukazała się ona po sześciu miesiącach prac i zawiera kilka istotnych zmian, w tym dodanie bibliotek libpthread, libdl, libutil i libanl, a także poprawki błędów, z których jedna powodowała awarie.
Dla osób niezaznajomionych z Glibc: jest to biblioteka GNU C, powszechnie znana jako glibc, będąca standardową biblioteką środowiska uruchomieniowego języka GNU C. W systemach, w których jest używana, ta biblioteka C, która udostępnia i definiuje wywołania systemowe oraz inne podstawowe funkcje, jest używana przez niemal wszystkie programy.
Główne nowe funkcje Glibc 2.34
W nowej wersji Glibc 2.34 zintegrowano główne biblioteki libpthread, libdl, libutil i libanl ; korzystanie z ich funkcjonalności w aplikacjach nie wymaga już łączenia ich wskaźnikami -lpthread, -ldl, -lutil i -lanl.
Ponadto wspomniano, że poczyniono przygotowania do integracji libresolv z libc, co usprawni proces aktualizacji glibc i uprości implementację w środowisku uruchomieniowym. Udostępniono również biblioteki zastępcze dla zapewnienia kompatybilności z aplikacjami zbudowanymi z wykorzystaniem wcześniejszych wersji glibc.
Spośród zmian skoncentrowanych na Linuksie w Glibc 2.34, najbardziej godna uwagi jest dodana możliwość korzystania z 64-bitowego typu time_t w konfiguracjach , które tradycyjnie korzystały z 32-bitowego typu time_t . Funkcja ta jest dostępna tylko w systemach z jądrem w wersji 5.1 i nowszych.
Kolejną zmianą specyficzną dla Linuksa jest implementacja funkcji `execveat` , która umożliwia wykonanie pliku wykonywalnego z otwartego deskryptora pliku . Ta nowa funkcja jest również wykorzystywana w implementacji wywołania `fexecve`, które nie wymaga montowania pseudosystemu plików `/proc` podczas uruchamiania.
Dodano również funkcję close_range(), dostępną dla Linuksa w wersji 5.9 i nowszych, która umożliwia procesowi jednoczesne zamknięcie całego zakresu otwartych deskryptorów plików. Dodatkowo zaimplementowano parametr glibc.pthread.stack_cache_size, który umożliwia dostosowanie rozmiaru pamięci podręcznej stosu wątków pthread.
Ponadto dodano funkcję `_Fork`, zastępującą funkcję `fork` , która spełnia wymagania „async-signal-safe”, co oznacza, że można ją bezpiecznie wywołać z procedur obsługi sygnałów. Podczas wykonywania funkcji `_Fork` tworzone jest minimalne środowisko, wystarczające do wywołania funkcji w procedurach obsługi sygnałów, takich jak `raise` i `execute`, bez wywoływania funkcji, które mogłyby zmienić blokady lub stan wewnętrzny.
W przypadku części luk naprawionych w Glibc 2.34 wymieniono:
CVE-2021-27645: awaria procesu nscd (demona buforującego serwer nazw) spowodowana podwójnym wywołaniem funkcji free podczas przetwarzania specjalnie spreparowanych żądań grup sieciowych.
CVE-2021-33574: Dostęp do obszaru pamięci używanego po zwolnieniu w funkcji mq_notify podczas korzystania z typu powiadomienia SIGEV_THREAD z atrybutem wątku, dla którego ustawiono alternatywną maskę powiązania procesora. Ten problem może spowodować awarię, ale nie wyklucza innych opcji ataku.
CVE-2021-35942: Przekroczenie rozmiaru parametru w funkcji wordexp może spowodować awarię aplikacji.
Inne istotne zmiany obejmują:
- Dodano funkcję timespec_getres, zdefiniowaną w projekcie standardu ISO C2X, a funkcję timespec_get rozszerzono o możliwości podobne do funkcji clock_getres POSIX.
- W pliku gconv-modules pozostał tylko minimalny zestaw głównych modułów gconv, a reszta została przeniesiona do dodatkowego pliku gconv-modules-extra.conf znajdującego się w katalogu gconv-modules.d.
- Użycie dowiązań symbolicznych do łączenia instalowalnych obiektów współdzielonych z wersją Glibc zostało usunięte. Obiekty te są teraz instalowane tak, jak są (np. libc.so.6 jest teraz plikiem, a nie linkiem do libc-2.34.so).
- W systemie Linux funkcje takie jak shm_open i sem_open wymagają teraz systemu plików dla pamięci współdzielonej zamontowanej w punkcie montowania / dev / shm.
Jeśli chcesz dowiedzieć się więcej o tej nowej wersji, szczegóły znajdziesz pod poniższym linkiem.