Издание на системната библиотека Glibc 2.39 и набор от утилити GNU Binutils 2.42

След шестмесечна разработка беше публикувано издание на системната библиотека GNU C Library (glibc) 2.39, която напълно отговаря на изискванията на стандартите ISO C11 и POSIX.1-2017. В новата версия са включени поправки от 67 разработчици.

От реализираните в Glibc 2.39 подобрения могат да се отбележат:

  • Осигурена е поддръжка на теневия стек (shadow stack), появил се в ядрото на Linux 6.6, който позволява блокирането на много експлойти, използвайки хардуерните възможности на процесорите Intel за защита от презаписване на адреса на връщане от функция при преливане на буфера в стека. Същността на защитата е, че след предаване на управлението на функцията, адресите на връщане се съхраняват от процесора не само в обикновения стек, но и в отделен "теневи" стек, който не може да бъде променян директно. Преди напускането на функцията адресът на връщане се извлича от теневия стек и се сравнява с адреса на връщане от основния стек. Несъответствието на адресите води до генериране на изключение, блокиращо ситуации, при които експлойтът е успял да презапише адреса в основния стек. За включване е добавена опцията за компилиране "—enable-cet".
  • Добавен е нов заглавен файл , дефиниран в черновика на стандарта ISO C2X, и включва функции 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 и stdc_bit_ceil в вариантите с типовете "unsigned char", "unsigned short", "unsigned int", "unsigned long int" и "unsigned long long int".
  • За платформата Linux са реализирани функции posix_spawnattr_getcgroup_np и posix_spawnattr_setcgroup_np, както и флагът POSIX_SPAWN_SETCGROUP, които позволяват настройка на cgroupv2 в новия процес чрез функции posix_spawn и posix_spawnp, изключвайки появата на състояние на гонка. Функциите са разширения на GNU и изискват наличието на ядро на Linux с поддръжка на системния вик clone3.
  • За платформата Linux са реализирани функциите pidfd_spawn и pidfd_spawn, които са близки по семантика до функцията posix_spawn, но връщат не идентификатора на процеса (PID), а файлов дескриптор за използване във функции, които поддържат механизма PIDFD, като pidfd_send_signal, poll и waitid (PIDFD е свързан с конкретен процес и не се променя, докато PID може да бъде свързан с друг процес след завършването на текущия процес, асоцииран с този PID).
  • За платформата Linux е добавена функцията pidfd_getpid за определяне на идентификатора на процеса (PID) въз основа на файлов дескриптор на процеса (PIDFD), върнат от функциите pid_spawn, fork_np и pidfd_open.
  • В семейството функции scanf е добавен модификаторът на размера "wN", прилаган за аргументи с типове intN_t, int_leastN_t, uintN_t и uint_leastN_t. Например, за четене на десетични стойности с типове int32_t и int_least32_t може да се посочи "%w32d", а за шестнадцатични — "%w32x". По подобен начин е добавен модификатор "wfN" за типовете int_fastN_t и uint_fastN_t, представени в черновия стандарт ISO C2X.
  • Добавена е настройка "glibc.cpu.plt_rewrite", която включва презапис на PLT (Procedure Linkage Table) на системи x86-64, при която компилаторът заменя косвени преходи (indirect branch) в PLT с директни.
  • Добавена е настройка "glibc.mem.decorate_maps" за добавяне на допълнителна информация за разпределение на паметта (например, за стека на нишки, създаден с функцията pthread_create, или памет, разпределена чрез malloc).
  • В структурата "statvfs" е осигурено попълване на полето "f_type" с информация за типа на файловата система, еквивалентна на съдържанието на полето в структурата "statfs". Преди това в Linux в полето "f_type" винаги се записваше 0.
  • За платформата AArch64 в libmvec и math.h са добавени анотации, позволяващи при указване опцията "-ffast-math" при компилация да се използва векторизация на извикванията с GCC 9 и по-нови версии на компилатора. Векторизацията се включва за математическите функции 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 и tanf.
  • От състава е премахната библиотеката libcrypt и свързаният с нея заглавен файл "". Разработчиците на приложения са препоръчвани да преминат към използването на алтернативни библиотеки, като libxcrypt.
  • В утилитата ldconfig вече се пропускат файлове с символ ‘;’ в името на файла или завършващи на ".dpkg.tmp" и ".dpkg.new", което позволява да не се обработват временни файлове на пакетни мениджъри rpm и dpkg.
  • Прекратена е поддръжката на архитектурата ia64 (ia64*-*-linux-gnu), използвана в процесорите Intel Itanium.
  • Устранени уязвимости:
    • CVE-2023-6246, CVE-2023-6779, CVE-2023-6780 — критични уязвимости в функцията __vsyslog_internal(), позволяващи чрез манипулации с изпълнението на SUID-приложения да се постигне изпълнението на собствен код с повишени привилегии.
    • CVE-2023-4911 — уязвимост в Glibc ld.so, която позволява получаване на root права в системата. Уязвимостта е причинена от грешка в кода за парсинг на стринг, указан в променливата на средата GLIBC_TUNABLES, и може да доведе до запис на разобраната стойност извън зададения буфер. Има работещи експлойти.
    • CVE-2023-4806 — уязвимост във функцията getaddrinfo, причинена от достъп до памет след нейното освобождаване (use-after-free). Проблемът се проявява, когато NSS плъгинът реализира само обратни повиквания „_gethostbyname2_r“ и „_getcanonname_r“, но не поддържа извикването „_gethostbyname3_r“. За експлоатация на уязвимостта, DNS сървърът трябва да върне за запитвания хост много адреси IPv6 и IPv4, което ще доведе до срив на процеса, извикващ функцията getaddrinfo за семейството AF_INET6 при задаване на флаговете AI_CANONNAME, AI_ALL и AI_V4MAPPED.
    • CVE-2023-4527 — уязвимост във функцията getaddrinfo, която позволява четене на данни от извън границите на буфера при обработка на DNS отговор, получен по TCP, с размер над 2048 байта. Уязвимостта се проявява при използване на опцията „no-aaaa“ в /etc/resolv.conf.

    Допълнително може да се отбележи издаването на комплекта системни утилити GNU Binutils 2.42, в който влизат програми като GNU linker, GNU assembler, nm, objdump, strings, strip.

    В новата версия на Binutils:

    • В асемблера (gas) за системи x86-64 е добавена експериментална опция „—scfi=experimental“ за синтезиране на конструкции CFI (Control Flow Integrity) за ръчно написан асемблерен код, съответстващ на System V AMD64 ABI.
    • В програмата readelf е добавена опция „—extra-sym-info“ за извеждане на разширена информация за символите („—symbols“), като име на секцията, на която се отнася индексът st_shndx.
    • В утилитата objcopy е предоставена възможност за използване на стойността „large“ в опцията „—set-section-flags“ за маркиране на секцията с флага SHF_X86_64_LARGE за ELF обекти в системи x86-64. В опцията „—visualize-jumps“ е реализирана поддръжка за архитектура s390.
    • При дизасемблирането на инструкции s390 е реализирана възможност за показване на коментари в описанията на инструкциите. За включване на описания в objdump може да се укаже параметърът „-M insndesc“, а в gdb — настройката „set disassembler-options insndesc“.
    • В компоновщика са добавени опции „-z mark-plt“ и „-z nomark-plt“ за маркиране на записи в таблицата PLT, използвайки таговете DT_X86_64_PLT, DT_X86_64_PLTSZ и DT_X86_64_PLTENT.
    • В компоновщика е добавена поддръжка за сортиране в обратен ред.
    • Добавени са опции «—warn-execstack-objects», «—error-execstack» и «—error-rxw-segments» за извеждане на предупреждения или грешки при използване в обекти на изпълняемия стек.
    • Реализирана е поддръжка на ABI 2.30 архитектурата LoongArch, както и на нови инструкции, определени в спецификация LoongArch 1.10.
    • Добавена е поддръжка на набор от инструкции KVX, използвани в процесорите Kalray (например, се прилагат в SoC Coolidge).
    • За системи на базата на архитектура Intel е добавена поддръжка на разширения:
      • Intel APX: 32 GPRs, NDD, PUSH2/POP2, PUSHP/POPP.
      • USER_MSR.
      • AVX10.1.
      • PBNDKB.
      • SM4.
      • SM3.
      • SHA512.
      • AVX-VNNI-INT16.
    • В порта за архитектура RISC-V е добавена поддръжка на разширения:
      • T-Head (XTheadVector, XTheadZvlsseg и XTheadZvamo).
      • CORE-V (XCVmac, XCValu).
      • SiFive VCIX (XSfVcp).
    • В порта за архитектура AArch64 е добавена поддръжка на разширения:
      • SVE2.1 (Scalable Vector Extension 2.1).
      • SME2.1 (Scalable Matrix Extension 2.1).
      • B16B16 (BFloat16 и BFloat16 за SVE2 и SME2).
      • RASv2 (Reliability, Availability and Serviceability v2).
      • LSE128 (128-bit Atomic).
      • GCS (Guarded Control Stack).
      • CHK (Check Feature Status).
      • SPECRES2 (Enhanced Speculation Restriction).
      • LRCPC3 (Load-Acquire RCpc).
      • THE (Translation Hardening).
      • ITE (Instruction Trace).
      • D128 (128-битови дескриптори на таблицата за страници в паметта).
      • XS (атрибут на паметта XS).
    • Добавена е поддръжка на процесори AArch64 Cortex-A520, Cortex-A720, Cortex-X3 и Cortex-X4.
    • В асемблера BPF за съвместимост с асемблера clang/LLVM е добавена поддръжка за отделяне на коментари със символите «#» и «//», както и за използване на символа «;» за разделяне на изрази в реда («;» повече не може да се използва за коментари).

    Източник: opennet.ru

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster