Vulnérabilité dans ld.so OpenBSD

Chargeur dynamique ld.so, inclus avec OpenBSD, peut, sous certaines conditions, SUID/SGID- les applications quittent la variable d'environnement LD_LIBRARY_PATH et permettent ainsi de charger du code tiers dans le cadre d'un processus exécuté avec des privilèges élevés. Des correctifs qui corrigent la vulnérabilité sont disponibles pour les versions 6.5 и 6.6. Correctifs binaires (patch système) pour les plateformes amd64, i386 et arm64 sont déjà en production et devraient être disponibles en téléchargement au moment de la publication de cette actualité.

L'essence du problème : pendant le fonctionnement, ld.so extrait d'abord la valeur de la variable LD_LIBRARY_PATH de l'environnement et, à l'aide de la fonction _dl_split_path(), la transforme en un tableau de chaînes - chemins vers les répertoires. S'il s'avère plus tard que le processus en cours est démarré par une application SUID/SGID, alors le tableau créé et, en fait, la variable LD_LIBRARY_PATH sont effacés. Dans le même temps, si _dl_split_path() manque de mémoire (ce qui est difficile en raison de la limite explicite de 256 Ko sur la taille des variables d'environnement, mais est théoriquement possible), alors la variable _dl_libpath recevra la valeur NULL, et une vérification ultérieure de la valeur de cette variable fera sauter l'appel à _dl_unsetenv("LD_LIBRARY_PATH").

Vulnérabilité trouvée par des experts Qualys, aussi bien que plusieurs précédemment révélés problèmes. Les chercheurs en sécurité qui ont identifié la vulnérabilité ont noté la rapidité avec laquelle le problème a été résolu : un correctif a été préparé et des mises à jour ont été publiées dans les trois heures suivant la réception de la notification du projet OpenBSD.

Ajout : Le problème a reçu un numéro CVE-2019-19726. Réalisé sur la liste de diffusion oss-security annonce officielle, y compris un prototype d'exploit fonctionnant sur les architectures OpenBSD 6.6, 6.5, 6.2 et 6.1
amd64 et i386 (l'exploit peut être adapté pour d'autres architectures).
Le problème est exploitable dans l'installation par défaut et permet à un utilisateur local non privilégié d'exécuter du code en tant que root via la substitution de bibliothèque lors de l'exécution des utilitaires chpass ou passwd suid. Pour créer les conditions de mémoire faible nécessaires au fonctionnement, définissez la limite RLIMIT_DATA via setrlimit.

Source: opennet.ru

Ajouter un commentaire