Vulnérabilités

Problème n°15 - Interférence potentielle de la connexion backend dans des environnements multi-utilisateurs ou compromis.

Versions concernées

Toutes les versions antérieures à 3.7.0.

Gravité

Moyenne

Description

Lors de l'établissement d'une connexion backend vers la JVM, les versions antérieures du Wrapper supposaient un niveau de confiance raisonnable pour les processus s'exécutant dans l'environnement local. Bien que la connexion ait été authentifiée, elle s'appuyait sur une clé exposée sur la ligne de commande. Il existait une fenêtre étroite pendant laquelle un processus malveillant pouvait capturer la clé et gagner une condition de course en se connectant avant la JVM.

Sous Windows, le risque de capture de la clé était limité car la clé n'était exposée qu'aux processus s'exécutant sous le même compte utilisateur ou avec des privilèges Administrateur. Cependant, il existait un risque de pipe squatting : un attaquant pouvait potentiellement créer de manière préventive le pipe nommé avant le Wrapper, empêchant ainsi l'établissement de la connexion légitime.

Ces vulnérabilités concernent principalement les systèmes multi-utilisateurs où des utilisateurs non fiables disposent de droits d'exécution locaux, ou les environnements déjà compromis. En cas d'exploitation, l'attaquant local pourrait provoquer un déni de service (empêchant la JVM de se connecter), intercepter des données sensibles échangées entre le Wrapper et la JVM, ou, dans certains cas, envoyer un identifiant de processus (PID) falsifié pour tromper le Wrapper afin qu'il termine un processus non prévu.

À partir de la version 3.7.0, le Wrapper a adopté une posture de sécurité plus stricte qui ne suppose plus un environnement local de confiance. Pour établir un canal réellement sécurisé avec la JVM, plusieurs aspects de la communication backend ont été repensés, de la création du canal à l'authentification et à la vérification de l'intégrité des données.

Les changements les plus notables sont :

Solutions de contournement

Problème n°14 - Méthodes de test activées par défaut.

Versions concernées

Toutes les versions antérieures à 3.6.3.

Gravité

Avertissement

Les applications utilisant le Wrapper 3.5.16 ou supérieur peuvent définir wrapper.disable_tests à TRUE pour bloquer une utilisation abusive potentielle des fonctionnalités de test. Si ce paramètre n'est pas appliqué, le risque de sécurité est élevé pour les applications autorisant l'exécution de code non vérifié — et potentiellement malveillant.

Description

La classe WrapperManager expose plusieurs méthodes conçues pour tester les défaillances courantes des applications. Bien qu'utiles pour les tests, ces méthodes peuvent poser un risque de sécurité si elles sont invoquées par du code non fiable à l'exécution.

Le Wrapper prend en charge l'utilisation d'un Security Manager pour contrôler l'accès à ces fonctionnalités et à d'autres depuis ses toutes premières versions. Cependant, le Security Manager est rarement utilisé par les développeurs, et a donc été déprécié depuis Java 17, puis désactivé au démarrage depuis Java 24.

En alternative, la propriété wrapper.disable_tests a été introduite dans la version 3.5.16 pour désactiver globalement les méthodes de test. Cependant, sa valeur par défaut était FALSE dans toutes les versions antérieures à 3.6.2, ce qui signifie que la propriété devait être explicitement ajoutée à la configuration et définie à TRUE pour être effective.

Si ni le Security Manager ni la propriété wrapper.disable_tests ne sont utilisés pour restreindre l'accès, du code non fiable s'exécutant au sein de l'application (tel qu'un plugin malveillant ou compromis, un fichier JAR ou un module chargé dynamiquement) pourrait invoquer ces méthodes, provoquant des problèmes tels que des ralentissements ou des plantages, menant à une condition de déni de service (DoS).

La version 3.6.3 améliore la posture de sécurité par défaut en changeant la valeur par défaut de wrapper.disable_tests à TRUE, en journalisant un avertissement lorsque la propriété est explicitement définie à FALSE, et en ajoutant des mesures pour empêcher l'exécution non fiable de toute fonctionnalité de test au sein de la JVM.

Solutions de contournement

Problème n°13 - Permissions trop ouvertes des pipes sous Unix.

Versions concernées

Versions de 3.5.8 à 3.5.60.

Gravité

Critique (si des données sensibles sont transmises via le backend, ce qui est possible depuis la version 3.5.57, et que le backend est défini sur PIPE)

Description

Lors de l'utilisation de wrapper.backend.type=PIPE, le Wrapper créait un pipe nommé avec des permissions trop ouvertes. Les éditions Windows ne sont pas concernées et peuvent utiliser PIPE en toute sécurité.

Il existait un problème de sécurité lorsque les propriétés wrapper.app.property étaient utilisées pour transmettre des données sensibles via le backend, car il était possible pour tout utilisateur ayant accès au serveur de consulter le contenu du pipe.

Le type de transmission par défaut utilise SOCKET, qui n'a pas ce problème.

Solutions de contournement

Problème n°12 - Privilège SeImpersonate activé pour les services Windows.

Versions concernées

Toutes les versions antérieures à 3.5.58.

Gravité

Avertissement

Description

Pour des raisons de compatibilité avec les anciennes versions de Windows, Microsoft a décidé que SeImpersonatePrivilege serait activé par défaut pour les services Windows. Ce privilège est automatiquement ajouté par le gestionnaire de contrôle des services (SCM) via l'ajout dynamique du groupe SERVICE lorsqu'un service est démarré.

SeImpersonatePrivilege permet à un processus d'emprunter l'identité d'un autre utilisateur. Bien que cela puisse être utile pour tester le comportement du processus sous différents contextes utilisateur, cela peut également poser des risques de sécurité importants. Le privilège peut en effet être abusé pour s'élever au compte LocalSystem qui possède le niveau de privilèges le plus élevé sur un système Windows.

Ce problème de sécurité ne s'applique qu'aux services configurés pour s'exécuter avec un compte autre que LocalSystem (sinon le service possède déjà les privilèges les plus élevés possibles). Cependant, il est souvent judicieux de s'exécuter sous un compte de service dédié afin de restreindre l'accès de l'application Java sur le système hôte, et inversement, d'empêcher d'autres processus tiers d'accéder à l'application et aux fichiers du Wrapper.

À partir de la version 3.5.58, le Wrapper désactivera SeImpersonatePrivilege lorsqu'il s'exécute en tant que service Windows avec un compte autre que LocalSystem (NT AUTHORITY\SYSTEM). La plupart des applications Java n'auront pas besoin de ce privilège, mais s'il est nécessaire, la propriété wrapper.ntservice.impersonation peut être utilisée pour le réactiver.

Solutions de contournement

Problème n°11 - WrapperManager.log() et caractères '%'.

Versions concernées

Toutes les versions antérieures à 3.5.58.

Gravité

Élevée (si les conditions ci-dessous sont remplies).

Description

L'API Java du Wrapper fournit la méthode WrapperManager.log() pour permettre au code utilisateur de journaliser un message au niveau de journalisation spécifié. Si le second argument, qui est le message à journaliser, contenait un caractère '%', le Wrapper pouvait planter, provoquant un déni de service.

Votre application est à risque si elle utilise des saisies utilisateur qui sont finalement transmises à la méthode WrapperManager.log().

Solutions de contournement

Problème n°10 - Binaires Windows signés avec un certificat révoqué.

Versions concernées

Version 3.5.55.

Gravité

Avertissement

Description

Binaires Windows non signés.

Solutions de contournement

Veuillez utiliser la version 3.5.56, qui est signée avec un certificat EV mis à niveau.

Problème n°9 - Jar signé avec un ancien certificat.

Versions concernées

Versions 3.5.44 et 3.5.45.

Gravité

Avertissement

Description

Le fichier jar est signé avec un ancien certificat de signature de code (expirant le 15/12/2020 mais avec un horodatage valide jusqu'au 27/06/2027).

Le fichier jar peut être exécuté en toute sécurité.

Solutions de contournement

Aucune action particulière n'est requise.

Problème n°8 - Binaires Windows non signés.

Versions concernées

Version 3.5.44.

Gravité

Moyenne

Description

Les binaires Windows (wrapper.exe, wrapperw.exe, wrapper.dll) ne sont pas signés numériquement.

Bien que l'absence de signature ne constitue pas en soi une menace de sécurité, il n'est pas possible de vérifier l'authenticité et l'intégrité des binaires sans signature numérique. Microsoft Defender SmartScreen peut donc bloquer la première exécution et avertir d'un risque de sécurité.

Solutions de contournement

Problème n°7 - Encodage non ANSI et sortie JVM contenant des caractères '%'.

Versions concernées

Versions de 3.5.35 à 3.5.40.

Gravité

Élevée (lorsque wrapper.lang.windows.encoding est utilisé)

Description

À partir de la version 3.5.35, wrapper.lang.windows.encoding permet de modifier l'encodage de la locale utilisée par le processus Wrapper. Cela est utile, par exemple, pour imprimer la sortie des journaux en UTF-8 ou en utilisant un encodage spécifique.

Lorsque wrapper.lang.windows.encoding est défini, le Wrapper lit la sortie de la JVM dans un mode différent. Ce mode présente un bogue où un caractère pourcentage '%' dans la sortie de la JVM pouvait provoquer le plantage du Wrapper.

Votre application est particulièrement exposée si les saisies des utilisateurs clients peuvent se retrouver dans les journaux, la rendant vulnérable aux attaques par déni de service.

Solutions de contournement

Problème n°6 - Messages de sortie UTF-8 volumineux sous Windows.

Versions concernées

Version 3.5.35.

Gravité

Élevée

Description

wrapper.lang.windows.encoding permet de modifier l'encodage de la locale utilisée par le processus Wrapper. Les chaînes UTF-8 sont traitées avec une fonction séparée qui utilise un tampon de taille fixe de 4096 caractères. Une sortie JVM plus large que cette largeur provoquerait un débordement de tampon.

Votre application est particulièrement à risque si de grandes saisies utilisateur peuvent se retrouver dans les journaux, car elles pourraient provoquer le plantage du Wrapper et mener à un déni de service.

Le Wrapper n'est pas concerné lorsque wrapper.lang.windows.encoding est laissé à sa valeur par défaut 'ANSI' ou lorsqu'un encodage autre que UTF-8 est utilisé.

Solutions de contournement

Problème n°5 - Umask par défaut défini à 0000 pour les démons Unix.

Versions concernées

Versions de 3.5.8 à 3.5.11.

Gravité

Critique

Description

Sur les plateformes UNIX, l'umask par défaut est défini à 0000 plutôt que d'hériter de la valeur du processus parent lors de l'exécution en tant que processus démon.

Les journaux et autres fichiers ont un accès en lecture/écriture global.

L'umask par défaut du processus Java serait également 0000, et donc celui de tous les fichiers créés par l'application Java, à moins qu'ils ne définissent explicitement de nouvelles permissions.

Le fichier d'ancrage, s'il est utilisé, peut être supprimé par n'importe qui et provoquer l'arrêt du Wrapper.

Solutions de contournement

Problème n°4 - Échec avec une politique de sécurité SELinux stricte.

Versions concernées

Toutes les versions antérieures à 3.3.7.

Gravité

Avertissement

Description

Une politique de sécurité SELinux stricte pouvait empêcher le Wrapper de charger la bibliothèque libwrapper.so.

Ceci n'est un problème que lors de l'exécution sur un système avec SELinux activé.

Solutions de contournement

Problème n°3 - Déni de service provoqué par des signaux système sous Unix.

Versions concernées

Toutes les versions antérieures à 3.3.0.

Gravité

Élevée

Description

Des plantages peuvent occasionnellement se produire sous UNIX 64 bits, causés par un problème de synchronisation native lorsque des signaux système sont interceptés. Bug #1614010.

Cette vulnérabilité pourrait être utilisée par des processus tiers pour tenter des attaques par déni de service.

Les binaires 32 bits ne sont pas concernés. Windows n'est pas concerné.

Solutions de contournement

Problème n°2 - wrapper.ntservice.password stocké dans le registre.

Versions concernées

Versions de 3.0.0 à 3.1.2, puis de 3.2.2 à 3.2.3.

Gravité

Élevée

Description

La valeur de wrapper.ntservice.account et de wrapper.ntservice.password était stockée en clair dans le registre si elles étaient spécifiées sur la ligne de commande lors de l'installation du Wrapper en tant que service Windows.

Solutions de contournement

Problème n°1 - Sortie JVM et caractères '%'.

Versions concernées

Toutes les versions antérieures à 2.2.6.

Gravité

Élevée

Description

Un caractère pourcentage '%' dans la sortie de la JVM pouvait provoquer le plantage du Wrapper.

Votre application est particulièrement exposée si les saisies des utilisateurs clients peuvent se retrouver dans les journaux, la rendant vulnérable aux attaques par déni de service.

Solutions de contournement