Pas pas gjashtë muajsh zhvillimi u publikua versioni i bibliotekës sistemore GNU C Library (glibc) 2.39, i cili plotëson tërësisht kërkesat e standardeve ISO C11 dhe POSIX.1-2017. Në këtë version të ri janë përfshirë rregullime nga 67 zhvillues.
Nga përmirësimet e realizuara në Glibc 2.39 mund të veçojmë:
- U siguruar mbĂ«shtetje pĂ«r stakun e hijes (shadow stack), i cili u shfaq nĂ« bĂ«rthamĂ«n Linux 6.6 dhe lejon bllokimin e funksionimit tĂ« shumĂ« eksploiteve, duke pĂ«rdorur kapacitetet harduerike tĂ« procesorĂ«ve Intel pĂ«r mbrojtjen nga ri-shkruarja e adresĂ«s sĂ« rikthimit nga funksioni nĂ« rast tĂ« mbushjes sĂ« tamponit nĂ« shĂ«nim. Thelbi i mbrojtjes Ă«shtĂ« se pasi kontrolli kalon nĂ« funksionin, adresat e rikthimit ruhten nga procesori jo vetĂ«m nĂ« shĂ«nimin e zakonshĂ«m, por edhe nĂ« njĂ« âstak tĂ« hijesâ tĂ« veçantĂ«, e cila nuk mund tĂ« ndryshohet drejtpĂ«rdrejt. Para daljes nga funksioni, adresa e rikthimit nxirret nga staku i hijes dhe kontrollohet me adresĂ«n e rikthimit nga staku kryesor. MospĂ«rputhja e adresave çon nĂ« gjenerimin e njĂ« pĂ«rjashtimi, duke bllokuar situatat kur njĂ« eksploit ka arritur tĂ« ri-shkruajĂ« adresĂ«n nĂ« stakun kryesor. PĂ«r aktivizim Ă«shtĂ« shtuar opsioni pĂ«r ndĂ«rtim «--enable-cet».
- ĂshtĂ« shtuar njĂ« skedar i ri tituj <stdbit.h>, i pĂ«rcaktuar nĂ« draftin e standardit ISO C2X dhe qĂ« pĂ«rmban funksionet 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 dhe stdc_bit_ceil nĂ« variante me tipe «unsigned char», «unsigned short», «unsigned int», «unsigned long int» dhe «unsigned long long int».
- Për platformën Linux janë realizuar funksionet posix_spawnattr_getcgroup_np dhe posix_spawnattr_setcgroup_np, si dhe flag POSIX_SPAWN_SETCGROUP, të cilat lejojnë rregullimin e cgroupv2 në një proces të ri përmes funksioneve posix_spawn dhe posix_spawnp, duke eliminuar shkaktimin e gjendjeve të garës. Funksionet janë zgjerime GNU dhe kërkojnë një bërthamë Linux me mbështetje për thirrjen sistemore clone3.
- Për platformën Linux janë realizuar funksionet pidfd_spawn dhe pidfd_spawn, të cilat janë afër në semantikë me funksionin posix_spawn, por kthejnë jo një identifikues procesi (PID), por një deshkrim të skedarit për përdorim në funksionet që mbështesin mekanizmin PIDFD, si pidfd_send_signal, poll dhe waitid (PIDFD lidhet me një proces të caktuar dhe nuk ndryshohet, ndërsa PID mund të lidhet me një proces tjetër pas përfundimit të procesit aktual të lidhur me këtë PID).
- Për platformën Linux është shtuar funksioni pidfd_getpid për të përcaktuar identifikuesin e procesit (PID) bazuar në dosjen e identifikimit të procesit (PIDFD), i kthyer nga funksionet pid_spawn, fork_np dhe pidfd_open.
- Në funksionin e familjes scanf është shtuar modifikatori i madhësisë «wN», i aplikuar për argumentet me lloje intN_t, int_leastN_t, uintN_t dhe uint_leastN_t. Për shembull, për të lexuar vlera dhjetore me llojet int32_t dhe int_least32_t mund të specifiqoni «%w32d», ndërsa për ato në bazë shtatëshi «%w32x». Po ashtu, është shtuar modifikatori «wfN» për llojet int_fastN_t dhe uint_fastN_t, të paraqitura në standardin e draftit ISO C2X.
- ĂshtĂ« shtuar konfigurimi «glibc.cpu.plt_rewrite», qĂ« pĂ«rfshin riparimin e PLT (Tabela e Lidhjes sĂ« ProcedurĂ«s) nĂ« sistemet x86-64 ku lidhĂ«si zĂ«vendĂ«son kalimet indirekte (indirect branch) nĂ« PLT me tĂ« drejta.
- ĂshtĂ« shtuar konfigurimi «glibc.mem.decorate_maps» pĂ«r tĂ« shtuar informacion shtesĂ« mbi ndarjen e memories (pĂ«r shembull, mbi grumbullin e thread-Ă«ve tĂ« krijuar nga funksioni pthread_create, ose memorien e ndarĂ« pĂ«rmes malloc).
- Në strukturën «statvfs» është siguruar mbushja e fushës «f_type» me informacionin mbi llojin e FS, ekuivalent me përmbajtjen e fushës në strukturën «statfs». Më parë në Linux, në fushën «f_type» gjithmonë shkruhej 0.
- Për platformën AArch64, në libmvec dhe math.h janë shtuar annotime, që lejojnë gjatë vendosjes së opsionit «-ffast-math» të përdoret vektorizimi i thirrjeve gjatë ndërtimit në GCC 9 dhe versionet më të reja të kompajlerit. Vektorizimi aktivizohet për funksionet matematikore 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 dhe tanf.
- Nga përbërja është hequr biblioteka libcrypt dhe skedari përkatës i titullit «». Rekomandohet që zhvilluesit e aplikacioneve të kalojnë në përdorimin e biblioteka alternative, si libxcrypt.
- NĂ« utilitarin ldconfig tani kalohen skedarĂ«t me simbolin â;â nĂ« emrin e skedarit ose qĂ« pĂ«rfundojnĂ« nĂ« «.dpkg.tmp» dhe «.dpkg.new», duke lejuar qĂ« skedarĂ«t e pĂ«rkohshĂ«m tĂ« menaxherĂ«ve tĂ« paketave rpm dhe dpkg tĂ« mos pĂ«rpunohen.
- ĂshtĂ« ndĂ«rprerĂ« mbĂ«shtetja pĂ«r arkitekturĂ«n ia64 (ia64*-*-linux-gnu), e pĂ«rdorur nĂ« procesorĂ«t Intel Itanium.
- Janë eliminuar vulnerabilitetet:
- CVE-2023-6246, CVE-2023-6779, CVE-2023-6780 â janĂ« vulnerabilitete kritike nĂ« funksionin __vsyslog_internal(), qĂ« lejojnĂ« pĂ«rmes manipulimeve me fillimin e aplikacioneve SUID tĂ« arrihet ekzekutimi i kodit me privilegje tĂ« rritura.
- CVE-2023-4911 â njĂ« vulnerabilitet nĂ« Glibc ld.so, i cili lejon qĂ« tĂ« fitohen tĂ« drejtat root nĂ« sistem. Vulnerabiliteti shkaktohet nga njĂ« gabim nĂ« kodin e analizĂ«s sĂ« vargut, i caktuar nĂ« variablĂ«n e mjedisit GLIBC_TUNABLES, dhe mund tĂ« çojĂ« nĂ« shkruajtjen e vlerĂ«s sĂ« analizuar pĂ«rtej memorie tĂ« ndarĂ«. EkzistojnĂ« eksploitĂ« funksionalĂ«.
- CVE-2023-4806 â njĂ« vulnerabilitet nĂ« funksionin getaddrinfo, i shkaktuar nga qasja nĂ« memorie pas lirimit tĂ« saj (use-after-free). Problemi shfaqet kur plugin NSS realizon vetĂ«m thirrjet e kthimit «_gethostbyname2_r» dhe «_getcanonname_r», por nuk mbĂ«shtet thirrjen «_gethostbyname3_r». PĂ«r tĂ« shfrytĂ«zuar vulnerabilitetin, serveri DNS duhet tĂ« kthejĂ« njĂ« numĂ«r tĂ« madh adresash IPv6 dhe IPv4 pĂ«r hostin e kĂ«rkuar, duke çuar nĂ« rĂ«nien e procesit qĂ« thirri funksionin getaddrinfo pĂ«r familjen AF_INET6 kur aktivizohen flagjet AI_CANONNAME, AI_ALL dhe AI_V4MAPPED.
- CVE-2023-4527 â njĂ« vulnerabilitet nĂ« funksionin getaddrinfo, qĂ« lejon leximin e tĂ« dhĂ«nave nga zona jashtĂ« kufijve tĂ« memorjes gjatĂ« pĂ«rpunimit tĂ« pĂ«rgjigjes DNS, e cila Ă«shtĂ« marrĂ« pĂ«rmes TCP, me njĂ« madhĂ«si mĂ« tĂ« madhe se 2048 byte. Vulnerabiliteti shfaqet kur pĂ«rdoret opsioni «no-aaaa» nĂ« /etc/resolv.conf.
Përveç kësaj, mund të theksohet lëshimi i paketës së utilitarëve sistemorë GNU Binutils 2.42, e cila përfshin programe të tilla si GNU linker, GNU assembler, nm, objdump, strings, strip.
Në versionin e ri të Binutils:
- NĂ« assembler (gas) pĂ«r sistemet x86-64 Ă«shtĂ« shtuar njĂ« opsion eksperim total «âscfi=experimental» pĂ«r sintezĂ«n e strukturave CFI (Control Flow Integrity) pĂ«r kodin assembler tĂ« shkruar manual, qĂ« pĂ«rputhet me System V AMD64 ABI.
- NĂ« programin readelf Ă«shtĂ« shtuar opsioni «âextra-sym-info» pĂ«r tĂ« treguar informacion tĂ« zgjeruar mbi simbolet («âsymbols»), si emri i seksionit qĂ« bĂ«het referencĂ« pĂ«r indeksin st_shndx.
- NĂ« utilitarin objcopy Ă«shtĂ« ofruar mundĂ«sia e pĂ«rdorimit tĂ« vlerĂ«s «large» nĂ« opsionin «âset-section-flags» pĂ«r tĂ« caktuar seksionin e flamurit SHF_X86_64_LARGE pĂ«r objektet ELF nĂ« sistemet x86-64. NĂ« opsionin «âvisualize-jumps» Ă«shtĂ« implementuar mbĂ«shtetje pĂ«r arkitekturĂ«n s390.
- GjatĂ« disasemblerimit tĂ« instrukcioneve s390 Ă«shtĂ« implementuar mundĂ«sia pĂ«r tĂ« treguar komente nĂ« pĂ«rshkrimin e instrukcioneve. PĂ«r tĂ« pĂ«rfshirĂ« pĂ«rshkrimet nĂ« objdump, mund tĂ« specifikoni parametrin «-M insndesc», ndĂ«rsa nĂ« gdb â cilĂ«simin «set disassembler-options insndesc».
- Në linker janë shtuar opsionet «-z mark-plt» dhe «-z nomark-plt» për të shënuar regjistrimet në tabelën PLT, duke përdorur etiketat DT_X86_64_PLT, DT_X86_64_PLTSZ dhe DT_X86_64_PLTENT.
- Në linker është shtetur mbështetje për renditjen në mënyrë të kundërt.
- JanĂ« shtuar opsionet «âwarn-execstack-objects», «âerror-execstack» dhe «âerror-rxw-segments» pĂ«r tĂ« shkaktuar paralajmĂ«rime ose gabime gjatĂ« pĂ«rdorimit nĂ« objektet e thjeshta tĂ« ekzekutimit.
- ĂshtĂ« realizuar mbĂ«shtetje pĂ«r ABI 2.30 tĂ« arkitekturĂ«s LoongArch, si dhe mbĂ«shtetje pĂ«r instruksione tĂ« reja, tĂ« caktuara nĂ« specifikimin LoongArch 1.10.
- ĂshtĂ« shtuar mbĂ«shtetje pĂ«r grupin e instruksioneve KVX, tĂ« pĂ«rdorura nĂ« procesorĂ«t Kalray (p.sh., pĂ«rdoren nĂ« SoC Coolidge).
- Për sistemet e bazuara në arkitekturën Intel është shtuar mbështetje për zgjerimet:
- Intel APX: 32 GPR, NDD, PUSH2/POP2, PUSHP/POPP.
- USER_MSR.
- AVX10.1.
- PBNDKB.
- SM4.
- SM3.
- SHA512.
- AVX-VNNI-INT16.
- Në portin për arkitekturën RISC-V është shtuar mbështetje për zgjerimet:
- T-Head (XTheadVector, XTheadZvlsseg dhe XTheadZvamo).
- CORE-V (XCVmac, XCValu).
- SiFive VCIX (XSfVcp).
- Në portin për arkitekturën AArch64 është shtuar mbështetje për zgjerimet:
- SVE2.1 (Scalable Vector Extension 2.1).
- SME2.1 (Scalable Matrix Extension 2.1).
- B16B16 (BFloat16 dhe BFloat16 për SVE2 dhe SME2).
- RASv2 (Reliability, Availability and Serviceability v2).
- LSE128 (128-bit Atomic).
- GCS (Guarded Control Stack).
- CHK (Kontrolloni Statusin e Veçorisë).
- SPECRES2 (Përmirësimi i Restriksionit të Spekulimeve).
- LRCPC3 (Ngarko-Marrja RCpc).
- THE (Forcimi i Përkthimit).
- ITE (Gjurmimi i Instruksioneve).
- D128 (dokumentet 128-bit të tabelës së faqeve të memories).
- XS (atributi i memories XS).
- ĂshtĂ« shtuar mbĂ«shtetje pĂ«r procesorĂ«t AArch64 Cortex-A520, Cortex-A720, Cortex-X3 dhe Cortex-X4.
- Në assembler BPF, për t'u siguruar me assemblerin clang/LLVM është shtuar mbështetje për ndarjen e komenteve me simbolet «#» dhe «//», si dhe përdorimin e simbolit «;» për ndarjen e shprehjeve në varg («;» më nuk mund të përdoret për komente).
Burimi: opennet.ru
