Veröffentlichung der Systembibliothek Glibc 2.39 und des GNU Binutils 2.42

Nach sechs Monaten Entwicklung wurde die Version der GNU C Library (glibc) 2.39 veröffentlicht, die vollstÀndig den Anforderungen der ISO C11- und POSIX.1-2017-Standards entspricht. Der neue Release enthÀlt Korrekturen von 67 Entwicklern.

Unter den in Glibc 2.39 umgesetzten Verbesserungen sind hervorzuheben:

  • Die UnterstĂŒtzung fĂŒr den Shadow Stack wurde eingefĂŒhrt, der im Linux-Kernel 6.6 verfĂŒgbar ist und die FunktionalitĂ€t vieler Exploits blockiert, indem er die Hardwarefunktionen von Intel-Prozessoren zum Schutz vor der Überschreibung der RĂŒcksprungadresse aus einer Funktion bei einem Buffer Overflow im Stack nutzt. Der Schutzmechanismus besteht darin, dass nach der Übergabe der Kontrolle an die Funktion die RĂŒcksprungadressen nicht nur im herkömmlichen Stack, sondern auch in einem separaten „Shadow“-Stack vom Prozessor gespeichert werden, der nicht direkt verĂ€ndert werden kann. Vor dem Verlassen der Funktion wird die RĂŒcksprungadresse aus dem Shadow-Stack extrahiert und mit der RĂŒcksprungadresse aus dem Hauptstack verglichen. Eine Abweichung der Adressen fĂŒhrt zur Generierung einer Ausnahme, die verhindert, dass ein Exploit die Adresse im Hauptstack ĂŒberschreibt. Um dies zu aktivieren, wurde die Compiler-Option „—enable-cet“ hinzugefĂŒgt.
  • Eine neue Header-Datei wurde hinzugefĂŒgt, die im Entwurf des ISO C2X-Standards definiert ist und Funktionen wie 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 und stdc_bit_ceil fĂŒr die Typen „unsigned char“, „unsigned short“, „unsigned int“, „unsigned long int“ und „unsigned long long int“ einschließt.
  • FĂŒr die Linux-Plattform wurden die Funktionen posix_spawnattr_getcgroup_np und posix_spawnattr_setcgroup_np sowie das Flag POSIX_SPAWN_SETCGROUP implementiert, die es ermöglichen, cgroupv2 im neuen Prozess mithilfe der Funktionen posix_spawn und posix_spawnp einzurichten, wodurch ein Rennen vermieden wird. Diese Funktionen sind Erweiterungen von GNU und erfordern einen Linux-Kernel mit UnterstĂŒtzung fĂŒr den Systemaufruf clone3.
  • FĂŒr die Linux-Plattform wurden die Funktionen pidfd_spawn und pidfd_spawp implementiert, die semantisch der Funktion posix_spawn Ă€hnlich sind, jedoch nicht eine Prozess-ID (PID) zurĂŒckgeben, sondern einen Dateideskriptor, der in Funktionen verwendet wird, die den PIDFD-Mechanismus unterstĂŒtzen, wie pidfd_send_signal, poll und waitid (PIDFD ist an einen bestimmten Prozess gebunden und Ă€ndert sich nicht, wĂ€hrend die PID nach dem Abschluss des aktuellen Prozesses, der mit dieser PID assoziiert ist, einem anderen Prozess zugeordnet werden kann).
  • FĂŒr die Linux-Plattform wurde die Funktion pidfd_getpid hinzugefĂŒgt, um die Prozess-ID (PID) basierend auf dem aus den Funktionen pid_spawn, fork_np und pidfd_open zurĂŒckgegebenen Prozess-Dateideskriptor (PIDFD) zu bestimmen.
  • In der scanf-Familie von Funktionen wurde der GrĂ¶ĂŸenmodifikator „wN“ hinzugefĂŒgt, der fĂŒr Argumente mit den Typen intN_t, int_leastN_t, uintN_t und uint_leastN_t angewendet wird. Zum Beispiel kann fĂŒr das Lesen von Dezimalwerten mit den Typen int32_t und int_least32_t „%w32d“ angegeben werden, wĂ€hrend fĂŒr hexadezimale Werte „%w32x“ verwendet werden kann. Analog wurde der Modifikator „wfN“ fĂŒr die Typen int_fastN_t und uint_fastN_t, die im Entwurfstandard ISO C2X dargestellt sind, hinzugefĂŒgt.
  • Eine Einstellung „glibc.cpu.plt_rewrite“ wurde hinzugefĂŒgt, die die Umschreibung der PLT (Procedure Linkage Table) auf x86-64-Systemen aktiviert, bei der der Linker indirekte SprĂŒnge in der PLT durch direkte ersetzt.
  • Die Einstellung „glibc.mem.decorate_maps“ wurde hinzugefĂŒgt, um zusĂ€tzliche Informationen zur Speicherzuweisung bereitzustellen (z. B. zum Thread-Stack, der durch die Funktion pthread_create erstellt wurde, oder zu dem durch malloc zugewiesenen Speicher).
  • In der Struktur „statvfs“ wird das Feld „f_type“ nun mit Informationen ĂŒber den FS-Typ ausgefĂŒllt, die dem Inhalt des Feldes in der Struktur „statfs“ entsprechen. Zuvor wurde in Linux immer 0 in das Feld „f_type“ geschrieben.
  • FĂŒr die Plattform AArch64 wurden in libmvec und math.h Anmerkungen hinzugefĂŒgt, die es ermöglichen, bei Angabe der Option „-ffast-math“ bei der Kompilierung Vektorisierung von Funktionsaufrufen in GCC 9 und neueren Compiler-Versionen zu verwenden. Die Vektorisierung wird fĂŒr mathematische Funktionen wie 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 und tanf aktiviert.
  • Die Bibliothek libcrypt sowie die zugehörige Header-Datei „“ wurden entfernt. Anwendungsentwickler wird empfohlen, auf alternative Bibliotheken wie libxcrypt umzusteigen.
  • In der ldconfig-Anwendung werden jetzt Dateien mit dem Symbol ‚;‘ im Dateinamen oder die auf „.dpkg.tmp“ und „.dpkg.new“ enden, ĂŒbersprungen, was die Verarbeitung temporĂ€rer Dateien von rpm- und dpkg-Paketmanagern ermöglicht.
  • Die UnterstĂŒtzung fĂŒr die ia64-Architektur (ia64*-*-linux-gnu), die in Intel Itanium-Prozessoren verwendet wird, wurde eingestellt.
  • Behobene SicherheitsanfĂ€lligkeiten:
    • CVE-2023-6246, CVE-2023-6779, CVE-2023-6780 — kritische SicherheitsanfĂ€lligkeiten in der Funktion __vsyslog_internal(), die es durch Manipulation beim Start von SUID-Anwendungen ermöglicht, Code mit erhöhten Rechten auszufĂŒhren.
    • CVE-2023-4911 — SicherheitsanfĂ€lligkeit in Glibc ld.so, die es ermöglicht, Root-Rechte im System zu erlangen. Die AnfĂ€lligkeit resultiert aus einem Fehler im Code zur Verarbeitung des Strings, der in der Umgebungsvariable GLIBC_TUNABLES angegeben ist, und kann dazu fĂŒhren, dass der analysierte Wert außerhalb des zugewiesenen Puffers geschrieben wird. Es gibt funktionierende Exploits.
    • CVE-2023-4806 — SicherheitsanfĂ€lligkeit in der Funktion getaddrinfo, verursacht durch den Zugriff auf den Speicher nach dessen Freigabe (use-after-free). Das Problem tritt auf, wenn das NSS-Plugin nur Call-Back-Aufrufe von „_gethostbyname2_r“ und „_getcanonname_r“ implementiert, jedoch den Aufruf „_gethostbyname3_r“ nicht unterstĂŒtzt. Um die AnfĂ€lligkeit auszunutzen, muss der DNS-Server fĂŒr den angeforderten Host eine große Anzahl von IPv6- und IPv4-Adressen zurĂŒckgeben, was zum Absturz des Prozesses fĂŒhrt, der die Funktion getaddrinfo fĂŒr die Familie AF_INET6 mit den Flags AI_CANONNAME, AI_ALL und AI_V4MAPPED aufruft.
    • CVE-2023-4527 — SicherheitsanfĂ€lligkeit in der Funktion getaddrinfo, die es erlaubt, Daten außerhalb des Pufferrandes zu lesen, wenn eine DNS-Antwort, die ĂŒber TCP mit einer GrĂ¶ĂŸe von mehr als 2048 Bytes empfangen wurde, verarbeitet wird. Die AnfĂ€lligkeit tritt bei Verwendung der Option „no-aaaa“ in /etc/resolv.conf auf.

    ZusÀtzlich kann die Veröffentlichung des Sets von Systemdienstprogrammen GNU Binutils 2.42 erwÀhnt werden, das Programme wie den GNU-Linker, den GNU-Assembler, nm, objdump, strings und strip umfasst.

    In der neuen Version von Binutils:

    • Im Assembler (gas) fĂŒr x86-64-Systeme wurde die experimentelle Option „—scfi=experimental“ hinzugefĂŒgt, um CFI-Konstrukte (Control Flow Integrity) fĂŒr manuell geschriebenen Assembler-Code entsprechend der System V AMD64 ABI zu synthetisieren.
    • In das Programm readelf wurde die Option „—extra-sym-info“ hinzugefĂŒgt, um erweiterte Informationen ĂŒber Symbole („—symbols“) auszugeben, wie z.B. den Namen der Sektion, auf die der Index st_shndx verweist.
    • In dem Dienstprogramm objcopy wurde die Möglichkeit zur Verwendung des Wertes „large“ in der Option „—set-section-flags“ bereitgestellt, um das Flag SHF_X86_64_LARGE fĂŒr ELF-Objekte auf x86-64-Systemen zu setzen. In der Option „—visualize-jumps“ wurde die UnterstĂŒtzung fĂŒr die Architektur s390 implementiert.
    • Beim Disassemblieren von s390-Anweisungen wurde die Möglichkeit implementiert, Kommentare in der Beschreibung der Anweisungen anzuzeigen. Um Beschreibungen in objdump einzuschließen, kann der Parameter „-M insndesc“ angegeben werden, und in gdb wird die Einstellung „set disassembler-options insndesc“ verwendet.
    • Dem Linker wurden die Optionen „-z mark-plt“ und „-z nomark-plt“ hinzugefĂŒgt, um EintrĂ€ge in der PLT-Tabelle zu kennzeichnen, unter Verwendung der Tags DT_X86_64_PLT, DT_X86_64_PLTSZ und DT_X86_64_PLTENT.
    • Im Linker wurde die UnterstĂŒtzung fĂŒr die Sortierung in umgekehrter Reihenfolge hinzugefĂŒgt.
    • Die Optionen „—warn-execstack-objects“, „—error-execstack“ und „—error-rxw-segments“ wurden hinzugefĂŒgt, um Warnungen oder Fehler bei der Verwendung in ausfĂŒhrbaren Stackobjekten auszugeben.
    • Die UnterstĂŒtzung fĂŒr die ABI 2.30 der LoongArch-Architektur wurde implementiert, sowie die UnterstĂŒtzung neuer Anweisungen, die in der Spezifikation LoongArch 1.10 definiert sind.
    • Die UnterstĂŒtzung fĂŒr den Befehlssatz KVX, der in den Prozessoren von Kalray verwendet wird (zum Beispiel in SoC Coolidge), wurde hinzugefĂŒgt.
    • FĂŒr Systeme auf Basis der Intel-Architektur wurde die UnterstĂŒtzung fĂŒr die Erweiterungen hinzugefĂŒgt:
      • Intel APX: 32 GPRs, NDD, PUSH2/POP2, PUSHP/POPP.
      • USER_MSR.
      • AVX10.1.
      • PBNDKB.
      • SM4.
      • SM3.
      • SHA512.
      • AVX-VNNI-INT16.
    • Im Port fĂŒr die RISC-V-Architektur wurde die UnterstĂŒtzung fĂŒr die Erweiterungen hinzugefĂŒgt:
      • T-Head (XTheadVector, XTheadZvlsseg und XTheadZvamo).
      • CORE-V (XCVmac, XCValu).
      • SiFive VCIX (XSfVcp).
    • Im Port fĂŒr die AArch64-Architektur wurde die UnterstĂŒtzung fĂŒr die Erweiterungen hinzugefĂŒgt:
      • SVE2.1 (Scalable Vector Extension 2.1).
      • SME2.1 (Scalable Matrix Extension 2.1).
      • B16B16 (BFloat16 und BFloat16 fĂŒr SVE2 und SME2).
      • RASv2 (Reliability, Availability and Serviceability v2).
      • LSE128 (128-Bit Atomar).
      • GCS (Guarded Control Stack).
      • CHK (Feature-Zustand ĂŒberprĂŒfen).
      • SPECRES2 (Erweiterte SpekulationsbeschrĂ€nkung).
      • LRCPC3 (Load-Acquire RCpc).
      • THE (Übersetzungsabsicherung).
      • ITE (Befehlsverfolgung).
      • D128 (128-Bit-Seitentabellen-Deskriptoren).
      • XS (XS-Speicherattribut).
    • Die UnterstĂŒtzung fĂŒr die AArch64-Prozessoren Cortex-A520, Cortex-A720, Cortex-X3 und Cortex-X4 wurde hinzugefĂŒgt.
    • Im BPF-Assembler wurde zur KompatibilitĂ€t mit dem Assembler clang/LLVM die UnterstĂŒtzung fĂŒr die Trennung von Kommentaren mit den Symbolen „#“ und „//“ sowie die Verwendung des Symbols „;“ zur Trennung von AusdrĂŒcken in einer Zeile hinzugefĂŒgt (das „;“ kann nicht mehr fĂŒr Kommentare verwendet werden).

    Quelle: opennet.ru

60GB SSD 8Gb DDR4