Notre travail en commun avec
Sysdream nous a amené à proposer la notion de
profil de sécurité dans PlantUML.
À partir de la version
1.2020.11, vous devez choisir quel
profil de sécurité utiliser dans PlantUML. Le profil par défaut est
LEGACY
. Il reproduit le comportement des anciennes versions de PlantUML. Cela veut dire que vous pouvez sans problème mettre à jour votre configuration vers la version
1.2020.11. Toutefois, après la mise à jour, il serait sage que vous choisissiez alors un mode plus approprié selon la façon dont vous utilisez PlantUML.
Tout ceci est nécessaire car PlantUML est utilisé dans de nombreuses situations différentes qui nécessitent des réglages de sécurité différents.
Si vous utilisez une version antérieure à la version
1.2020.11 et que votre système est accessible depuis Internet,
il est vraiment important que vous mettiez à jour votre serveur car les anciennes versions de PlantUML exposent un peu plus de données sur Internet qu'il est nécessaire. De fait, le nouveau mode par défaut
LEGACY
est plus sécurisé que le mode de fonctionnement des anciennes versions.
Le profil de sécurité peut être positionné de plusieurs façons :
- Avec la variable d'environnement système
PLANTUML_SECURITY_PROFILE
- Avec la variable d'environnement Java
PLANTUML_SECURITY_PROFILE
En pratique, vous pouvez faire :
set PLANTUML_SECURITY_PROFILE=INTERNET
ou bien :
setenv PLANTUML_SECURITY_PROFILE INTERNET
Une autre façon est d'utiliser la ligne de commande (ne pas oublier le
-D
) :
java -DPLANTUML_SECURITY_PROFILE=INTERNET -jar /path/to/plantuml.jar ...
Ou encore si vous utilisez Java et PlantUML comme bibliothèque :
System.setProperty("PLANTUML_SECURITY_PROFILE", "INTERNET");
Il y a cinq profils de sécurité différents :
UNSECURE
Quand PlantUML est en mode
UNSECURE
mode, PlantUML peut avoir accès à tous les fichiers locaux du serveur sur lequel il tourne ainsi qu'à n'importe quelle URL.
Le nom de ce profil ne signifie pas que vous ne devez pas l'utiliser. Par exemple, si vous utiliser PlantUML depuis un script pour générer votre documentation, il n'y a aucun problème à utiliser ce mode.
Cela devient problématique si ce mode est utilisé depuis un serveur Web accessible depuis Internet. En effet, vous n'avez dans ce cas aucun contrôle sur ce que les utilisateurs vont faire dans leurs diagrammes.
LEGACY
Pour l'instant, ce mode est le mode par défaut de PlantUML. Ce mode donne le même comportement que les anciennes versions de PlantUML: accès complet aux fichiers locaux et aux URL. En conséquence, vous pouvez vous mettre à jour vers la version
1.2020.11 sans aucun risque de régressions.
Ceci dit, après votre mise à jour, vous devriez choisir un profil de sécurité autre que
LEGACY
parce que ce mode sera supprimé dans les prochaines versions de PlantUML et le mode par défaut sera plus restrictif.
INTERNET
Ce mode a été conçu pour les serveurs connectés à Internet
Quand PlantUML est en mode
INTERNET
, il est impossible d'accéder à des fichiers locaux (sauf si vous définissez des listes d'autorisation, voir plus bas). De plus, toutes les URLs standards sur les ports 80 et 443 sont accessibles. Si vous avez besoin de ports spécifiques (par exemple, 8080 pour certaines ressources disponibles sur un serveur Intranet), vous devez aussi définir une liste d'autorisation.
ALLOWLIST
Dans le mode
ALLOWLIST
, PlantUML n'a accès à aucun fichier local ou à aucune URL. Il faut définir des listes d'autorisation pour explicitement donner accès à ces ressources.
SANDBOX
Dans le mode
SANDBOX
, PlantUML n'a accès à aucun fichier local ou à aucune URL. Même les listes d'autorisation sont ignorées. Ainsi, ce mode est complètement fermé.
Le principal intérêt de ce mode est de
tester: si quelqu'un réussit à avoir accès à quelque chose en utilisant ce mode, cela signifie qu'il y a un trou de sécurité quelque part. Dans ce cas, nous corrigerons cette faille.
Il y a trois façons de définir des listes d'autorisation :
plantuml.allowlist.path
pour des fichiers locauxplantuml.include.path
encore pour des fichiers locauxplantuml.allowlist.url
pour des ressources distantes (URL)
Ces variables sont positionnées de la même façon que
PLANTUML_SECURITY_PROFILE
.
plantuml.allowlist.path
Cette variable détaille les dossiers auxquels les utilisateurs auront accès. Il faut se servir du point-virgule
;
(sous Windows) ou du deux-points
:
(sous Linux) pour séparer les dossiers.
java -DPLANTUML_SECURITY_PROFILE=INTERNET -Dplantuml.allowlist.path=/usr/common/:/usr/plantuml/ ...
plantuml.include.path
Cette variable est très proche de
plantuml.allowlist.path
. La seule différence est que les utilisateurs n'auront pas à donner de chemin complet lorsqu'ils voudront utiliser un fichier présent dans un de ces répertoires: PlantUML va chercher automatiquement les fichiers dans ces dossiers.
java -DPLANTUML_SECURITY_PROFILE=INTERNET -Dplantuml.include.path=c:/windows/plantuml/ ...
plantuml.allowlist.url
Cette variable détaille les URLs auxquelles les utilisateurs auront accès. Il faut utiliser le point-virgule
;
(que ce soit sous Windows ou sous Linux) pour donner plusieurs URLs.
java -DPLANTUML_SECURITY_PROFILE=ALLOWLIST -Dplantuml.allowlist.url=https://plantuml.com/;http://somelocalserver:8080/commons/ ...