Efter seks måneders udvikling er GNU C Library (glibc) 2.39 systembiblioteket blevet frigivet, som fuldt ud overholder kravene i ISO C11 og POSIX.1-2017 standarderne. Den nye udgivelse indeholder rettelser fra 67 udviklere.
Nogle af forbedringerne implementeret i Glibc 2.39 inkluderer:
- Der er blevet ydet understøttelse af skyggestakken, der blev introduceret i kernen. Linux 6.6, som blokerer mange exploits ved at udnytte Intel-processorernes hardwarefunktioner til at beskytte mod overskrivning af returadressen fra en funktion i tilfælde af et stakbufferoverløb. Denne beskyttelse fungerer ved at lagre returadresser ikke kun på den almindelige stak, men også på en separat "skygge"-stak, som ikke kan ændres direkte, efter at kontrollen er overført til en funktion. Før funktionen afsluttes, udtages returadressen fra skyggestakken og sammenlignes med returadressen fra hovedstakken. En uoverensstemmelse i adresserne genererer en undtagelse, der blokerer situationer, hvor en exploit har formået at overskrive en adresse på hovedstakken. Byggeindstillingen "--enable-cet" er blevet tilføjet for at aktivere denne beskyttelse.
- Tilføjet ny header-fil , defineret i udkastet til ISO C2X-standarden og inkluderer funktionerne stdc_leading_zeros, stdc_leading_ones, stdc_trailing_zeros, stdc_trailing_ones, stdc_first_leading_zero, stdc_first_leading_one, stdc_first_trailing_zeros, stdc_first_trailing_zerd c_count_ones, s_single_bit, stdc_bit_width, stdc_bit_floor og stdc_bit_ceil i varianter med typerne "unsigned char", "unsigned" short”, "unsigned int", "unsigned long int" og "unsigned long long int".
- Til platform Linux Funktionerne posix_spawnattr_getcgroup_np og posix_spawnattr_setcgroup_np, såvel som POSIX_SPAWN_SETCGROUP-flaget, er blevet implementeret. Disse tillader at sætte cgroupv2 i en ny proces ved hjælp af funktionerne posix_spawn og posix_spawnp, hvilket eliminerer kapløbsbetingelser. Disse funktioner er GNU-udvidelser og kræver kernen for at fungere. Linux med clone3 systemopkaldssupport.
- Til platform Linux Funktionerne pidfd_spawn og pidfd_spawp er blevet implementeret, og de minder semantisk om posix_spawn-funktionen, men returnerer ikke en procesidentifikator (PID), men en filbeskrivelse til brug i funktioner, der understøtter PIDFD-mekanismen, såsom pidfd_send_signal, poll og waitid (en PIDFD er knyttet til en specifik proces og ændrer sig ikke, mens en PID kan knyttes til en anden proces, efter at den aktuelle proces, der er knyttet til denne PID, er afsluttet).
- Til platform Linux Tilføjet pidfd_getpid-funktionen til at bestemme proces-id'et (PID) baseret på procesfilbeskrivelsen (PIDFD) returneret af pid_spawn-, fork_np- og pidfd_open-funktionerne.
- Tilføjede en størrelsesmodifikator "wN" til scanf-familien af funktioner, brugt til argumenter af typerne intN_t, int_leastN_t, uintN_t og uint_leastN_t. For eksempel, for at læse decimalværdier med typerne int32_t og int_least32_t, kan du angive "%w32d", og hexadecimale værdier kan angives som "%w32x". Tilsvarende er "wfN"-modifikatoren blevet tilføjet til typerne int_fastN_t og uint_fastN_t, der er introduceret i udkastet til ISO C2X-standarden.
- Tilføjet "glibc.cpu.plt_rewrite" indstillingen, som gør det muligt at omskrive PLT (Procedure Linkage Table) på x86-64 systemer, hvor linkeren vil erstatte indirekte grene i PLT med direkte.
- Tilføjet "glibc.mem.decorate_maps" indstilling for at tilføje yderligere hukommelsesallokeringsoplysninger (såsom trådstakken oprettet af pthread_create eller hukommelse allokeret via malloc).
- Strukturen "statvfs" udfylder nu feltet "f_type" med information om filsystemtypen, svarende til indholdet af feltet i strukturen "statfs". Tidligere, Linux Feltet "f_type" indeholdt altid 0.
- Til AArch64-platformen er der tilføjet annoteringer til libmvec og math.h, der tillader, når man specificerer "-ffast-math"-muligheden ved opbygning, at bruge opkaldsvektorering, når man bygger i GCC 9 og nyere versioner af compileren. Vektorisering er aktiveret for matematiske funktioner 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 og tanf.
- Libcrypt-biblioteket og den tilhørende header-fil er blevet fjernet fra pakken " " Applikationsudviklere opfordres til at skifte til alternative biblioteker såsom libxcrypt.
- ldconfig-værktøjet springer nu filer over med tegnet ';'. i filnavnet eller slutter med ".dpkg.tmp" og ".dpkg.new", hvilket giver dig mulighed for at undgå at behandle midlertidige filer af rpm- og dpkg-pakkeadministratorerne.
- Understøttelse af ia64-arkitekturen (ia64*-*-linux-gnu), der bruges i Intel Itanium-processorer, er afbrudt.
- Sårbarheder rettet:
- CVE-2023-6246, CVE-2023-6779, CVE-2023-6780 er kritiske sårbarheder i __vsyslog_internal()-funktionen, som gør det muligt at udføre kode med forhøjede rettigheder gennem manipulationer med lanceringen af SUID-applikationer.
- CVE-2023-4911 er en sårbarhed i Glibc ld.so, der giver dig mulighed for at få root-rettigheder på systemet. Sårbarheden skyldes en fejl i strengparsingkoden, der er angivet i miljøvariablen GLIBC_TUNABLES, hvilket kan resultere i, at den parsede værdi bliver skrevet uden for grænserne i den tildelte buffer. Der er arbejdende bedrifter.
- CVE-2023-4806 er en use-after-free sårbarhed i getaddriinfo-funktionen. Problemet opstår, når NSS-pluginnet kun implementerer "_gethostbyname2_r" og "_getcanonname_r"-tilbagekaldene, men ikke understøtter "_gethostbyname3_r"-kaldet. For at udnytte sårbarheden skal DNS-serveren returnere et stort antal IPv6- og IPv4-adresser til den anmodede vært, hvilket vil føre til nedbrud af den proces, der kaldte getaddriinfo-funktionen for AF_INET6-familien, når flagene AI_CANONNAME, AI_ALL og AI_V4MAPPED er sæt.
- CVE-2023-4527 er en sårbarhed i getaddriinfo-funktionen, der gør det muligt at læse data fra et område uden for buffergrænsen, når der behandles et DNS-svar modtaget over TCP, der er større end 2048 bytes. Sårbarheden opstår, når du bruger "no-aaaa"-indstillingen i /etc/resolv.conf.
Derudover kan vi bemærke udgivelsen af et sæt systemværktøjer GNU Binutils 2.42, som inkluderer programmer som GNU linker, GNU assembler, nm, objdump, strenge, strip.
I den nye version af Binutils:
- En eksperimentel mulighed "--scfi=eksperimentel" er blevet tilføjet til assembler (gas) for x86-64-systemer for at syntetisere CFI (Control Flow Integrity)-konstruktioner til håndskrevet samlingskode svarende til System V AMD64 ABI.
- Tilføjet "--extra-sym-info"-mulighed til readelf for at vise udvidet information om symboler ("-symboler"), såsom navnet på den sektion, der refereres til af st_shndx-indekset.
- Objcopy-værktøjet giver mulighed for at bruge "--set-section-flags"-indstillingen med "large"-værdien til at indstille SHF_X86_64_LARGE-flagsektionen for ELF-objekter på x86-64-systemer. Muligheden "--visualize-jumps" implementerer understøttelse af s390-arkitekturen.
- Ved adskillelse af s390 instruktioner er muligheden for at vise kommentarer i beskrivelsen af instruktioner implementeret. For at aktivere beskrivelser kan du angive "-M insndesc"-indstillingen i objdump og "set disassembler-options insndesc"-indstillingen i gdb.
- Tilføjede "-z mark-plt" og "-z nomark-plt" muligheder til linkeren for at markere poster i PLT-tabellen ved hjælp af DT_X86_64_PLT, DT_X86_64_PLTSZ og DT_X86_64_PLTENT tags.
- Tilføjet støtte til omvendt sortering til linkeren.
- Tilføjet "--warn-execstack-objects", "--error-execstack" og "--error-rxw-segments" muligheder for at udlæse advarsler eller fejl, når de bruges på eksekverbare stakobjekter.
- Understøttelse af ABI 2.30 af LoongArch-arkitekturen er blevet implementeret, samt understøttelse af nye instruktioner defineret i LoongArch 1.10-specifikationen.
- Tilføjet understøttelse af KVX-instruktionssættet, der bruges i Kalray-processorer (for eksempel brugt i SoC Coolidge).
- For systemer baseret på Intel-arkitektur er der tilføjet understøttelse af udvidelser:
- Intel APX: 32 GPR'er, NDD, PUSH2/POP2, PUSHP/POPP.
- USER_MSR.
- AVX10.1.
- PBNDKB.
- SM4.
- SM3.
- SHA512.
- AVX-VNNI-INT16.
- Understøttelse af udvidelser er blevet tilføjet til RISC-V-arkitekturporten:
- T-Head (XTheadVector, XTheadZvlsseg og XTheadZvamo).
- CORE-V (XCVmac, XCValu).
- SiFive VCIX (XSfVcp).
- Understøttelse af udvidelser er blevet tilføjet til porten for AArch64-arkitekturen:
- SVE2.1 (Scalable Vector Extension 2.1).
- SME2.1 (Scalable Matrix Extension 2.1).
- B16B16 (BFloat16 og BFloat16 for SVE2 og SME2).
- RASv2 (Reliability, Availability and Serviceability v2).
- LSE128 (128-bit Atomic).
- GCS (Guarded Control Stac).
- CHK (Kontroller funktionsstatus).
- SPECRES2 (Enhanced Speculation Restriction).
- LRCPC3 (Load-Acquire RCpc).
- THE (Oversættelseshærdning).
- ITE (Instruction Trace).
- D128 (128-bit hukommelsessidetabelbeskrivelser).
- XS (XS-hukommelsesattribut).
- Tilføjet understøttelse af AArch64 Cortex-A520, Cortex-A720, Cortex-X3 og Cortex-X4-processorer.
- For kompatibilitet med clang/LLVM assembleren har BPF assembleren tilføjet understøttelse til at adskille kommentarer med symbolerne "#" og "//", samt bruge symbolet ";" at adskille udtryk inden for en linje (";" kan ikke længere bruges til kommentarer).
Kilde: opennet.ru
