Extended Lifecycle Support Update für binutils deckt 92 CVEs ab
GNU Binutils ist eines der grundlegenden Pakete in einer Entwicklungsumgebung - es enthält mehrere verschiedene Werkzeuge zur Manipulation von ELF-Dateien, Objektdateien und anderen, die für den Prozess der Binärerstellung wichtig sind. Das Auffinden und Beheben von Problemen in diesem Paket stärkt also den gesamten Prozess und hat weitreichende Vorteile.
In den letzten Updates, die vom Extended Lifecycle Support Team für die unterstützten Linux-Distributionen veröffentlicht wurden, wurden über 90 CVEs in GNU Binutils behoben.
INHALT:
- Der erweiterte Lebenszyklus-Support aus der Sicht der Benutzer
- Auf einer tieferen Ebene
- Abschließende Gedanken
- Nachtrag
DIE ERWEITERTE LEBENSZYKLUSUNTERSTÜTZUNG AUS DER SICHT DER NUTZER
Als Dienstnutzer können Sie sich darauf verlassen, dass ein engagiertes Team von Sicherheits- und Linux-Experten angemessene Updates für Systeme vorbereitet, für die sonst keine Updates verfügbar wären.
In diesem speziellen Fall ist binutils ein grundlegendes Paket, auf das viele andere Werkzeuge wie Entwicklungsstacks, Debugger, Codeanalyse und viele andere, nicht unbedingt entwicklungsbezogene Werkzeuge, angewiesen sind. Es sicher zu halten, hat also direkte Auswirkungen auf die Sicherheit und Stabilität des gesamten Systems.
Auf einer tieferen Ebene
Das Extended Lifecycle Support-Team von TuxCare ist in der Regel damit beschäftigt, den Code von CVE-Fixes zu testen, ihn an ältere Versionen von Paketen anzupassen, die in den unterstützten Linux-Distributionen enthalten sind, und sicherzustellen, dass die veröffentlichten Pakete die Benutzer tatsächlich vor den Schwachstellen schützen, die angeblich behoben werden. Dieser Prozess wird "Backporting" genannt, da er darin besteht, eine Korrektur, die für eine neuere Version eines Pakets gilt, an ältere Versionen anzupassen, wie sie in den von ELS abgedeckten Linux-Distributionen vorhanden sind. Infolgedessen wird viel Zeit damit verbracht, den Code nur mit den Augen zu betrachten und Tests durchzuführen.
Bei der Arbeit an CVEs werden bei der Analyse manchmal neue Probleme festgestellt, die zu dem Zeitpunkt, als sie ursprünglich behandelt wurden, übersehen wurden. Das ELS-Team ist stets bestrebt, die vorgelagerten Open-Source-Projekte verantwortungsbewusst zu informieren und den Code zu diesen Projekten beizusteuern. Dies hat den zusätzlichen Vorteil, dass die Sicherheit des gesamten IT-Ökosystems verbessert wird. Natürlich werden die Korrekturen für diese neuen Probleme auch den ELS-Benutzern zur Verfügung gestellt, da die Systeme, die sie betreiben, nicht mehr vom ursprünglichen Hersteller unterstützt werden und den korrigierten Code sonst nicht auf anderem Wege erhalten würden.
Eines der jüngsten Ergebnisse dieser Aktivität, das bereits in den verfügbaren Updates enthalten ist, behebt insgesamt 92 Sicherheitslücken allein in binutils. Diese reichen von "Pufferüberläufen" bis hin zu "use after free"-Problemen und weisen eine breite Palette von CVSS-Scores auf - nicht alle sind kritisch, aber viele sind es tatsächlich.
Als grundlegendes Paket enthält binutils Werkzeuge, die bei der Code-Analyse, beim Debuggen und bei Linking-Operationen ausgiebig genutzt werden und die auch von vielen anderen Drittanbieter-Werkzeugen verwendet werden. Sie müssen nicht wirklich an der Entwicklung arbeiten, um binutils in Ihrem System zu haben, Sie haben es wahrscheinlich als Abhängigkeit für eine andere Anwendung oder ein Werkzeug, das eingesetzt wird. Wenn Sie binutils auf dem neuesten Stand halten, gewährleisten Sie den korrekten und sicheren Betrieb von mehr als nur binutils selbst.
Bei einigen dieser CVEs stellte das Team Situationen fest, in denen die ursprünglichen CVE-Fixes neue Probleme wie undefiniertes Verhalten oder andere Sicherheitsprobleme mit sich brachten. Diese erforderten eine interne Code-Entwicklung, um sie zu beheben. Dieser Code wurde dann an vorgelagerte Open-Source-Projekte übermittelt, die ihn wiederum entweder akzeptierten und in diese Projekte einbrachten oder ihren eigenen Code zur Behebung der neu gemeldeten Probleme vorbereiteten.
Ein Beispiel hierfür ist CVE-2018-7568. Das ELS-Team hat eine Situation identifiziert, in der die ursprünglich eingereichte Codebehebung ein undefiniertes Verhalten verursachen würde, und dies wurde dem Upstream-Projekt hier gemeldet.
Das Problem wurde von Nikita Popov, einem Teammitglied, entdeckt, als er die Änderungen am ursprünglichen CVE-Fix überprüfte, um sicherzustellen, dass er auf älteren Linux-Distributionen nicht versagt und mit dem Rest des Codes "gut funktioniert".
Es stellt sich heraus, dass der Patch für CVE-2018-7568 eine vorzeichenlose Art als Blocklänge (block_len) Zähler verwendet enthält. Bei Verwendung in Ausdrücken wie
xptr + block_len < xptr
unter den richtigen Umständen - block_len ist vorzeichenlos - könnte dies vom Compiler, der diese Zeile wegoptimieren könnte, vollständig weggelassen werden. Diese Art von Ausdrücken wird von der ISO C-Norm genau aus diesem Grund ausdrücklich verboten, und verschiedene Compiler oder derselbe Compiler unter verschiedenen Architekturen/Plattformen könnten diese Situation auf unterschiedliche Weise angehen und damit ein undefiniertes Verhalten verursachen. Der vom Team eingereichte Fehlerbericht enthält eine umfassendere Erklärung des Problems und den eingereichten Code, der es behebt.
Es wurde in die Upstream-Code-Basis aufgenommen und ist nun Teil des binutils-Pakets, und es wurde sogar schon von anderen Entwicklern weiter verfeinert. Dies ist ein Paradebeispiel dafür, wie Open-Source-Projektentwicklung richtig gemacht werden kann, und das ELS-Team arbeitet aktiv in diesem Bereich.
Ein Problem mit der Korrektur für CVE-2018-12700, das die Situation, die es zu lösen vorgibt, nicht zu verhindern scheint und das durch unsere Tests immer noch ausgelöst werden kann, wurde ebenfalls an die Upstream-Abteilung gemeldet und wartet auf Klärung.
Nach der Arbeit, die in diesem Update für binutils geleistet wurde, kommentierte Pavel Mayorov, ein weiterer Entwickler, der an binutils arbeitet, dass "soweit ich weiß, wir alle existierenden CVE für binutils bearbeitet haben... aber wir warten immer noch auf eine Antwort bezüglich des Problems mit CVE-2018-12700".
SCHLUSSGEDANKEN
Ältere Systeme auf dem neuesten Stand zu halten, ist nicht nur aus rein sicherheitstechnischer Sicht notwendig, auch wenn dies an sich schon wichtig ist. Sie ist auch erforderlich, um die Einhaltung verschiedener Geschäftsstandards zu erreichen und aufrechtzuerhalten, in denen die Fristen für die Aktualisierung von Patches festgelegt sind.
Wenn Sie sich auf ELS als Quelle für Ihre Sicherheitspatches und -updates verlassen, wirkt sich die sorgfältige Arbeit des Teams direkt auf die Sicherheit Ihrer Systeme und die Einhaltung der Anforderungen aus und gibt Ihnen die Gewissheit, dass Sie sich darauf verlassen können. Im Ergebnis sind Ihre Systeme geschützt und stabil, so dass Sie sich auf Ihre spezifischen Geschäftsanforderungen konzentrieren können.
ADDENDUM
Vollständige Liste der CVEs, die durch das letzte binutils-Update abgedeckt sind, das über den Extended Lifecycle Support Service verfügbar ist, gruppiert nach CVE-Jahr.
CVE-2016-2226: Behebung eines Integer-Überlaufs in der Funktion string_appends in cplus-dem.c
CVE-2016-4487: Behebung der Use-after-free-Schwachstelle in libiberty
CVE-2016-4488: Behebung der Use-after-free-Schwachstelle in libiberty
CVE-2016-4489: Behebung eines Integer-Überlaufs in libiberty
CVE-2016-4490: Behebung eines Integer-Überlaufs in cp-demangle.c in libiberty
CVE-2016-4492: Pufferüberlauf in der do_type-Funktion in cplus-dem.c in libiberty beheben
CVE-2016-4493: Fix out-of-bounds read in demangle_template_value_parm und do_hpacc_template_literal
CVE-2016-6131: Behebung einer Endlosschleife, Stapelüberlauf
CVE-2017-7223: Behebung eines globalen Pufferüberlaufs (der Größe 1)
CVE-2017-7224: Behebung eines ungültigen Schreibvorgangs (der Größe 1) beim Disassemblieren
CVE-2017-7225: Behebung einer NULL-Zeiger-Dereferenz und eines ungültigen Schreibvorgangs
CVE-2017-7226: Behebung eines Heap-basierten Pufferüberlaufs der Größe 4049
CVE-2017-7227: Behebung eines Heap-basierten Pufferüberlaufs
CVE-2017-7299: Fix ungültig lesen (der Größe 8) in ELF reloc Abschnitt
CVE-2017-7300: Fix Heap-basierte Puffer überlesen (off-by-one)
CVE-2017-7301: Off-by-One-Schwachstelle beheben
CVE-2017-7302: Ungültiges Lesen (der Größe 4) beheben
CVE-2017-7614: Problem mit undefiniertem Verhalten beheben
CVE-2017-8393: Behebung eines globalen Pufferüberlesefehlers
CVE-2017-8394: Behebt ungültiges Lesen der Größe 4 aufgrund von NULL-Zeiger-Dereferenzierung
CVE-2017-8396: Fix ungültiges Lesen der Größe 1
CVE-2017-8398: Behebung eines ungültigen Lesevorgangs der Größe 1 beim Dumping von Debug-Informationen
CVE-2017-8421: Speicherleck-Schwachstelle beheben
CVE-2017-9742: Pufferüberlauf beheben
CVE-2017-9744: Pufferüberlauf beheben
CVE-2017-9747: Pufferüberlauf beheben
CVE-2017-9748: Pufferüberlauf beheben
CVE-2017-9749: Pufferüberlauf beheben
CVE-2017-9753: Pufferüberlauf beheben
CVE-2017-9754: Pufferüberlauf beheben
CVE-2017-12448: Fix Verwendung nach frei
CVE-2017-12449: Behebung von Heap-Lesungen außerhalb der Grenzen
CVE-2017-12455: Behebung der Überschreitung von Grenzen Heap lesen
CVE-2017-12457: Behebung der NULL-Dereferenz
CVE-2017-12458: Behebung der Überschreitung von Grenzen Heap lesen
CVE-2017-12459: Behebung von Grenzüberschreitungen beim Heap-Write
CVE-2017-12450: Fix out of bounds heap write
CVE-2017-12452: Behebung von Heap-Lesevorgängen außerhalb der Grenzen
CVE-2017-12453: Behebung von Heap-Lesevorgängen außerhalb der Grenzen
CVE-2017-12454: Behebt das Lesen von beliebigem Speicher
CVE-2017-12456: Fix out of bounds heap read
CVE-2017-14333: Fix Integer-Überlauf, und hängen wegen einer zeitaufwendigen Schleife
CVE-2017-12451: Fix out of bounds stack read
CVE-2017-12799: Pufferüberlauf beheben
CVE-2017-13710: Behebung der NULL-Zeiger-Dereferenz
CVE-2017-14130: Fix _bfd_elf_attr_strdup Heap-basierter Pufferüberlauf
CVE-2017-14932: Behebung einer Endlosschleife
CVE-2017-14938: Behebung einer übermäßigen Speicherzuweisung
CVE-2017-14940: Behebung der NULL-Zeiger-Dereferenz
CVE-2017-15020: Fix parse_die Heap-basierter Pufferüberlauf
CVE-2017-15022: Fix bfd_hash_hash NULL-Zeiger-Dereferenz
CVE-2017-15225: Behebung eines Divide-by-Zero-Fehlers
CVE-2017-15938: Fix find_abstract_instance_name ungültiges Speicherlesen, Segmentierungsfehler
CVE-2017-15939: Behebung einer NULL-Zeiger-Dereferenz
CVE-2017-15996: Pufferüberlauf im gefuzzten Archiv-Header behoben
CVE-2017-16826: Ungültigen Speicherzugriff beheben
CVE-2017-16827: slurp_symtab ungültig frei
CVE-2017-16828: Behebung eines Integer-Überlaufs und eines Heap-basierten Pufferüberlaufs
CVE-2017-16831: Behebung eines Integer-Überlaufs oder einer übermäßigen Speicherzuweisung
CVE-2017-17080: Behebt bfd_getl32 Heap-basiertes Pufferüberlesen
CVE-2017-17121: Speicherzugriffsverletzung beheben
CVE-2017-17123: Behebung der NULL-Zeiger-Dereferenz
CVE-2017-17124: Behebung eines übermäßigen Speicherverbrauchs oder eines Heap-basierten Pufferüberlaufs
CVE-2017-17125: Pufferüberlesung beheben
CVE-2018-6323: Behebung eines Integer-Überlaufs ohne Vorzeichen
CVE-2018-6543: Behebung eines Integer-Überlaufs
CVE-2018-6759: Segmentierungsfehler beheben
CVE-2018-7208: Segmentierungsfehler beheben
CVE-2018-7568: Behebung eines Integer-Überlaufs
CVE-2018-7569: Integer-Unterlauf oder -Überlauf beheben
CVE-2018-7642: Fix aout_32_swap_std_reloc_out NULL-Zeiger-Dereferenz
CVE-2018-7643: Behebung eines Integer-Überlaufs
CVE-2018-8945: Segmentierungsfehler beheben
CVE-2018-13033: Korrektur der übermäßigen Speicherzuweisung
CVE-2018-10373: Behebung einer NULL-Zeiger-Dereferenz
CVE-2018-10535: Behebung der NULL-Zeiger-Dereferenz
CVE-2018-18309: Ungültige Speicheradressen-Dereferenzierung beheben
CVE-2018-18605: Behebung von Fehlbedienungen bei Abschnittszusammenführungen
CVE-2018-18606: Fix NULL-Zeiger-Dereferenz
CVE-2018-18607: Behebung einer NULL-Zeiger-Dereferenz in elf_link_input_bfd
CVE-2018-19931: Behebung eines Heap-basierten Pufferüberlaufs in bfd_elf32_swap_phdr_in
CVE-2018-19932: Integer-Überlauf und Endlosschleife behoben
CVE-2018-20002: Korrektur des Speicherverbrauchs
CVE-2018-20623: Fix use-after-free in der Fehlerfunktion
CVE-2018-20671: Behebung einer Integer-Überlauf-Schwachstelle
CVE-2018-1000876: Fix Integer-Überlauf, der einen Heap-Überlauf auslöst
CVE-2019-9073: Übermäßige Speicherzuweisung beheben
CVE-2019-9075: Behebung eines Heap-basierten Pufferüberlaufs in _bfd_archive_64_bit_slurp_armap
CVE-2019-9077: Behebung eines Heap-basierten Pufferüberlaufs in process_mips_specific
CVE-2019-12972: Behebung eines Heap-basierten Pufferüberlaufs in _bfd_doprnt
CVE-2019-14444: Behebung eines Integer-Überlaufs
CVE-2019-17450: Behebung einer unendlichen Rekursion
