Nakon šest mjeseci razvoja objavljeno je izdanje sustavne biblioteke GNU C Library (glibc) 2.39, koja u potpunosti ispunjava zahtjeve standarda ISO C11 i POSIX.1-2017. U novo izdanje uključena su poboljšanja od 67 programera.
Od poboljšanja implementiranih u Glibc 2.39, ističu se:
- Osigurana je podrška za sjenovitu staku (shadow stack) koja se pojavila u Linux kernelu 6.6 i omogućava blokiranje rada mnogih exploita koristeći hardverske mogućnosti Intel procesora za zaštitu od prepisivanja adrese povratka iz funkcije u slučaju prelivanja bafera u staku. Suština zaštite je da se nakon prijenosa kontrole funkciji, adrese povratka pohranjuju u procesoru ne samo u običnoj staki, već i u posebnoj 'sjenovitoj' staki koja se ne može mijenjati direktno. Prije izlaska iz funkcije, adresa povratka se izvlači iz sjenovite stake i upoređuje s adresom povratka iz glavne stake. Nepodudaranje adresa dovodi do generiranja izuzetka, blokirajući situacije kada je exploit uspio prepisati adresu u glavnoj staki. Za uključivanje dodana je opcija kompajlera '--enable-cet'.
- Dodana je nova zaglavlje datoteka <stdbit.h>, definirana u nacrtu standarda ISO C2X i uključuje funkcije stdc_leading_zeros, stdc_leading_ones, stdc_trailing_zeros, stdc_trailing_ones, stdc_first_leading_zero, stdc_first_leading_one, stdc_first_trailing_zero, stdc_first_trailing_one, stdc_count_zeros, stdc_count_ones, stdc_has_single_bit, stdc_bit_width, stdc_bit_floor i stdc_bit_ceil u varijantama s tipovima 'unsigned char', 'unsigned short', 'unsigned int', 'unsigned long int' i 'unsigned long long int'.
- Za Linux platformu implementirane su funkcije posix_spawnattr_getcgroup_np i posix_spawnattr_setcgroup_np, kao i zastavica POSIX_SPAWN_SETCGROUP, koje omogućuju podešavanje cgroupv2 u novom procesu pomoću funkcija posix_spawn i posix_spawnp, isključujući pojavu stanja utrke. Funkcije su ekstenzije GNU-a i za rad zahtijevaju kernel Linuxa s podrškom za sistemski poziv clone3.
- Za Linux platformu implementirane su funkcije pidfd_spawn i pidfd_spawn, koje su po semantici slične funkciji posix_spawn, ali vraćaju ne identifikator procesa (PID), već datotečni deskriptor za korištenje u funkcijama koje podržavaju mehanizam PIDFD, poput pidfd_send_signal, poll i waitid (PIDFD se povezuje s određenim procesom i ne mijenja se, dok se PID može vezati za drugi proces nakon završetka trenutnog procesa povezanog s tim PID-om).
- Za Linux platformu dodana je funkcija pidfd_getpid koja omogućava određivanje identifikatora procesa (PID) na temelju datotečnog deskriptora procesa (PIDFD), koji se vraća funkcijama pid_spawn, fork_np i pidfd_open.
- U funkcijama iz obitelji scanf dodan je modifikator veličine 'wN', koji se primjenjuje za argumente s tipovima intN_t, int_leastN_t, uintN_t i uint_leastN_t. Na primjer, za čitanje decimalnih vrijednosti s tipovima int32_t i int_least32_t može se koristiti '%w32d', a za heksadecimalne '%w32x'. Slično je dodan modifikator 'wfN' za tipove int_fastN_t i uint_fastN_t, predstavljene u nacrtu standarda ISO C2X.
- Dodana je postavka 'glibc.cpu.plt_rewrite', koja uključuje prepisivanje PLT (Procedure Linkage Table) na sustavima x86-64, pri čemu će linker zamijeniti indirektne skokove (indirect branch) u PLT s izravnima.
- Dodana je postavka 'glibc.mem.decorate_maps' za dodavanje dodatnih informacija o dodjeli memorije (na primjer, o steku niti, stvorenom funkcijom pthread_create, ili memoriji dodijeljenoj putem malloc).
- U strukturi 'statvfs' omogućeno je popunjavanje polja 'f_type' informacijom o tipu FS, koja odgovara sadržaju polja u strukturi 'statfs'. Ranije u Linuxu je polje 'f_type' uvijek postavljano na 0.
- Za AArch64 platformu, u libmvec i math.h dodane su anotacije koje omogućuju korištenje vektorizacije poziva prilikom kompilacije s opcijom '-ffast-math' u GCC 9 i novijim verzijama kompajlera. Vektorizacija je uključena za matematičke funkcije acos, acosf, asin, asinf, atan, atanf, atan2, atan2f, cos, cosf, exp, expf, exp10, exp10f, exp2, exp2f, expm1, expm1f, log, logf, log10, log10f, log1p, log1pf, log2, log2f, sin, sinf, tan i tanf.
- Iz sastava je uklonjena biblioteka libcrypt i povezani zaglavni fajl ''. Programerima se preporučuje prelazak na korištenje alternativnih biblioteka, kao što je libxcrypt.
- U alatu ldconfig sada se preskoči obrada datoteka s simbolom ‘;’ u imenu datoteke ili koje završavaju na '.dpkg.tmp' i '.dpkg.new', što omogućuje da se ne obrađuju privremene datoteke paketa rpm i dpkg.
- Prekida se podrška za arhitekturu ia64 (ia64*-*-linux-gnu), koja se koristi u Intel Itanium procesorima.
- Uklonjene ranjivosti:
- CVE-2023-6246, CVE-2023-6779, CVE-2023-6780 — kritične ranjivosti u funkciji __vsyslog_internal(), koje omogućavaju kroz manipulacije pokretanjem SUID aplikacija izvršavanje vlastitog koda s povišenim privilegijama.
- CVE-2023-4911 — ranjivost u Glibc ld.so koja omogućava dobijanje root prava u sistemu. Ranjivost je uzrokovana greškom u kodu parsiranja stringa definiranog u promenljivoj okruženja GLIBC_TUNABLES i može dovesti do pisanja parsirane vrednosti izvan dodeljenog bafera. Postoje funkcionalni exploit-i.
- CVE-2023-4806 — ranjivost u funkciji getaddrinfo, uzrokovana pristupom memoriji nakon što je oslobođena (use-after-free). Problem se javlja kada NSS plugin implementira samo call-back pozive „_gethostbyname2_r” i „_getcanonname_r”, ali ne podržava poziv „_gethostbyname3_r”. Za eksploataciju ranjivosti, DNS server mora vratiti velik broj adresa IPv6 i IPv4 za traženi host, što dovodi do rušenja procesa koji je pozvao funkciju getaddrinfo za AF_INET6 familiju sa postavljenim flagovima AI_CANONNAME, AI_ALL i AI_V4MAPPED.
- CVE-2023-4527 — ranjivost u funkciji getaddrinfo koja omogućava čitanje podataka izvan granica bafera prilikom obrade DNS odgovora koji je dobijen putem TCP-a, veličine preko 2048 bajta. Ranjivost se manifestuje kada se koristi opcija „no-aaaa” u /etc/resolv.conf.
Takođe se može napomenuti izdavanje skupa sistemskih alata GNU Binutils 2.42, koji uključuje programi kao što su GNU linker, GNU assembler, nm, objdump, strings, strip.
U novoj verziji Binutils:
- U assembler (gas) za sisteme x86-64 dodana je eksperimentalna opcija „—scfi=experimental” za sintezu CFI (Control Flow Integrity) konstrukcija za ručno napisani kod assemblera koji se pridružuje System V AMD64 ABI.
- U program readelf dodana je opcija „—extra-sym-info” za ispis proširenih informacija o simbolima („—symbols”), kao što su naziv sekcije na koju se odnosi indeks st_shndx.
- U alatu objcopy omogućena je upotreba u opciji „—set-section-flags” vrednosti „large” za postavljanje sekcije flaga SHF_X86_64_LARGE za ELF objekte na sistemima x86-64. U opciji „—visualize-jumps” implementirana je podrška za arhitekturu s390.
- Prilikom disassemblerovanja instrukcija s390 omogućeno je prikazivanje komentara u opisima instrukcija. Da biste uključili opise u objdump, možete navesti parametar „-M insndesc”, a u gdb — podešavanje „set disassembler-options insndesc”.
- U linker su dodane opcije „-z mark-plt” i „-z nomark-plt” za označavanje stavki u PLT tabeli koristeći tagove DT_X86_64_PLT, DT_X86_64_PLTSZ i DT_X86_64_PLTENT.
- U linker je dodata podrška za obrnutu sortiranost.
- Dodane su opcije „—warn-execstack-objects“, „—error-execstack“ i „—error-rxw-segments“ za prikaz upozorenja ili grešaka prilikom korištenja u objektima izvršnog steka.
- Implementirana je podrška za ABI 2.30 arhitekture LoongArch, kao i podrška za nove instrukcije definirane u specifikaciji LoongArch 1.10.
- Dodana je podrška za skup instrukcija KVX, koje se koriste u procesorima Kalray (npr. primjenjuju se u SoC Coolidge).
- Za sustave temeljene na Intel arhitekturi dodana je podrška za proširenja:
- Intel APX: 32 GPR-ova, NDD, PUSH2/POP2, PUSHP/POPP.
- USER_MSR.
- AVX10.1.
- PBNDKB.
- SM4.
- SM3.
- SHA512.
- AVX-VNNI-INT16.
- U port za arhitekturu RISC-V dodana je podrška za proširenja:
- T-Head (XTheadVector, XTheadZvlsseg i XTheadZvamo).
- CORE-V (XCVmac, XCValu).
- SiFive VCIX (XSfVcp).
- U port za arhitekturu AArch64 dodana je podrška za proširenja:
- SVE2.1 (Scalable Vector Extension 2.1).
- SME2.1 (Scalable Matrix Extension 2.1).
- B16B16 (BFloat16 i BFloat16 za SVE2 i SME2).
- RASv2 (Reliability, Availability and Serviceability v2).
- LSE128 (128-bit Atomic).
- GCS (Guarded Control Stack).
- CHK (Check Feature Status).
- SPECRES2 (Enhanced Speculation Restriction).
- LRCPC3 (Load-Acquire RCpc).
- THE (Translation Hardening).
- ITE (Instruction Trace).
- D128 (128-bitni deskriptori tablice stranica memorije).
- XS (atribut memorije XS).
- Dodana je podrška za procesore AArch64 Cortex-A520, Cortex-A720, Cortex-X3 i Cortex-X4.
- U BPF assembler za kompatibilnost s assemblerom clang/LLVM dodana je podrška za odvajanje komentara simbolima „#“ i „//“, kao i za korištenje simbola „;“ za razdvajanje izraza u retku („;“ više ne može biti korišten za komentare).
Izvor: opennet.ru
