Rilascio della libreria di sistema Glibc 2.39 e del pacchetto di utilità GNU Binutils 2.42

Dopo sei mesi di sviluppo è stato pubblicato il rilascio della libreria di sistema GNU C Library (glibc) 2.39, che segue completamente i requisiti degli standard ISO C11 e POSIX.1-2017. Questa nuova versione include correzioni da parte di 67 sviluppatori.

Tra i miglioramenti realizzati in Glibc 2.39 si possono notare:

  • È stato implementato il supporto per lo stack ombra (shadow stack), introdotto nel kernel Linux 6.6, che consente di bloccare molte vulnerabilità sfruttando le capacità hardware dei processori Intel per proteggere dalla sovrascrittura dell'indirizzo di ritorno della funzione in caso di overflow del buffer nello stack. L'essenza della protezione è che, dopo aver passato il controllo alla funzione, gli indirizzi di ritorno vengono salvati dal processore non solo nel normale stack, ma anche in un "stack ombra" separato, che non può essere modificato direttamente. Prima di uscire dalla funzione, l'indirizzo di ritorno viene estratto dallo stack ombra e confrontato con l'indirizzo di ritorno dello stack principale. La non corrispondenza degli indirizzi porta alla generazione di un'eccezione, bloccando situazioni in cui l'exploit è riuscito a sovrascrivere l'indirizzo nello stack principale. È stata aggiunta un'opzione di compilazione per attivarlo: "—enable-cet".
  • È stato aggiunto un nuovo file di intestazione , definito nella bozza dello standard ISO C2X, che include le funzioni 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 e stdc_bit_ceil per i tipi "unsigned char", "unsigned short", "unsigned int", "unsigned long int" e "unsigned long long int".
  • Per la piattaforma Linux sono state implementate le funzioni posix_spawnattr_getcgroup_np e posix_spawnattr_setcgroup_np, così come il flag POSIX_SPAWN_SETCGROUP, che permettono di configurare cgroupv2 nel nuovo processo utilizzando le funzioni posix_spawn e posix_spawnp, escludendo la possibilità di condizioni di gara. Queste funzioni sono estensioni GNU e richiedono un kernel Linux con supporto per la chiamata di sistema clone3.
  • Per la piattaforma Linux sono state implementate le funzioni pidfd_spawn e pidfd_spawp, che sono simili semanticamente alla funzione posix_spawn, ma restituiscono non un identificatore di processo (PID), bensì un descrittore di file da utilizzare in funzioni che supportano il meccanismo PIDFD, come pidfd_send_signal, poll e waitid (PIDFD è collegato a un processo specifico e non cambia, mentre il PID può essere collegato a un altro processo dopo il completamento del processo attuale associato a questo PID).
  • Per la piattaforma Linux è stata aggiunta la funzione pidfd_getpid per determinare l'identificatore di processo (PID) basato sul descrittore di file di processo (PIDFD) restituito dalle funzioni pid_spawn, fork_np e pidfd_open.
  • Nella funzione della famiglia scanf è stato aggiunto il modificatore di dimensione «wN», applicabile agli argomenti di tipi intN_t, int_leastN_t, uintN_t e uint_leastN_t. Ad esempio, per leggere valori decimali con i tipi int32_t e int_least32_t si può specificare «%w32d», mentre per i valori esadecimali si può usare «%w32x». Analogamente, è stato aggiunto il modificatore «wfN» per i tipi int_fastN_t e uint_fastN_t, presentati nella bozza di standard ISO C2X.
  • È stata aggiunta l'opzione «glibc.cpu.plt_rewrite», che abilita la riscrittura della PLT (Procedure Linkage Table) sui sistemi x86-64, in cui il linker sostituirà i salti indiretti (indirect branch) nella PLT con salti diretti.
  • È stata aggiunta l'opzione «glibc.mem.decorate_maps» per aggiungere informazioni aggiuntive sull'allocazione della memoria (ad esempio, sullo stack dei thread creato dalla funzione pthread_create o sulla memoria allocata tramite malloc).
  • Nella struttura «statvfs» è stato garantito il riempimento del campo «f_type» con informazioni sul tipo di FS, equivalente al contenuto del campo nella struttura «statfs». In precedenza, in Linux, nel campo «f_type» veniva sempre registrato 0.
  • Per la piattaforma AArch64, in libmvec e math.h sono state aggiunte annotazioni che consentono di utilizzare la vettorizzazione delle chiamate durante la compilazione con l'opzione «-ffast-math» in GCC 9 e nelle versioni più recenti del compilatore. La vettorizzazione è abilitata per le funzioni matematiche 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 e tanf.
  • È stata rimossa dalla composizione la libreria libcrypt e il corrispondente file header «». Si consiglia agli sviluppatori di applicazioni di passare all'uso di librerie alternative, come libxcrypt.
  • Nell'utilità ldconfig ora vengono ignorati i file con il carattere ‘;’ nel nome del file o che terminano con «.dpkg.tmp» e «.dpkg.new», il che consente di non elaborare i file temporanei dei gestori pacchetti rpm e dpkg.
  • È stata sospesa la supporto per l'architettura ia64 (ia64*-*-linux-gnu), utilizzata nei processori Intel Itanium.
  • Sono state risolte le vulnerabilità:
    • CVE-2023-6246, CVE-2023-6779, CVE-2023-6780 — vulnerabilità critiche nella funzione __vsyslog_internal(), che consentono, attraverso manipolazioni nell'avvio di applicazioni SUID, di eseguire codice con privilegi elevati.
    • CVE-2023-4911 — vulnerabilità in Glibc ld.so che consente di ottenere diritti root nel sistema. La vulnerabilità è causata da un errore nel codice di analisi della stringa specificata nella variabile d'ambiente GLIBC_TUNABLES, e può portare a una scrittura del valore analizzato oltre il buffer allocato. Sono disponibili exploit funzionanti.
    • CVE-2023-4806 — vulnerabilità nella funzione getaddrinfo, causata da un accesso alla memoria dopo che è stata liberata (use-after-free). Il problema si manifesta quando il plugin NSS implementa solo chiamate di callback «_gethostbyname2_r» e «_getcanonname_r», ma non supporta la chiamata «_gethostbyname3_r». Per sfruttare la vulnerabilità, il server DNS deve restituire un numero elevato di indirizzi IPv6 e IPv4 per l'host richiesto, il che porterà al crash del processo che ha chiamato la funzione getaddrinfo per la famiglia AF_INET6 quando vengono impostati i flag AI_CANONNAME, AI_ALL e AI_V4MAPPED.
    • CVE-2023-4527 — vulnerabilità nella funzione getaddrinfo, che consente di leggere dati da un'area al di fuori dei limiti del buffer durante l'elaborazione della risposta DNS ricevuta via TCP, di dimensioni superiori a 2048 byte. La vulnerabilità si manifesta quando si utilizza l'opzione «no-aaaa» in /etc/resolv.conf.

    Inoltre, si segnala il rilascio della suite di utilità di sistema GNU Binutils 2.42, che include programmi come GNU linker, GNU assembler, nm, objdump, strings, strip.

    Nella nuova versione di Binutils:

    • Nell'assemblatore (gas) per sistemi x86-64 è stata aggiunta un'opzione sperimentale «—scfi=experimental» per la sintesi delle strutture CFI (Control Flow Integrity) per codice assembly scritto a mano, conforme all'ABI AMD64 di System V.
    • Nell'applicazione readelf è stata aggiunta l'opzione «—extra-sym-info» per visualizzare informazioni estese sui simboli («—symbols»), come il nome della sezione a cui si riferisce l'indice st_shndx.
    • Nell'utilità objcopy è stata fornita la possibilità di utilizzare nell'opzione «—set-section-flags» il valore «large» per impostare il flag di sezione SHF_X86_64_LARGE per gli oggetti ELF sui sistemi x86-64. Nell'opzione «—visualize-jumps» è stata implementata la supporto per l'architettura s390.
    • Durante la disassemblazione delle istruzioni s390 è stata implementata la possibilità di visualizzare i commenti nella descrizione delle istruzioni. Per includere le descrizioni in objdump, è possibile specificare il parametro "-M insndesc", mentre in gdb si utilizza l'impostazione "set disassembler-options insndesc".
    • Sono state aggiunte al linker le opzioni "-z mark-plt" e "-z nomark-plt" per contrassegnare le voci nella tabella PLT utilizzando i tag DT_X86_64_PLT, DT_X86_64_PLTSZ e DT_X86_64_PLTENT.
    • Il linker ha aggiunto il supporto per l'ordinamento in ordine inverso.
    • Sono state aggiunte le opzioni "—warn-execstack-objects", "—error-execstack" e "—error-rxw-segments" per la visualizzazione di avvertenze o errori quando si utilizza nei file oggetto dello stack eseguibile.
    • È stato implementato il supporto per l'ABI 2.30 dell'architettura LoongArch, così come il supporto per le nuove istruzioni definite nella specifica LoongArch 1.10.
    • È stato aggiunto il supporto per il set di istruzioni KVX, utilizzato nei processori Kalray (ad esempio, utilizzato nel SoC Coolidge).
    • Per i sistemi basati sull'architettura Intel è stato aggiunto il supporto per le estensioni:
      • Intel APX: 32 GPR, NDD, PUSH2/POP2, PUSHP/POPP.
      • USER_MSR.
      • AVX10.1.
      • PBNDKB.
      • SM4.
      • SM3.
      • SHA512.
      • AVX-VNNI-INT16.
    • Nel porting per l'architettura RISC-V è stato aggiunto il supporto per le estensioni:
      • T-Head (XTheadVector, XTheadZvlsseg e XTheadZvamo).
      • CORE-V (XCVmac, XCValu).
      • SiFive VCIX (XSfVcp).
    • Nel porting per l'architettura AArch64 è stato aggiunto il supporto per le estensioni:
      • SVE2.1 (Scalable Vector Extension 2.1).
      • SME2.1 (Scalable Matrix Extension 2.1).
      • B16B16 (BFloat16 e BFloat16 per SVE2 e SME2).
      • RASv2 (Reliability, Availability and Serviceability v2).
      • LSE128 (Atomic a 128 bit).
      • GCS (Guarded Control Stac).
      • CHK (Controlla lo stato delle funzionalità).
      • SPECRES2 (Restrizione potenziata della speculazione).
      • LRCPC3 (Load-Acquire RCpc).
      • THE (Indurimento della traduzione).
      • ITE (Tracciamento delle istruzioni).
      • D128 (Descrittori delle tabelle delle pagine di memoria a 128 bit).
      • XS (Attributo di memoria XS).
    • È stato aggiunto il supporto per i processori AArch64 Cortex-A520, Cortex-A720, Cortex-X3 e Cortex-X4.
    • Nel montatore BPF, per la compatibilità con il montatore clang/LLVM, è stato aggiunto il supporto per separare i commenti con i simboli "#" e "//", oltre all'uso del simbolo ";" per separare le espressioni nella riga (";" non può più essere utilizzato per i commenti).

    Fonte: opennet.ru

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster