Votre fichier .ovpn peut exécuter du code, pas seulement acheminer le trafic
Un profil qui nomme un utilitaire up ou down exécute du code avec vos privilèges. Vérifiez le chemin, la propriété, le nettoyage et le réglage script-security.
La plupart des gens lisent un fichier .ovpn comme la page de réglages d’un routeur : des adresses, des routes, une liste de chiffrements. La partie qui exécute du code se trouve près du bas, à côté de directives qui ressemblent à de la plomberie, et elle s’exécute avec les privilèges que le client possède déjà. C’est la faille qu’exploite un profil négligent ou malveillant, et c’est aussi la faille qui transforme un utilitaire DNS utile en problème de support trois semaines plus tard. La directive d’événement, le niveau de sécurité et le propriétaire du fichier décident de ce qui peut arriver ; le contenu du script décide de ce qui arrive réellement. Lisez les quatre avant de vous connecter.
Un profil qui lance un utilitaire est un programme, pas un fichier de réglages
Des directives comme route et dhcp-option décrivent l’état que le client doit établir, et le client les traite comme des données. Un script up est différent : le client le lance comme un processus et lui remet un environnement rempli de détails de connexion, si bien que tout ce que son auteur a écrit s’exécute avec les droits de votre compte. Sur un portable où l’utilisateur est administrateur, c’est une porte large pour un fichier arrivé en pièce jointe ou collé depuis un fil de forum. La distinction n’est pas stylistique, c’est la différence entre configuration et code.
Le mythe qu’il convient de retirer est qu’un profil ne peut que rediriger le trafic. Un utilitaire qui exécute ip route add et un autre qui exécute curl vers un hôte distant sont le même mécanisme, et le profil est identique vu de l’extérieur. Rien dans l’apparence du fichier ne vous dit lequel vous avez, c’est pourquoi la revue doit atteindre le script lui-même.
Ce qui décide réellement de l’exécution, et à quoi ressemblent les lignes qui l’autorisent
Trois choses commandent un utilitaire : la directive d’événement qui le nomme, le niveau script-security qui l’autorise et l’implémentation propre à la plateforme du client. Un profil peut demander un crochet et ne rien voir se produire, car un client mobile ou une compilation de bureau allégée peut ne pas implémenter cet événement du tout. De même, un profil qui demande plus de permission que sa fonction n’en a besoin vous dit quelque chose sur son origine. Un niveau de permission est une capacité, pas une approbation. Les lignes qui l’autorisent ressemblent à ceci, avec un chemin qui tient la place du vôtre.
script-security 2
up /etc/openvpn/update-resolv-conf.sh
down /etc/openvpn/update-resolv-conf.shLe niveau 0 refuse les programmes externes et le niveau 1, celui par défaut, n’autorise que les exécutables intégrés du client, donc un crochet exige 2 ou plus ; le niveau 3 existe surtout pour transmettre des mots de passe anciens et mieux vaut l’éviter. Un profil livré avec un crochet a besoin à la fois de la directive et de ce niveau, c’est pourquoi une ligne près du bas du fichier mérite le même examen que le bloc de certificat. Le manuel OpenVPN énumère les niveaux de permission, et sa formulation mérite d’être lue à côté de ce que le profil demande réellement.
Propriété, chemin et ce qu’on donne à manger à l’utilitaire
Un profil auquel vous faites confiance mais qui pointe vers un script qu’un autre compte peut réécrire n’est pas un arrangement fiable, car la revue d’hier ne décrit plus ce qui s’exécute aujourd’hui. Vérifiez le propriétaire et le mode de l’utilitaire, et vérifiez que le chemin configuré résout vers le fichier que vous avez inspecté et non vers un nom que quelque chose d’autre peut masquer. Les arguments et l’environnement méritent le même regard : le client transmet des détails de connexion au crochet, et un utilitaire qui journalise tout son environnement écrit peut-être des identifiants dans un ticket de support. Préférez une intégration documentée de l’opérateur ou de la plateforme à un script DNS copié depuis un billet sans rapport, car deux gestionnaires de résolveurs qui se disputent le même fichier produisent une panne qui ressemble à un VPN cassé.
Quand vous signalez un crochet défaillant, masquez l’environnement avant de le coller où que ce soit. Le vidage qui vous aide à déboguer peut aussi porter le jeton qui vous authentifie.
Les échecs de nettoyage apparaissent une fois le tunnel parti
Un utilitaire up ajoute des routes et des réglages de résolveur, et l’utilitaire down est censé les retirer à nouveau. Quand le crochet down manque, échoue en silence ou ne s’exécute jamais parce que le client a été tué, les restes survivent à la session. Le trafic emprunte alors un chemin que personne n’avait prévu et les noms se résolvent via un résolveur qui aurait dû être retiré, tandis que le tunnel lui-même semble sain. Ces symptômes arrivent après la déconnexion, c’est pourquoi on accuse le réseau plutôt que le profil.
Testez le démontage comme une étape à part : montez le tunnel, notez les routes et le résolveur, coupez-le, puis confirmez que les deux ont disparu. Un profil qui se connecte proprement peut tout de même laisser de l’état derrière lui, et un code de sortie nul de l’utilitaire ne prouve pas que le résolveur a fini là où vous croyez.
Examiner l’utilitaire et garder une sortie
Lisez le script de bout en bout en cherchant trois choses : des commandes qui exigent des privilèges, des chemins codés en dur qui peuvent ne pas exister sur votre système, et tout appel réseau qu’il effectue. Regardez ensuite comment il échoue, car un utilitaire qui avale les erreurs transforme une erreur de configuration en mystère. Si vous ne pouvez pas dire en une phrase ce que fait le script et qui peut le modifier, vous n’êtes pas prêt à l’activer. Un profil qui demande plus de privilèges que cette phrase n’en exige est le signal de s’arrêter.
Conservez le dernier profil qui fonctionnait et l’utilitaire auquel il renvoyait dans un stockage protégé, les deux versions notées, pour qu’un retour arrière soit une copie et non une reconstruction au pire moment possible. Si l’utilitaire n’existe que pour une distribution ou une version de client qui n’en a plus besoin, retirez-le dans la configuration qui possède le réglage plutôt que d’élever les privilèges jusqu’à ce que les erreurs cessent. C’est la sortie : moins de pièces mobiles, pas plus de permission.