Na zes maanden ontwikkeling is de release van de GNU C Library (glibc) 2.39 gepubliceerd, die volledig voldoet aan de eisen van de ISO C11 en POSIX.1-2017 normen. In deze nieuwe release zijn correcties opgenomen van 67 ontwikkelaars.
Enkele verbeteringen die in Glibc 2.39 zijn doorgevoerd zijn:
- Ondersteuning voor de shadow stack is toegevoegd, die is geïntroduceerd in de Linux-kernel 6.6 en veel exploits kan blokkeren door gebruik te maken van de hardwaremogelijkheden van Intel-processors ter bescherming tegen overschrijving van het retouradres uit een functie in het geval van een buffer overflow op de stack. Het principe van de bescherming is dat na het overdragen van de controle aan de functie, de retouradressen door de processor niet alleen in de gewone stack worden opgeslagen, maar ook in een aparte "shadow" stack, die niet direct kan worden gewijzigd. Voordat de controle weer terug naar de functie gaat, wordt het retouradres uit de schaduwstack gehaald en vergeleken met het retouradres uit de hoofstack. Een mismatch van de adressen leidt tot de generatie van een uitzondering, die situaties blokkeert waarbij de exploit erin is geslaagd het adres op de hoofstack te overschrijven. Een nieuwe bouwoptie "—enable-cet" is toegevoegd voor inschakeling.
- Een nieuwe headerfile <stdbit.h> is toegevoegd, vastgesteld in de conceptnorm van ISO C2X en bevat functies zoals 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 en stdc_bit_ceil in varianten met de typen "unsigned char", "unsigned short", "unsigned int", "unsigned long int" en "unsigned long long int".
- Voor het Linux-platform zijn de functies posix_spawnattr_getcgroup_np en posix_spawnattr_setcgroup_np, evenals de vlag POSIX_SPAWN_SETCGROUP geïmplementeerd, die het mogelijk maken om cgroupv2 in een nieuw proces in te stellen met behulp van de functies posix_spawn en posix_spawnp, waardoor de kans op een raceconditie wordt uitgesloten. Deze functies zijn GNU-uitbreidingen en vereisen een Linux-kernel met ondersteuning voor de systeemaanroep clone3.
- Voor het Linux-platform zijn de functies pidfd_spawn en pidfd_spawp geïmplementeerd, die semantisch dicht bij de functie posix_spawn liggen, maar in plaats van een procesidentificatienummer (PID) een bestandsdescriptor retourneren voor gebruik in functies die het PIDFD-mechanisme ondersteunen, zoals pidfd_send_signal, poll en waitid (PIDFD is aan een specifiek proces gekoppeld en verandert niet, terwijl de PID aan een ander proces kan worden gekoppeld na de beëindiging van het huidige proces dat met deze PID is geassocieerd).
- Voor het Linux-platform is de functie pidfd_getpid toegevoegd om de procesidentificatienummer (PID) te bepalen op basis van de procesbestandsdescriptor (PIDFD) die door de functies pid_spawn, fork_np en pidfd_open is geretourneerd.
- In de scanf-functiefamilie is een grootte-modifier «wN» toegevoegd, die wordt toegepast op argumenten van de types intN_t, int_leastN_t, uintN_t en uint_leastN_t. Bijvoorbeeld, voor het lezen van decimale waarden met de types int32_t en int_least32_t kan «%w32d» worden opgegeven, en voor hexadecimale waarden «%w32x». Evenzo is de modifier «wfN» toegevoegd voor de types int_fastN_t en uint_fastN_t, zoals gepresenteerd in de voorlopige standaard ISO C2X.
- Een instelling «glibc.cpu.plt_rewrite» is toegevoegd, waarmee de PLT (Procedure Linkage Table) op x86-64-systemen wordt herschreven, waarbij de linker indirecte sprongen in de PLT vervangt door directe sprongen.
- Een instelling «glibc.mem.decorate_maps» is toegevoegd om extra informatie over geheugenallocatie toe te voegen (bijvoorbeeld over de threadstack die door de functie pthread_create is aangemaakt, of het geheugen dat via malloc is toegewezen).
- In de structuur «statvfs» is de vulling van het veld «f_type» voorzien van informatie over het type bestandssysteem, gelijkwaardig aan de inhoud van het veld in de structuur «statfs». Eerder werd in Linux altijd 0 in het veld «f_type» geschreven.
- Voor het AArch64-platform zijn annotaties in libmvec en math.h toegevoegd om bij het opgeven van de compilatie-optie «-ffast-math» vectorisatie van aanroepen bij compilatie in GCC 9 en nieuwere versies van de compiler mogelijk te maken. Vectorisatie is ingeschakeld voor de wiskundige functies 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 en tanf.
- De bibliotheek libcrypt en het bijbehorende headerbestand «» zijn uit het pakket verwijderd. Applicatieontwikkelaars wordt aanbevolen over te stappen op alternatieve bibliotheken, zoals libxcrypt.
- In de ldconfig-tool worden nu bestanden met het symbool ‘;’ in de bestandsnaam of eindigend op «.dpkg.tmp» en «.dpkg.new» overgeslagen, waardoor tijdelijke bestanden van de pakketbeheerders rpm en dpkg niet worden verwerkt.
- De ondersteuning voor de ia64-architectuur (ia64*-*-linux-gnu), gebruikt in Intel Itanium-processors, is beëindigd.
- Kwetsbaarheden opgelost:
- CVE-2023-6246, CVE-2023-6779, CVE-2023-6780 — kritieke kwetsbaarheden in de functie __vsyslog_internal(), waardoor door manipulatie van de uitvoer van SUID-toepassingen code met verhoogde privileges kan worden uitgevoerd.
- CVE-2023-4911 — een kwetsbaarheid in Glibc ld.so die root-rechten in het systeem kan verkrijgen. De kwetsbaarheid wordt veroorzaakt door een fout in de parsing van de string die is opgegeven in de omgevingsvariabele GLIBC_TUNABLES, en kan leiden tot het overschrijven van de geparsed waarde buiten de toegewezen buffer. Er zijn werkende exploits beschikbaar.
- CVE-2023-4806 — een kwetsbaarheid in de functie getaddrinfo, veroorzaakt door geheugen-toegang na vrijgave (use-after-free). Het probleem doet zich voor wanneer de NSS-plug-in alleen de callback-aanroepen «_gethostbyname2_r» en «_getcanonname_r» implementeert, maar de aanroep «_gethostbyname3_r» niet ondersteunt. Voor exploitatie van de kwetsbaarheid moet de DNS-server een groot aantal IPv6- en IPv4-adressen voor de opgevraagde host teruggeven, wat leidt tot een crash van het proces dat de functie getaddrinfo aanroept voor de AF_INET6-familie met de vlaggen AI_CANONNAME, AI_ALL en AI_V4MAPPED.
- CVE-2023-4527 — een kwetsbaarheid in de functie getaddrinfo die het mogelijk maakt gegevens uit het gebied buiten de buffer te lezen bij het verwerken van een DNS-antwoord dat via TCP is ontvangen en groter is dan 2048 bytes. De kwetsbaarheid doet zich voor bij het gebruik van de optie «no-aaaa» in /etc/resolv.conf.
Daarnaast kan worden opgemerkt dat de release van de verzameling GNU Binutils 2.42-systeemsoftware heeft plaatsgevonden, die programma's bevat zoals GNU linker, GNU assembler, nm, objdump, strings en strip.
In de nieuwe versie van Binutils:
- In de assembler (gas) voor x86-64-systemen is een experimentele optie «—scfi=experimental» toegevoegd voor de synthese van CFI (Control Flow Integrity)-constructies voor handmatig geschreven assembleercode die voldoet aan de System V AMD64 ABI.
- In het programma readelf is de optie «—extra-sym-info» toegevoegd voor het weergeven van uitgebreide informatie over symbolen («—symbols»), zoals de naam van de sectie waarop de index st_shndx verwijst.
- In de utiliteit objcopy is het mogelijk gemaakt om de optie «—set-section-flags» te gebruiken met de waarde «large» om de sectie-vlag SHF_X86_64_LARGE voor ELF-objecten op x86-64-systemen in te stellen. In de optie «—visualize-jumps» is ondersteuning voor de architectuur s390 geïmplementeerd.
- Bij het disassembleren van s390-instructies is de mogelijkheid geïmplementeerd om opmerkingen in de instructiebeschrijvingen weer te geven. Om beschrijvingen in objdump op te nemen, kan de parameter «-M insndesc» worden opgegeven, en in gdb de instelling «set disassembler-options insndesc».
- Aan de linkers zijn de opties «-z mark-plt» en «-z nomark-plt» toegevoegd voor het markeren van records in de PLT-tabel, met gebruik van de tags DT_X86_64_PLT, DT_X86_64_PLTSZ en DT_X86_64_PLTENT.
- De linker ondersteunt nu ook sorteren in omgekeerde volgorde.
- Er zijn opties «—warn-execstack-objects», «—error-execstack» en «—error-rxw-segments» toegevoegd voor het weergeven van waarschuwingen of fouten bij het gebruik in uitvoerbare stackobjecten.
- Ondersteuning voor ABI 2.30 van de LoongArch-architectuur is geïmplementeerd, evenals ondersteuning voor nieuwe instructies gedefinieerd in de LoongArch 1.10-specificatie.
- Ondersteuning voor de KVX-instructieset, gebruikt in Kalray-processors (bijvoorbeeld toegepast in SoC Coolidge), is toegevoegd.
- Voor systemen gebaseerd op de Intel-architectuur is ondersteuning voor de volgende uitbreidingen toegevoegd:
- Intel APX: 32 GPR's, NDD, PUSH2/POP2, PUSHP/POPP.
- USER_MSR.
- AVX10.1.
- PBNDKB.
- SM4.
- SM3.
- SHA512.
- AVX-VNNI-INT16.
- In de RISC-V-poort is ondersteuning voor de volgende uitbreidingen toegevoegd:
- T-Head (XTheadVector, XTheadZvlsseg en XTheadZvamo).
- CORE-V (XCVmac, XCValu).
- SiFive VCIX (XSfVcp).
- In de AArch64-poort is ondersteuning voor de volgende uitbreidingen toegevoegd:
- SVE2.1 (Scalable Vector Extension 2.1).
- SME2.1 (Scalable Matrix Extension 2.1).
- B16B16 (BFloat16 en BFloat16 voor SVE2 en SME2).
- RASv2 (Betrouwbaarheid, Beschikbaarheid enOndersteunbaarheid v2).
- LSE128 (128-bits Atomisch).
- GCS (Beveiligde Controle Stack).
- CHK (Controleer Kenmerkstatus).
- SPECRES2 (Verbeterde Speculatiebeperkingen).
- LRCPC3 (Laad-Verkrijg RCpc).
- THE (Vertaalhardening).
- ITE (Instructie Trace).
- D128 (128-bits descriptors voor geheugenpagina's).
- XS (geheugenkenmerk XS).
- Ondersteuning voor AArch64-processoren Cortex-A520, Cortex-A720, Cortex-X3 en Cortex-X4 is toegevoegd.
- In de BPF-assembler is voor compatibiliteit met de clang/LLVM-assembler ondersteuning toegevoegd voor het scheiden van opmerkingen met de symbolen «#» en «//», evenals het gebruik van het symbool «;» voor het scheiden van uitdrukkingen in een regel (de «;» kan niet meer voor opmerkingen worden gebruikt).
Bron: opennet.ru
