La mise à jour de l'Extended Lifecycle Support pour binutils couvre 92 CVEs
GNU Binutils est l'un des paquets fondamentaux dans un environnement de développement - il comprend plusieurs outils différents pour manipuler les fichiers ELF, les fichiers objets, et d'autres qui sont importants dans le processus de création binaire. Par conséquent, la découverte et la correction de ses problèmes renforcent l'ensemble du processus et ont des avantages considérables.
Dans le dernier lot de mises à jour publiées par l'équipe de l'Extended Lifecycle Support pour les distributions Linux prises en charge, plus de 90 CVE ont été corrigées dans GNU Binutils.
CONTENU :
- Le point de vue de l'utilisateur de l'Extended Lifecycle Support (support du cycle de vie étendu)
- A un niveau plus profond
- Réflexions finales
- Addendum
LE POINT DE VUE DE L'UTILISATEUR DE L'ASSISTANCE AU CYCLE DE VIE ÉTENDU
En tant qu'utilisateur de services, vous pouvez avoir la tranquillité d'esprit d'avoir une équipe dédiée d'experts en sécurité et en Linux préparant des mises à jour adéquates pour des systèmes qui, autrement, n'auraient aucune mise à jour disponible.
Dans ce cas précis, binutils est un paquetage fondamental, sur lequel s'appuient de nombreux autres outils tels que les piles de développement, les débogueurs, l'analyse de code, et bien d'autres, qui ne sont pas nécessairement des outils liés au développement. Par conséquent, sa sécurisation aura un impact direct sur la sécurité et la stabilité du système dans son ensemble.
A un niveau plus profond
L'équipe Extended Lifecycle Support de TuxCare est généralement occupée à tester le code de correction CVE, à l'adapter aux anciennes versions des paquets inclus dans les distributions Linux prises en charge, et à s'assurer que les paquets publiés protègent effectivement les utilisateurs contre les vulnérabilités censées être corrigées. Ce processus est appelé "backporting", car il consiste à prendre un correctif qui s'applique à une version plus récente d'un paquet et à l'adapter pour qu'il fonctionne dans des versions plus anciennes comme celles présentes dans les distributions Linux couvertes par ELS. En conséquence, beaucoup de temps est consacré à l'examen du code et à l'exécution de tests.
Lorsque l'on travaille sur les CVE, l'analyse permet parfois d'identifier de nouveaux problèmes qui n'avaient pas été pris en compte au moment où ils ont été traités à l'origine. L'équipe ELS s'efforce toujours d'informer de manière responsable les projets open source en amont et de contribuer au code de ces projets. Cela présente l'avantage supplémentaire d'améliorer la sécurité de l'écosystème informatique dans son ensemble. Bien entendu, les corrections de ces nouveaux problèmes sont également fournies aux utilisateurs d'ELS, car les systèmes qu'ils utilisent ne sont plus pris en charge par le fournisseur d'origine et ne recevraient pas le code corrigé par d'autres moyens.
L'un des derniers résultats de cette activité, déjà inclus dans les mises à jour disponibles, concerne un total de 92 vulnérabilités dans binutils uniquement. Ces vulnérabilités vont des "dépassements de tampon" aux problèmes d'"utilisation après gratuité" et ont des scores CVSS très variés - elles ne sont pas toutes critiques, mais beaucoup le sont.
En tant que paquetage fondamental, binutils contient des outils largement utilisés dans l'analyse de code, le débogage et les opérations de liaison, et sont également utilisés par de nombreux autres outils tiers. Vous n'avez pas besoin de faire un travail de développement réel pour avoir binutils dans votre système, vous l'avez probablement comme dépendance pour une autre application ou un autre outil qui est déployé. Garder binutils à jour assurera le fonctionnement correct et sécurisé de plus que binutils lui-même.
Dans certains de ces CVE, l'équipe a identifié des situations où les corrections originales des CVE ont introduit de nouveaux problèmes comme un comportement non défini ou d'autres problèmes de sécurité. Ces problèmes ont nécessité un développement de code interne pour les résoudre. Ce code a ensuite été soumis à des projets open source en amont, qui l'ont accepté et intégré à ces projets, ou ont préparé leur propre code pour corriger les nouveaux problèmes signalés.
Un exemple de ceci est CVE-2018-7568. L'équipe ELS a identifié une situation dans laquelle la correction de code soumise à l'origine causerait un comportement non défini, et cela a été signalé au projet amont ici.
Le problème a été repéré par Nikita Popov, un membre de l'équipe, alors qu'il passait en revue les changements apportés au correctif CVE original pour s'assurer qu'il ne se briserait pas sur les anciennes distributions Linux et qu'il "jouait bien" avec le reste du code.
Il s'avère que le patch pour CVE-2018-7568 inclut un type non signé utilisé comme compteur de longueur de bloc (block_len). Lorsqu'il est utilisé dans des expressions comme
xptr + block_len < xptr
dans les bonnes situations - block_len étant non signé - ceci pourrait être complètement omis par le compilateur qui pourrait optimiser cette ligne. Ce type d'expressions est explicitement interdit par la norme ISO C précisément pour cette raison, et différents compilateurs, ou le même compilateur sous différentes architectures/plateformes, pourraient aborder cette situation de différentes manières, provoquant ainsi un comportement indéfini. Le rapport de bogue soumis par l'équipe comprend une explication plus complète du problème et la soumission du code qui le corrige.
Il a été accepté dans la base de code amont et fait maintenant partie du paquet binutils, et il a même déjà été perfectionné par d'autres développeurs. Il s'agit d'un exemple classique de la manière dont le développement d'un projet Open Source peut être réalisé correctement, et l'équipe ELS travaille activement dans ce domaine.
Un problème avec le correctif pour CVE-2018-12700, qui ne semble pas empêcher la situation qu'il prétend résoudre et qui peut encore être déclenché par nos tests, a également été signalé en amont et est en attente de clarification.
Après le travail qui a été effectué dans cette mise à jour de binutils, Pavel Mayorov, un autre développeur travaillant sur binutils, a commenté que " pour autant que je sache, nous avons traité toutes les CVE existantes pour binutils... mais nous attendons toujours une réponse concernant le problème de la CVE-2018-12700 ".
DERNIÈRES RÉFLEXIONS
Maintenir les anciens systèmes à jour est une exigence nécessaire, et pas seulement d'un point de vue strictement sécuritaire, même si cela est important en soi. Il est également nécessaire d'atteindre et de maintenir la conformité avec plusieurs normes commerciales qui stipulent les délais de mise à jour.
En faisant confiance à ELS comme source de vos correctifs et mises à jour de sécurité, le travail minutieux effectué par l'équipe se traduit directement par la sécurité et la conformité de vos systèmes aux exigences et par votre propre tranquillité d'esprit. En conséquence, vos systèmes sont protégés et stables, ce qui vous permet de vous concentrer sur les besoins spécifiques de votre entreprise.
ADDENDUM
Liste complète des CVEs couverts par la dernière mise à jour de binutils disponible par le biais du service Extended Lifecycle Support, regroupés par année CVE.
CVE-2016-2226 : Correction d'un débordement d'entier dans la fonction string_appends dans cplus-dem.c
CVE-2016-4487 : Correction de la vulnérabilité use-after-free dans libiberty
CVE-2016-4488 : Correction de la vulnérabilité "use-after-free" dans libiberty
CVE-2016-4489 : Correction d'un débordement d'entier dans libiberty
CVE-2016-4490 : Correction d'un dépassement d'entier dans cp-demangle.c dans libiberty
CVE-2016-4492 : Correction d'un dépassement de tampon dans la fonction do_type de cplus-dem.c dans libiberty.
CVE-2016-4493 : Correction d'une lecture hors limites dans demangle_template_value_parm et do_hpacc_template_literal.
CVE-2016-6131 : Correction d'une boucle infinie, débordement de pile
CVE-2017-7223 : Correction d'un dépassement de tampon global (de taille 1)
CVE-2017-7224 : Correction d'une écriture invalide (de taille 1) lors du désassemblage.
CVE-2017-7225 : Correction d'une déréférence de pointeur NULL et d'une écriture invalide.
CVE-2017-7226 : Correction d'un buffer over-read basé sur le tas de taille 4049
CVE-2017-7227 : Correction d'un dépassement de tampon basé sur le tas.
CVE-2017-7299 : Correction d'une lecture invalide (de taille 8) dans la section ELF reloc.
CVE-2017-7300 : Correction d'une surlecture de tampon basée sur le tas (off-by-one)
CVE-2017-7301 : Correction de la vulnérabilité off-by-one
CVE-2017-7302 : Correction d'une lecture invalide (de taille 4)
CVE-2017-7614 : Correction d'un problème de comportement indéfini
CVE-2017-8393 : Correction de l'erreur de dépassement de tampon global
CVE-2017-8394 : Correction d'une lecture invalide de taille 4 due au déréférencement du pointeur NULL.
CVE-2017-8396 : Correction d'une lecture invalide de taille 1
CVE-2017-8398 : Correction d'une lecture invalide de taille 1 pendant le vidage des informations de débogage.
CVE-2017-8421 : Correction d'une vulnérabilité de fuite de mémoire
CVE-2017-9742 : Correction d'un dépassement de tampon
CVE-2017-9744 : Correction d'un dépassement de tampon
CVE-2017-9747 : Correction d'un dépassement de tampon
CVE-2017-9748 : Correction d'un débordement de tampon
CVE-2017-9749 : Correction d'un dépassement de tampon
CVE-2017-9753 : Correction d'un dépassement de tampon
CVE-2017-9754 : Correction d'un dépassement de tampon
CVE-2017-12448 : Correction de l'utilisation après la libération.
CVE-2017-12449 : Correction d'une lecture hors limites du tas.
CVE-2017-12455 : Correction de la lecture hors limites du tas.
CVE-2017-12457 : Correction du déréférencement NULL
CVE-2017-12458 : Correction de la lecture hors limites du tas.
CVE-2017-12459 : Correction de l'écriture hors limites dans le tas.
CVE-2017-12450 : Correction de l'écriture hors limites dans le tas
CVE-2017-12452 : Correction de la lecture hors limites du tas.
CVE-2017-12453 : Correction d'une lecture hors limites du tas.
CVE-2017-12454 : Correction d'une lecture de mémoire arbitraire
CVE-2017-12456 : Correction de la lecture hors limites du tas
CVE-2017-14333 : Correction d'un débordement d'entier, et blocage à cause d'une boucle qui prend du temps.
CVE-2017-12451 : Correction d'une lecture de pile hors limites
CVE-2017-12799 : Correction d'un dépassement de tampon
CVE-2017-13710 : Correction d'une déréférence de pointeur NULL
CVE-2017-14130 : Correction de la surlecture de tampon basée sur le tas de _bfd_elf_attr_strdup.
CVE-2017-14932 : Correction d'une boucle infinie
CVE-2017-14938 : Correction de l'allocation excessive de mémoire
CVE-2017-14940 : Correction d'une déréférence de pointeur NULL
CVE-2017-15020 : Correction de la surlecture de tampon basée sur le tas de parse_die.
CVE-2017-15022 : Correction de la déréférence du pointeur NULL de bfd_hash_hash.
CVE-2017-15225 : Correction d'une erreur de division par zéro
CVE-2017-15938 : Correction de find_abstract_instance_name lecture mémoire invalide, défaut de segmentation.
CVE-2017-15939 : Correction d'une déréférence de pointeur NULL
CVE-2017-15996 : Correction d'un dépassement de tampon sur l'en-tête d'archive fuzzé
CVE-2017-16826 : Correction d'un accès mémoire invalide
CVE-2017-16827 : slurp_symtab invalide libre
CVE-2017-16828 : Correction d'un débordement d'entier et d'un dépassement de tampon basé sur le tas.
CVE-2017-16831 : Correction d'un dépassement d'entier ou d'une allocation de mémoire excessive
CVE-2017-17080 : Correction de la surlecture de tampon basée sur le tas de bfd_getl32.
CVE-2017-17121 : Correction d'une violation d'accès mémoire
CVE-2017-17123 : Correction d'une déréférence de pointeur NULL
CVE-2017-17124 : Correction de la consommation excessive de mémoire ou du dépassement de tampon basé sur le tas.
CVE-2017-17125 : Correction d'un dépassement de tampon
CVE-2018-6323 : Correction d'un débordement d'entier non signé
CVE-2018-6543 : Correction d'un débordement d'entier
CVE-2018-6759 : Correction d'un défaut de segmentation
CVE-2018-7208 : Correction d'un défaut de segmentation
CVE-2018-7568 : Correction d'un débordement d'entier
CVE-2018-7569 : Correction d'un débordement ou d'un sous-exécution d'entier
CVE-2018-7642 : Correction du déréférencement de pointeur NULL de aout_32_swap_std_reloc_out
CVE-2018-7643 : Correction d'un débordement d'entier
CVE-2018-8945 : Correction d'un défaut de segmentation
CVE-2018-13033 : Correction de l'allocation excessive de mémoire
CVE-2018-10373 : Correction d'un déréférencement de pointeur NULL
CVE-2018-10535 : Correction d'un déréférencement de pointeur NULL
CVE-2018-18309 : Correction d'une déréférence d'adresse mémoire invalide
CVE-2018-18605 : Correction d'un mauvais traitement des fusions de sections
CVE-2018-18606 : Correction d'un déréférencement de pointeur NULL
CVE-2018-18607 : Correction d'une déréférence de pointeur NULL dans elf_link_input_bfd
CVE-2018-19931 : Correction d'un dépassement de tampon basé sur le tas dans bfd_elf32_swap_phdr_in
CVE-2018-19932 : Correction d'un dépassement d'entier et d'une boucle infinie
CVE-2018-20002 : Correction de la consommation de mémoire
CVE-2018-20623 : Correction de l'utilisation après libre dans la fonction d'erreur
CVE-2018-20671 : Correction d'une vulnérabilité par dépassement d'entier
CVE-2018-1000876 : Correction d'un débordement d'entier déclenchant un débordement de pile
CVE-2019-9073 : Correction de l'allocation excessive de mémoire
CVE-2019-9075 : Correction d'un dépassement de tampon basé sur le tas dans _bfd_archive_64_bit_slurp_armap
CVE-2019-9077 : Correction d'un dépassement de tampon basé sur le tas dans process_mips_specific
CVE-2019-12972 : Correction d'une surlecture de tampon basée sur le tas dans _bfd_doprnt.
CVE-2019-14444 : Correction d'un débordement d'entier
CVE-2019-17450 : Correction de la récursion infinie
