Vydání systémové knihovny Glibc 2.39 a sady nástrojů GNU Binutils 2.42

Po šesti měsících vývoje byl publikován vydání systémové knihovny GNU C Library (glibc) 2.39, která plně vyhovuje požadavkům standardů ISO C11 a POSIX.1-2017. Nová verze obsahuje opravy od 67 vývojářů.

Mezi vylepšeními implementovanými v Glibc 2.39 lze zmínit:

  • Byla zajištěna podpora stínového zásobníku (shadow stack), který byl zaveden v jádře Linux 6.6 a umožňuje blokovat fungování mnoha exploitů pomocí hardwarových možností procesorů Intel pro ochranu před přepisováním návratové adresy z funkce v případě přetečení zásobníku. Podstata ochrany spočívá v tom, že po předání řízení funkci jsou návratové adresy ukládány procesorem nejen v běžném zásobníku, ale také v samostatném 'stínovém' zásobníku, který nelze měnit přímo. Před opuštěním funkce je návratová adresa extrahována ze stínového zásobníku a porovnávána s návratovou adresou z hlavního zásobníku. Neshoda adres vede k vygenerování výjimky, která blokuje situace, kdy se exploitovi podařilo přepsat adresu v hlavním zásobníku. Pro aktivaci byla přidána volba kompilace '--enable-cet'.
  • Byl přidán nový hlavičkový soubor , definovaný v návrhu standardu ISO C2X a zahrnující funkce 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 a stdc_bit_ceil v variantách s typy 'unsigned char', 'unsigned short', 'unsigned int', 'unsigned long int' a 'unsigned long long int'.
  • Pro platformu Linux byly implementovány funkce posix_spawnattr_getcgroup_np a posix_spawnattr_setcgroup_np, stejně jako příznak POSIX_SPAWN_SETCGROUP, které umožňují nastavit cgroupv2 v novém procesu pomocí funkcí posix_spawn a posix_spawnp, a to bez vzniku stavu závodu. Funkce jsou rozšířeními GNU a pro jejich fungování vyžadují jádro Linux s podporou systémového volání clone3.
  • Pro platformu Linux byly implementovány funkce pidfd_spawn a pidfd_spawp, které jsou podobné funkcím posix_spawn, ale vracejí nikoli identifikátor procesu (PID), ale souborový deskriptor pro použití ve funkcích podporujících mechanismus PIDFD, jako je pidfd_send_signal, poll a waitid (PIDFD je svázán s konkrétním procesem a nemění se, zatímco PID může být přidělen jinému procesu po ukončení aktuálního procesu, asociovaného s tímto PID).
  • Pro platformu Linux byla přidána funkce pidfd_getpid pro určení identifikátoru procesu (PID) na základě deskriptoru souboru procesu (PIDFD), který vrací funkce pid_spawn, fork_np a pidfd_open.
  • Do funkce rodiny scanf byl přidán modifikátor velikosti „wN“, který se používá pro argumenty s typy intN_t, int_leastN_t, uintN_t a uint_leastN_t. Například pro čtení desítkových hodnot s typy int32_t a int_least32_t lze uvést „%w32d“, a pro hexadecimální hodnoty „%w32x“. Podobně byl přidán modifikátor „wfN“ pro typy int_fastN_t a uint_fastN_t, které jsou uvedeny v návrhu standardu ISO C2X.
  • Byla přidána nastavení „glibc.cpu.plt_rewrite“, které zahrnuje přepsání PLT (Procedure Linkage Table) na systémech x86-64, při kterém linker nahradí nepřímé skoky (indirect branch) v PLT přímými.
  • Byla přidána nastavení „glibc.mem.decorate_maps“ pro přidání dalších informací o alokaci paměti (například o zásobníku vláken, který vytváří funkce pthread_create, nebo o paměti alokované přes malloc).
  • Ve struktuře „statvfs“ je zajištěno vyplnění pole „f_type“ informacemi o typu FS, které jsou ekvivalentní obsahu pole ve struktuře „statfs“. Dříve v Linuxu bylo v poli „f_type“ vždy zapisováno 0.
  • Pro platformu AArch64 byly přidány anotace do libmvec a math.h, které umožňují při zadávání volby „-ffast-math“ při sestavení používat vektorování volání při sestavení v GCC 9 a novějších verzích kompilátoru. Vektorování se aktivuje pro matematické funkce 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 a tanf.
  • Z sestavy byla odstraněna knihovna libcrypt a její související hlavičkový soubor „“. Vývojářům aplikací se doporučuje přejít na používání alternativních knihoven, jako je libxcrypt.
  • V nástroji ldconfig nyní budou přeskočeny soubory se symbolem ‘;’ v názvu souboru nebo končící na „.dpkg.tmp“ a „.dpkg.new“, což umožní nezpracovávat dočasné soubory správce balíčků rpm a dpkg.
  • Byla ukončena podpora architektury ia64 (ia64*-*-linux-gnu), která se používá v procesorech Intel Itanium.
  • Opraveny zranitelnosti:
    • CVE-2023-6246, CVE-2023-6779, CVE-2023-6780 — kritické zranitelnosti v funkci __vsyslog_internal(), které umožňují manipulací s spuštěním SUID aplikací dosáhnout provedení vlastního kódu s vyššími oprávněními.
    • CVE-2023-4911 — zranitelnost v Glibc ld.so, která umožňuje získat práva root v systému. Zranitelnost je způsobena chybou v kódu pro analýzu řetězce uvedeného v proměnné prostředí GLIBC_TUNABLES a může vést k zápisu analyzované hodnoty mimo vyhrazený buffer. Existují funkční exploit.
    • CVE-2023-4806 — zranitelnost ve funkci getaddrinfo, která je způsobena přístupem k paměti po jejím uvolnění (use-after-free). Problém se projevuje, když NSS plugin implementuje pouze call-back volání „_gethostbyname2_r“ a „_getcanonname_r“, ale nepodporuje volání „_gethostbyname3_r“. Pro zneužití zranitelnosti musí DNS server vrátit pro požadovaný hostitel velké množství adres IPv6 a IPv4, což povede k havárii procesu, který vyvolal funkci getaddrinfo pro rodinu AF_INET6 při nastavení příznaků AI_CANONNAME, AI_ALL a AI_V4MAPPED.
    • CVE-2023-4527 — zranitelnost ve funkci getaddrinfo, která umožňuje číst data z oblasti mimo hranice bufferu při zpracování DNS odpovědi přijaté přes TCP o velikosti větší než 2048 bajtů. Zranitelnost se projevuje při použití možnosti „no-aaaa“ v /etc/resolv.conf.

    Dále lze zmínit vydání sady systémových utilit GNU Binutils 2.42, která zahrnuje programy jako GNU linker, GNU assembler, nm, objdump, strings, strip.

    V nové verzi Binutils:

    • Do assembleru (gas) pro systémy x86-64 byla přidána experimentální možnost „—scfi=experimental“ pro syntézu konstrukcí CFI (Control Flow Integrity) pro ručně psaný assemblerový kód odpovídající System V AMD64 ABI.
    • Do programu readelf byla přidána možnost „—extra-sym-info“ pro výstup rozšířených informací o symbolech („—symbols“), jako je jméno sekce, na kterou se odkazuje index st_shndx.
    • V utilitě objcopy je nyní možné použít v možnosti „—set-section-flags“ hodnotu „large“ pro nastavení sekce příznaku SHF_X86_64_LARGE pro ELF objekty na systémech x86-64. V možnosti „—visualize-jumps“ byla implementována podpora architektury s390.
    • Při disassemblování instrukcí s390 byla implementována možnost zobrazování komentářů k popisu instrukcí. Pro zahrnutí popisů v objdump můžete uvést parametr „-M insndesc“, a v gdb — nastavení „set disassembler-options insndesc.“
    • Do linkeru byly přidány možnosti „-z mark-plt“ a „-z nomark-plt“ pro označování záznamů v PLT tabulce pomocí značek DT_X86_64_PLT, DT_X86_64_PLTSZ a DT_X86_64_PLTENT.
    • V linkeru byla přidána podpora pro řazení v opačném pořadí.
    • Byly přidány možnosti „—warn-execstack-objects“, „—error-execstack“ a „—error-rxw-segments“ pro výstup varování nebo chyb při použití v objektech vykonavatelných zásobníků.
    • Byla implementována podpora ABI 2.30 architektury LoongArch a také podpora nových instrukcí definovaných ve specifikaci LoongArch 1.10.
    • Byla přidána podpora instruktážního souboru KVX, používaného v procesorech Kalray (například se používá v SoC Coolidge).
    • Pro systémy založené na architektuře Intel byla přidána podpora rozšíření:
      • Intel APX: 32 GPRs, NDD, PUSH2/POP2, PUSHP/POPP.
      • USER_MSR.
      • AVX10.1.
      • PBNDKB.
      • SM4.
      • SM3.
      • SHA512.
      • AVX-VNNI-INT16.
    • Do portu pro architekturu RISC-V byla přidána podpora rozšíření:
      • T-Head (XTheadVector, XTheadZvlsseg a XTheadZvamo).
      • CORE-V (XCVmac, XCValu).
      • SiFive VCIX (XSfVcp).
    • Do portu pro architekturu AArch64 byla přidána podpora rozšíření:
      • SVE2.1 (Scalable Vector Extension 2.1).
      • SME2.1 (Scalable Matrix Extension 2.1).
      • B16B16 (BFloat16 a BFloat16 pro SVE2 a SME2).
      • RASv2 (spolehlivost, dostupnost a servisovatelnost v2).
      • LSE128 (128bitové atomické).
      • GCS (chráněný ovládací zásobník).
      • CHK (kontrolní stav funkce).
      • SPECRES2 (vylepšené omezení spekulace).
      • LRCPC3 (Load-Acquire RCpc).
      • THE (tvrdá překlad).
      • ITE (sledování instrukcí).
      • D128 (128bitové popisy tabulek paměti).
      • XS (atribut paměti XS).
    • Byla přidána podpora procesorů AArch64 Cortex-A520, Cortex-A720, Cortex-X3 a Cortex-X4.
    • Do assembleru BPF byla přidána podpora oddělení komentářů pomocí znaků „#“ a „//“ pro kompatibilitu s assemblerem clang/LLVM, stejně jako použití symbolu „;“ pro oddělení výrazů v řetězci (znak „;“ již nelze používat pro komentáře).

    Zdroj: opennet.ru

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster