
Débordement de tas pré-authentification dans le serveur SFTP Xlight <= 3.9.4.2
Versions Xlight 32 et 64 bits <= 3.9.4.2
Un attaquant non authentifié ayant accès à Xlight SFTP pourrait exécuter du code ou provoquer un déni de service.
Les chaînes envoyées sur le réseau dans le protocole SFTP sont préfixées par une longueur de quatre octets. La fonction qu'Xlight utilise pour lire ces chaînes depuis le paquet réseau présente un débordement d'entier lors de la validation de la longueur et lors de l'allocation de la mémoire nécessaire. En forgeant la longueur de quatre octets d'une chaîne, nous pouvons déclencher un memmove important (~4 Go) depuis un tampon contrôlé par l'attaquant, hors limites, vers le tas.
La fonction vulnérable est utilisée pour recevoir des chaînes tout au long de la poignée de main SSH, y compris avant authentification lors de la réception des algorithmes supportés, des suites de chiffrement, et d'un nom d'utilisateur et mot de passe du client. Nous pouvons cibler n'importe laquelle de ces chaînes avec une longueur forgée pour déclencher l'exploitation.
C'est facile à déclencher mais la facilité d'exploitation dépend de l'architecture binaire d'Xlight.
Sur 32 bits, la copie dépassera la fin du tas, écrasant tout sur son passage, avant de provoquer un crash. Il est probablement possible de corrompre une structure adjacente sur le tas et d'exploiter la nature multi-threadée de ce serveur pour accéder aux données corrompues, avant que la copie sauvage ne fasse crasher le processus.
Sur 64 bits, nous ne pouvons pas obtenir une écriture hors limites, car l'argument de taille de l'appel d'allocation mémoire est un size_t (c'est-à-dire 64 bits de large lorsqu'il est compilé pour 64 bits), ce qui signifie que nous ne pouvons pas déborder cette valeur avec l'addition de deux entiers 32 bits, et à la place nous allouons simplement un grand tampon d'environ 4 Go. Ce bogue entraîne plutôt une lecture hors limites, ce qui fait crasher le processus.