Les problèmes de D-Bus sur le bureau Linux
(blog.vaxry.net)- D-Bus est un bus de communication inter-applications dont le concept est utile, mais dont l’implémentation est très médiocre et non standardisée
- La documentation standard est incomplète et incohérente, et les implémentations réelles ne la respectent pas, ce qui provoque un effondrement de la compatibilité
- Les failles de sécurité sont aussi graves : une application peut lire les données secrètes d’une autre lorsque le coffre est déverrouillé
- En réponse, l’auteur développe un nouveau système de bus,
hyprtavern, et un protocole,hyprwire hyprtaverncherche à corriger les problèmes structurels de D-Bus grâce à une vérification stricte des types, une gestion intégrée des permissions, un coffre de secrets sécurisé (kv), etc.
Le concept de D-Bus et ses limites
- D-Bus est un système qui permet aux applications et services d’exposer des méthodes et propriétés sur un bus partagé et de s’appeler mutuellement
- Par exemple, si une application qui fournit un service météo enregistre une API sur le bus, d’autres applications peuvent la découvrir et l’utiliser
- Mais D-Bus souffre d’une conception trop permissive et peu structurée, qui permet d’enregistrer ou d’appeler n’importe quel objet avec des méthodes arbitraires
- D’où un effet « Garbage in, garbage out »
La confusion entre documentation standard et implémentations
- La documentation standard de D-Bus est éparpillée en plusieurs endroits, inachevée et difficile à interpréter
- En pratique, les implémentations ne la suivent pas, ou utilisent arbitrairement des spécifications différentes
- L’auteur explique qu’en développant xdg-desktop-portal-hyprland, il a implémenté la spécification
restore_token,
mais que toutes les applications utilisaient à la place le champ non officielrestore_data, rendant l’ensemble incompatible - Le type variant (
a{sv}) de D-Bus, qui autorise le transport de données arbitraires, est désigné comme une cause majeure de rupture de cohérence des protocoles
Les défauts de l’architecture de sécurité
- D-Bus ne dispose ni de gestion centralisée des permissions ni de mécanisme de refus
- Toutes les applications peuvent voir les appels des autres et, sans protection explicite, l’accès est illimité
- Des coffres de secrets comme gnome-keyring ou kwallet sont eux aussi structurellement fragiles
- Une fois le coffre déverrouillé, toutes les applications peuvent accéder à toutes les données secrètes
- L’auteur qualifie cela de « plaisanterie en matière de sécurité »
Une nouvelle alternative : hyprwire et hyprtavern
- Pour résoudre les problèmes de D-Bus, l’auteur développe un nouveau système de bus appelé
hyprtavernhyprwireest un protocole wire simple et cohérent inspiré de la conception de Wayland- Il se caractérise par l’imposition des types, des connexions rapides et une structure simple
hyprtavernrepose sur une architecture où les applications enregistrent des objets basés sur des protocoles et se découvrent mutuellement- Il fournit un système de permissions intégré, un respect strict des protocoles, une API simplifiée et des paramètres de sécurité par défaut
hyprtavern-kv (coffre clé-valeur sécurisé)
- Un protocole core destiné à remplacer la Secrets API de D-Bus
- Les secrets enregistrés par une application ne peuvent être lus que par cette application et ne peuvent pas être énumérés
- Un contrôle d’accès fondé sur l’ID pour les applications Flatpak, Snap et AppImage est également prévu
- Les données sont toujours stockées chiffrées et, avec un mot de passe défini, il est possible d’obtenir de véritables garanties de sécurité
- Toutes les applications peuvent bénéficier par défaut d’un coffre de secrets sécurisé
État du développement et suite prévue
hyprtavernen est encore aux premiers stades du développement, avec une utilisation interne prévue plus tard dans Hyprland 0.54- L’adoption initiale devrait rester limitée, mais une transition progressive est possible
- Contrairement à D-Bus, plusieurs bus de session peuvent fonctionner en parallèle, ce qui permet aussi d’écrire des proxys de compatibilité
- Le projet est écrit en C++, et des bindings Rust, Go et Python peuvent aussi être mis en place facilement
- L’auteur insiste sur le fait que « D-Bus ne peut pas être réparé à la racine et doit être entièrement repensé »
Résumé de la FAQ
- Face à la critique du « réinvention de la roue », l’auteur répond que la conception fondamentale de D-Bus est cassée, rendant une refonte inévitable
- La documentation est actuellement en WIP (travail en cours) et sera publiée une fois terminée
- Wayland n’a pas été utilisé car il n’est pas adapté à un usage IPC généraliste
- Il est possible d’écrire un proxy compatible D-Bus (
hyprtavern-dbus-notification-proxy) - Le choix du C++ plutôt que Rust s’explique par le fait que le C++ est le langage principal du développeur
- Sur le plan de la sécurité, les attaques
LD_PRELOADsont difficiles à bloquer complètement, mais l’architecture augmente le coût de l’attaque et les chances de détection
Conclusion
- D-Bus est présenté comme un goulot d’étranglement de l’écosystème bureau Linux en raison de son caractère non standard, peu sûr et incohérent
hyprtavernest en cours de développement comme bus IPC moderne et sécurisé pour le remplacer,
avec une adoption progressive attendue autour de l’écosystème Hyprland- L’objectif est de « rendre l’espace utilisateur (
userspace) plus agréable »
1 commentaires
Avis Hacker News
En voyant la controverse autour de la faille d’accès au stockage de secrets de GNOME, j’ai trouvé ridicule que l’équipe GNOME nie le problème en s’appuyant sur le modèle de sécurité selon lequel « les applis non fiables ne peuvent pas communiquer avec le service de secrets »
On dirait vraiment que GNOME est un projet géré par des clowns
Quelqu’un disait vouloir « construire lui-même un nouveau bus », alors j’ai suggéré de réutiliser Binder, déjà déployé sur des milliards d’appareils
Binder est l’IPC central d’Android, avec bien plus de développeurs et un code déjà éprouvé
Article connexe : LWN, liste de diffusion Rust-for-Linux
J’attendais Hyprwire et Hyprtavern, mais il n’y a presque pas de documentation ni de tests
C’est dommage, ces projets auraient pu constituer un bon point de départ
Les développeurs d’OpenWrt ont déjà créé il y a longtemps une alternative appelée ubus
Référence : documentation ubus, comparaison ubus vs dbus
En revanche, le modèle de sécurité est quasiment inexistant, ce qui se comprend vu la nature d’OpenWrt
L’un des problèmes de D-Bus, ce sont les failles provoquées par les extensions de navigateur qui communiquent avec GNOME/KDE
Une simple visite de site web pouvait suffire à saturer des API D-Bus et à figer le desktop
Pour un chercheur en sécurité, D-Bus est vraiment un domaine qui mérite d’être exploré
D-Bus est ce qui se rapproche le plus de XPC, COM et de l’IPC d’Android sur le desktop Linux
Mais la fragmentation du desktop rend difficile la création d’une pile de développement unifiée
Ce qui est conçu pour GNOME ne sert à rien sur KDE, et XFCE ou Sway partent encore dans une autre direction
Je découvre seulement maintenant que des coffres de secrets comme KWallet ou GNOME Keyring sont en pratique accessibles à toutes les applis tant qu’ils sont déverrouillés
En vérifiant via l’interface graphique
seahorse, je n’y ai trouvé pour l’essentiel que des clés liées à Chromium ou des jetons de compte JetBrainsIl n’y a pas de mots de passe en clair, mais je me dis qu’une appli malveillante pourrait peut-être trouver davantage en fouillant dans les données de Chromium
Si le système ne signale pas les accès, peu importe finalement quel logiciel gère cela
Je me demande : « pourquoi a-t-on besoin d’un protocole de bus générique ? »
Utiliser HTTP ou un simple protocole JSON sur un socket de domaine Unix devrait suffire
Gestion des permissions, redirection SSH, montages de conteneurs : tout cela est déjà pris en charge
D-Bus a une structure compliquée avec ses services, interfaces, chemins et méthodes, mais l’identification des messages reste incomplète, et il faut connaître les détails du protocole propre à chaque appli
Au final, même la mise en proxy devient difficile, et l’ensemble est inutilement complexe
La conception de D-Bus me semble illustrer la loi de l’arbitraire : la meilleure solution n’est pas forcément celle qui est choisie
Comme il existe d’innombrables frameworks meilleurs que React, mais qui restent inconnus et sombrent dans l’oubli
Le fait que GNOME ait répondu à un signalement de faille en invoquant les restrictions d’accès du sandbox Flatpak m’a rappelé cet ancien billet de blog Microsoft
Et je ne comprends vraiment pas pourquoi ils ont publié la citation uniquement sous forme de capture d’écran, empêchant toute copie