Efter sex mÄnaders utveckling publicerades versionen av systembiblioteket GNU C Library (glibc) 2.39, som helt uppfyller kraven i standarderna ISO C11 och POSIX.1-2017. Den nya versionen innehÄller korrigeringar frÄn 67 utvecklare.
Bland förbÀttringarna som införts i Glibc 2.39 kan nÀmnas:
- Stöd för en skuggstack (shadow stack) har lagts till, vilket introducerades i Linux-kÀrnan 6.6 och möjliggör blockering av mÄnga exploiter genom att anvÀnda hÄrdvarufunktioner i Intel-processorer för att skydda mot överskrivning av returadressen frÄn funktionen vid stacköverflöd. Skyddet gÄr ut pÄ att efter att kontrollen har överförts till funktionen, sparas returadresserna av processorn inte bara i den vanliga stacken utan ocksÄ i en separat "skugg"-stack som inte kan Àndras direkt. Innan utgÄngen frÄn funktionen fÄr returadressen extraheras frÄn den skuggstacken och jÀmföras med returadressen frÄn den huvudsakliga stacken. OöverensstÀmmelse mellan adresserna leder till genereringen av ett undantag som blockerar situationer dÀr en exploit lyckas överskrida adressen i den huvudsakliga stacken. För att aktivera detta har en kompilatoroption "--enable-cet" lagts till.
- En ny headerfil <stdbit.h> har lagts till, definierad i utkastet till standarden ISO C2X och som inkluderar funktioner 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 och stdc_bit_ceil i versioner med typerna "unsigned char", "unsigned short", "unsigned int", "unsigned long int" och "unsigned long long int".
- För Linux-plattformen har funktionerna posix_spawnattr_getcgroup_np och posix_spawnattr_setcgroup_np implementerats, liksom flaggan POSIX_SPAWN_SETCGROUP, som gör det möjligt att konfigurera cgroupv2 i den nya processen med hjÀlp av funktionerna posix_spawn och posix_spawnp, vilket eliminerar risken för tidskonflikter. Funktionerna Àr GNU-förlÀngningar och krÀver att Linux-kÀrnan har stöd för systemanropet clone3.
- För Linux-plattformen har funktionerna pidfd_spawn och pidfd_spawp implementerats, som Àr semantiskt nÀra funktionen posix_spawn, men som returnerar en filbeskrivare för anvÀndning i funktioner som stöder PIDFD-mekanismen, sÄsom pidfd_send_signal, poll och waitid (PIDFD Àr kopplad till en specifik process och förÀndras inte, medan PID kan kopplas till en annan process efter att den aktuella processen kopplad till detta PID har avslutats).
- För Linux-plattformen har funktionen pidfd_getpid lagts till för att bestÀmma processens identifierare (PID) baserat pÄ filbeskrivaren för processen (PIDFD) som returneras av funktionerna pid_spawn, fork_np och pidfd_open.
- I scanf-familjen av funktioner har storleksmodifieraren "wN" lagts till för argument av typerna intN_t, int_leastN_t, uintN_t och uint_leastN_t. Till exempel, för att lÀsa decimala vÀrden med typerna int32_t och int_least32_t kan "%w32d" anges, medan för hexadecimala vÀrden kan "%w32x" anvÀndas. PÄ liknande sÀtt har modifieraren "wfN" lagts till för typerna int_fastN_t och uint_fastN_t, som presenteras i den preliminÀra standarden ISO C2X.
- InstÀllningen "glibc.cpu.plt_rewrite" har lagts till, som aktiverar omskrivning av PLT (Procedure Linkage Table) pÄ x86-64-system, dÀr lÀnkaren ersÀtter indirekta hopp i PLT med direkta.
- InstÀllningen "glibc.mem.decorate_maps" har lagts till för att lÀgga till extra information om minnesallokering (t.ex. om stacken för trÄdar skapad av pthread_create-funktionen eller minnet som Àr allokerat via malloc).
- I strukturen "statvfs" sÀkerstÀlls att fÀltet "f_type" fylls med information om FS-typ som motsvarar innehÄllet i fÀltet i strukturen "statfs". Tidigare i Linux har fÀltet "f_type" alltid fyllts med 0.
- För AArch64-plattformen har annoteringar lagts till i libmvec och math.h, som möjliggör vektorisering av anrop vid kompilering med alternativet "-ffast-math" i GCC 9 och nyare versioner av kompilatorn. Vektoriseringen aktiveras för matematiska funktioner som 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 och tanf.
- Biblioteket libcrypt och den associerade headerfilen "" har tagits bort. Utvecklare av applikationer rekommenderas att övergÄ till att anvÀnda alternativa bibliotek som libxcrypt.
- I verktyget ldconfig hoppar man nu över filer med symbolen â;â i filnamnet eller som slutar med «.dpkg.tmp» och «.dpkg.new», vilket gör att tillfĂ€lliga filer frĂ„n paketförvaltare som rpm och dpkg inte bearbetas.
- Stödet för arkitekturen ia64 (ia64*-*-linux-gnu) som anvÀnds i Intel Itanium-processorer har upphört.
- SÄrbarheter ÄtgÀrdade:
- CVE-2023-6246, CVE-2023-6779, CVE-2023-6780 â kritiska sĂ„rbarheter i funktionen __vsyslog_internal(), som genom manipulering av SUID-applikationers körning gör det möjligt att köra egen kod med förhöjda privilegier.
- CVE-2023-4911 â en sĂ„rbarhet i Glibc ld.so som möjliggör erhĂ„llande av root-rĂ€ttigheter i systemet. SĂ„rbarheten orsakas av ett fel i parsningen av strĂ€ngen angiven i miljövariabeln GLIBC_TUNABLES, vilket kan leda till att det parserade vĂ€rdet skrivs utanför det tilldelade buffret. Det finns fungerande exploits.
- CVE-2023-4806 â en sĂ„rbarhet i funktionen getaddrinfo, som orsakas av Ă„tkomst till minnet efter att det har frigjorts (use-after-free). Problemen uppstĂ„r nĂ€r NSS-pluginet bara implementerar call-back-anropen «_gethostbyname2_r» och «_getcanonname_r», men inte stöder anropet «_gethostbyname3_r». För att sĂ„rbarheten ska kunna utnyttjas mĂ„ste DNS-servern returnera ett stort antal adresser IPv6 och IPv4 för den begĂ€rda vĂ€rden, vilket leder till att processen som anropar funktionen getaddrinfo kraschar för AF_INET6-familjen nĂ€r flaggorna AI_CANONNAME, AI_ALL och AI_V4MAPPED Ă€r satta.
- CVE-2023-4527 â en sĂ„rbarhet i funktionen getaddrinfo som gör det möjligt att lĂ€sa data utanför buffertgrĂ€nserna vid behandling av DNS-svar erhĂ„llna över TCP, som Ă€r större Ă€n 2048 byte. SĂ„rbarheten uppstĂ„r nĂ€r alternativet «no-aaaa» anvĂ€nds i /etc/resolv.conf.
Dessutom kan det nÀmnas att ett nytt paket av systemverktyg GNU Binutils 2.42 har slÀppts, som inkluderar program som GNU linker, GNU assembler, nm, objdump, strings, strip.
I den nya versionen av Binutils:
- I assemblersprĂ„ket (gas) för x86-64-system har en experimentell alternativ «âscfi=experimental» lagts till för att syntetisera CFI-konstruktioner (Control Flow Integrity) för manuellt skriven assemblerkod i enlighet med System V AMD64 ABI.
- I programmet readelf har alternativet «âextra-sym-info» lagts till för att visa utökad information om symboler (»âsymbols«), sĂ„som namnet pĂ„ sektionen som refereras av indexet st_shndx.
- I verktyget objcopy har möjligheten att anvĂ€nda vĂ€rdet «large» i alternativet «âset-section-flags» införts för att stĂ€lla in sektionens flagga SHF_X86_64_LARGE för ELF-objekt pĂ„ x86-64-system. Stödet för arkitekturen s390 har implementerats i alternativet «âvisualize-jumps».
- Vid disassemblage av instruktioner för s390 har möjligheten att visa kommentarer i instruktionernas beskrivningar implementerats. För att inkludera beskrivningar i objdump kan du ange parametern "-M insndesc", och i gdb - instÀllningen "set disassembler-options insndesc".
- LÀnkaren har fÄtt tillÀgg av alternativen "-z mark-plt" och "-z nomark-plt" för att mÀrka poster i PLT-tabellen med hjÀlp av taggarna DT_X86_64_PLT, DT_X86_64_PLTSZ och DT_X86_64_PLTENT.
- LÀnkaren har fÄtt stöd för sortering i omvÀnd ordning.
- TillĂ€gg av alternativen "âwarn-execstack-objects", "âerror-execstack" och "âerror-rxw-segments" för att ge varningar eller felmeddelanden vid anvĂ€ndning i objekt för exekveringsstack.
- Stöd för ABI 2.30 för LoongArch-arkitekturen har genomförts, liksom stöd för nya instruktioner som definieras i specifikationen LoongArch 1.10.
- Stöd för instruktionsuppsÀttningen KVX, anvÀnd i processorer frÄn Kalray (anvÀnds till exempel i SoC Coolidge), har lagts till.
- För system baserade pÄ Intel-arkitekturen har stöd för följande tillÀgg lagts till:
- Intel APX: 32 GPRs, NDD, PUSH2/POP2, PUSHP/POPP.
- USER_MSR.
- AVX10.1.
- PBNDKB.
- SM4.
- SM3.
- SHA512.
- AVX-VNNI-INT16.
- I porten för RISC-V-arkitekturen har stöd för följande tillÀgg lagts till:
- T-Head (XTheadVector, XTheadZvlsseg och XTheadZvamo).
- CORE-V (XCVmac, XCValu).
- SiFive VCIX (XSfVcp).
- I porten för AArch64-arkitekturen har stöd för följande tillÀgg lagts till:
- SVE2.1 (Scalable Vector Extension 2.1).
- SME2.1 (Scalable Matrix Extension 2.1).
- B16B16 (BFloat16 och BFloat16 för SVE2 och 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-bit minnesadministratörspecifikationer).
- XS (minnesattribut XS).
- Stöd för processorer AArch64 Cortex-A520, Cortex-A720, Cortex-X3 och Cortex-X4 har lagts till.
- I BPF-assemblern har stöd för att separera kommentarer med tecknen "#" och "//" lagts till sÄ att det blir kompatibelt med clang/LLVM, samt anvÀndning av tecknet ";" för att separera uttryck i raden (";" kan inte lÀngre anvÀndas för kommentarer).
KĂ€lla: opennet.ru
