web-dev-qa-db-fra.com

Systemd est-il un tunnel de bureau-balles à la main à la main, un souci de sécurité?

Le 2017-09-02 Peter Wullinger a écrit :

☑ Connexions tunnelées à DBU distants
[.____] ☑ Hardcode SSH (sans chemin)
[.____] ☑ avoir échapper, analyser, bug malaise
[.____] ☑ Ne documentez pas de cela

Quand on utilise le -H ou --Host Option au programme systemctl , SystemD indique à sa bibliothèque D-Bus d'exécuter ssh sous les couvertures exécutant un programme nommé systemd-stdio-bridge sur la machine distante. Ce programme agit comme une pompe de message simple entre le courtier D-bus sur la machine distante et systemctl, le client D-Bus, sur la machine locale. systemctl ne fait que parler au bus de bureau qui est proxé sur SSH et systemd-stdio-bridge, comme si cela parlait au système local un.

En réponse, d'autres personnes se demandaient que cela pourrait être un autre problème de sécurité SystemD. Est-ce?

(Ce n'est pas une question sur la sécurité SSH en général, mais plutôt en ce qui concerne ce mécanisme SystemD spécifique. Il existe d'autres questions à examiner pour la sécurité générale de SSH, telles que " Quelles sont les implications de la sécurité du tunneling SSH? ". NOR ce n'est pas non plus une question comme" quelles sont les implications de sécurité de SystemD comparées à Systemv init? ". Pour commencer, Van Smoorenburg rc des dossiers.)

14
JdeBP

Élaborer sur un court tweet fabriqué après avoir creusé une pile de documentation SystemD et code source (aucun d'entre eux agréable, ce qui pourrait expliquer le ton).

Le tout a été déclenché par ce tweet , qui indique que SystemD ne signifie pas (comme indiqué par le développeur principal plusieurs fois) valide toutes les entrées.

systemctl --Host <Host>est documenté Pour exécuter l'opération spécifiée à distance via SSH.

Comment cela fonctionne est

  1. systemCTL transmet le paramètre d'hôte vers le bas à sd_bus_open_system_remote() , qui --a une fonctionnalité non documentée ( rapport de bogue ) - aussi supporte = <hostspec>:<machine> Notation pour le dire de se connecter à un bus sur un hôte distant dans un conteneur donné.

  2. sd_bus_open_system_remote() construit une adresse de bus spéciale unixexec:path=ssh,argv1=-xT,argv2=--,argv3=<hostname>,argv4=systemd-stdio-bridge <container>. Notez que cela choisit ssh de $PATH Et systemd-stdio-bridge À partir de la télécommande $PATH De l'utilisateur cible sur la machine cible. Cette adresse de bus spéciale semble avoir été ajoutée à la spécification DBU et à la mise en œuvre de référence par l'un des auteurs SystemD lui-même .

  3. Cette chaîne est analysée (encore localement) par bus_start_address() qui prend en charge Commandes proxy DBUS arbitraires via unixexec.

  4. Et enfin, cela déclenche bus_start_address() Pour exécuter la ligne de commande fournie et faire des DBU via un tuyau à STDIN/STDOUT de ce programme.

À mon compte, il s'agit de trois couches d'indirection sans papiers pour obtenir une fonctionnalité de commodité simple que vous obtiendrez également avec ssh <Host> systemctl --machine <machine>.

Une telle magie implicite obtient généralement mon chercheur de bogue interne sur pilote automatique.

Eh bien, il y en avait un, mais ce n'est pas critique: avant un - COMMITE récent , systemctl _ _ dépasserais tout dépassant le premier : Du nom d'hôte, mais transmettez tout le reste à ssh comme premier argument de ligne de commande. Ceci est toujours exécuté localement et assez évident de la ligne de commande, de sorte qu'il ne semble pas que beaucoup de problème.

Mais modulo la nature convoluée de tout cela, avoir un proxy distant est probablement l'une des méthodes les plus sûres de manipulation de cela. -L Est problématique, car cela vous oblige à activer le transfert de port SSH et le nettoyage approprié et une sécurité appropriée pour les prises locales. -W Ne prend pas en charge les sockets de domaine UNIX (à partir de maintenant). À tout le moins, la méthode actuelle vous permet d'utiliser ForceCommand.

La vraie menace de sécurité réside probablement dans la nature de l'ensemble du processus remplaçant quelque chose qui peut être fait explicitement avec un processus largement non documenté et automatisé qui permet également de réduire de nombreuses hypothèses sur le chemin.

4
dhke