Qu'est-ce que Stack Clash et que puis-je faire?

27

J'ai entendu parler d'une nouvelle vulnérabilité nommée Stack Clash qui affecte apparemment plusieurs systèmes de type Unix (pas seulement Linux, mais aussi les BSD, Solaris).

  • Qu'Est-ce que c'est? Comment un bug multi-OS est-il arrivé?
  • Comment protéger mes systèmes?
muru
la source

Réponses:

29

Stack Clash est un exploit basé sur une technique assez ancienne. La mémoire utilisée par un processus est divisée en deux régions: la pile et le tas . On imagine généralement la pile comme croissant vers le bas et le tas comme croissant vers le haut. Que se passe-t-il lorsque l'un grandit suffisamment pour entrer en conflit avec l'autre? Plus généralement, que se passe-t-il lorsque la pile se développe suffisamment pour empiéter sur des espaces mémoire indépendants? La vulnérabilité d'origine a 12 ans et les développeurs du noyau Linux l'ont corrigée temporairement en utilisant une page de garde . Cependant, les chercheurs de Qualys ont réussi à exploiter cela malgré la page de garde.

Ars Technica rapporte :

Les vulnérabilités de Stack Clash ont lentement gagné en notoriété, tout d'abord en 2005 avec les conclusions du chercheur en sécurité Gaël Delalleau et cinq ans plus tard avec la publication d'une vulnérabilité Linux par le chercheur Rafal Wojtczuk. Les développeurs Linux ont introduit une protection qui visait à empêcher les conflits de pile, mais les recherches d'aujourd'hui démontrent qu'il est relativement facile pour les attaquants de contourner cette mesure.

La principale attaque par preuve de concept développée par Qualys exploite une vulnérabilité indexée comme CVE-2017-1000364. Les chercheurs de Qualys ont également développé des attaques qui utilisent Stack Clash pour exploiter des vulnérabilités distinctes, notamment CVE-2017-1000365 et CVE-2017-1000367. Par exemple, lorsqu'il est combiné avec CVE-2017-1000367, une faille récemment corrigée dans Sudo également découverte par Qualys, les utilisateurs locaux peuvent exploiter Sudo pour obtenir des privilèges root complets sur une gamme beaucoup plus large d'OS. Qualys n'a jusqu'à présent pas été en mesure de faire exécuter du code à distance par les exploits. La seule application distante sur laquelle ils ont enquêté était le serveur de messagerie Exim, qui s'est avéré par coïncidence inexploitable. Qualys a déclaré qu'il ne pouvait pas exclure la possibilité que de tels exploits d'exécution de code à distance existent. Qualys a déclaré qu'il publierait les exploits de validation de principe à une date ultérieure,

[...] Beaucoup plus d'informations sont disponibles dans cet avis technique détaillé de Qualys et cette analyse technique de grsecurity .

Citant l'article LWN sur le correctif d'origine de 2010:

Étant donné que Linux ne sépare pas les pages de pile de processus et de tas, le dépassement d'une page de pile dans une page de tas adjacente est possible. Cela signifie qu'une pile suffisamment profonde (à partir d'un appel récursif par exemple) pourrait finir par utiliser de la mémoire dans le tas. Un programme qui peut écrire sur cette page de tas (par exemple un client X) pourrait alors manipuler l'adresse de retour de l'un des appels pour passer à un endroit de son choix. Cela signifie que le client peut amener le serveur à exécuter le code de son choix - exécution de code arbitraire - qui peut être utilisé pour obtenir les privilèges root.

La description ci-dessus s'applique à divers noyaux de type Unix.

Alors que Ars Technica ne note une solution temporaire mentionnée dans le rapport Qualys ( « régler le  disque rlimit et STACK RLIMIT_AS  des  utilisateurs locaux  et  des services à distance  à une faible valeur »), il convient de noter que cela ne signifie pas nécessairement garantie contre cet exploit . La seule issue sûre actuellement est de mettre à niveau. Selon l'analyse de sécurité:

Il doit être clair que les tentatives du noyau uniquement pour résoudre ce problème seront nécessairement toujours incomplètes, car le vrai problème réside dans le manque de détection de pile. Étant donné que la solution réelle alternative dépend de la reconstruction de tous les espaces utilisateurs, il s'agit probablement de la seule solution réalisable dans un avenir prévisible.

Le mieux que nous puissions faire maintenant est de mettre à niveau le noyau vers une version corrigée.

L'exploit de 2010 a utilisé le serveur X, celui-ci a utilisé sudo, le suivant pourrait être n'importe lequel d'une multitude de programmes utilisateur qui, à un moment donné, s'exécutent avec des privilèges élevés.

Qualys n'a pas encore publié de code de preuve de concept pour les exploits (ils prévoient de le faire à une date ultérieure).


Il existe plusieurs avis de sécurité Ubuntu associés à CVE-2017-1000364:

Notez également que le tracker CVE répertorie plusieurs combinaisons de versions / noyau en tant que correctifs en attente.

En règle générale, la solution la plus simple consiste à mettre à jour vos systèmes vers le dernier package de noyau ASAP.

Les versions de noyau pertinentes des USN (sélectionnées à l'aide de for i in {24..35}; curl -s https://www.ubuntu.com/usn/usn-33$i-1/ | pup 'dl:nth-last-of-type(1)'):

Ubuntu 17.04:
linux-image-4.10.0-24-lowlatency 4.10.0-24.28
linux-image-generic-lpae 4.10.0.24.26
linux-image-generic 4.10.0.24.26
linux-image-4.10.0-24-generic-lpae 4.10.0-24.28
linux-image-4.10.0-24-generic 4.10.0-24.28
linux-image-lowlatency 4.10.0.24.26
Ubuntu 17.04:
linux-image-4.10.0-1008-raspi2 4.10.0-1008.11
linux-image-raspi2 4.10.0.1008.10
Ubuntu 16.10:
linux-image-powerpc-smp 4.8.0.56.69
linux-image-powerpc-e500mc 4.8.0.56.69
linux-image-4.8.0-56-powerpc-smp 4.8.0-56.61
linux-image-4.8.0-56-powerpc-e500mc 4.8.0-56.61
linux-image-4.8.0-56-lowlatency 4.8.0-56.61
linux-image-generic 4.8.0.56.69
linux-image-4.8.0-56-generic 4.8.0-56.61
linux-image-powerpc64-emb 4.8.0.56.69
linux-image-virtual 4.8.0.56.69
linux-image-powerpc64-smp 4.8.0.56.69
linux-image-4.8.0-56-generic-lpae 4.8.0-56.61
linux-image-generic-lpae 4.8.0.56.69
linux-image-lowlatency 4.8.0.56.69
linux-image-4.8.0-56-powerpc64-emb 4.8.0-56.61
Ubuntu 16.10:
linux-image-4.8.0-1040-raspi2 4.8.0-1040.44
linux-image-raspi2 4.8.0.1040.44
Ubuntu 16.04 LTS:
linux-image-powerpc64-smp-lts-utopic 4.4.0.81.87
linux-image-generic- lts - wily 4.4.0.81.87
linux-image-generic- lts - utopic 4.4.0.81.87
linux-image-4.4.0-81-generic-lpae 4.4.0-81.104
linux-image-powerpc64-emb- lts -vivid 4.4.0.81.87
linux-image-powerpc-e500mc 4.4.0.81.87
linux-image-generic-lpae-lts-xenial 4.4.0.81.87
linux-image-generic-lpae-lts-utopic 4.4.0.81.87
linux-image-powerpc-e500mc-lts-xenial 4.4.0.81.87
linux-image-4.4.0-81-powerpc64-emb 4.4.0-81.104
linux-image-powerpc-e500mc-lts-wily 4.4.0.81.87
linux-image-4.4.0-81-powerpc-e500mc 4.4.0-81.104
linux-image-generic-lpae-lts-wily 4.4.0.81.87
linux-image-virtual- lts -vivid 4.4.0.81.87
linux-image-virtual- lts - utopic 4.4.0.81.87
linux-image-virtual 4.4.0.81.87
linux-image-powerpc64-emb-lts-wily 4.4.0.81.87
linux-image-lowlatency-lts-vivid 4.4.0.81.87
linux-image-powerpc-e500mc-lts-vivid 4.4.0.81.87
linux-image-powerpc64-emb 4.4.0.81.87
linux-image-powerpc-smp-lts-xenial 4.4.0.81.87
linux-image-4.4.0-81-generic 4.4.0-81.104
linux-image-powerpc64-smp-lts-vivid 4.4.0.81.87
linux-image-lowlatency-lts-wily 4.4.0.81.87
linux-image-4.4.0-81-lowlatency 4.4.0-81.104
linux-image-generic 4.4.0.81.87
linux-image-lowlatency-lts-xenial 4.4.0.81.87
linux-image-powerpc64-smp-lts-xenial 4.4.0.81.87
linux-image-powerpc64-emb-lts-utopic 4.4.0.81.87
linux-image-generic-lts-xenial 4.4.0.81.87
linux-image-generic- lts -vivid 4.4.0.81.87
linux-image-powerpc-e500mc-lts-utopic 4.4.0.81.87
linux-image-powerpc-smp 4.4.0.81.87
linux-image-4.4.0-81-powerpc-smp 4.4.0-81.104
linux-image-generic-lpae-lts-vivid 4.4.0.81.87
linux-image-generic-lpae 4.4.0.81.87
linux-image-powerpc64-smp-lts-wily 4.4.0.81.87
linux-image-powerpc64-emb-lts-xenial 4.4.0.81.87
linux-image-powerpc-smp-lts-wily 4.4.0.81.87
linux-image-virtual- lts - wily 4.4.0.81.87
linux-image-powerpc64-smp 4.4.0.81.87
linux-image-4.4.0-81-powerpc64-smp 4.4.0-81.104
linux-image-powerpc-smp-lts-utopic 4.4.0.81.87
linux-image-powerpc-smp-lts-vivid 4.4.0.81.87
linux-image-lowlatency 4.4.0.81.87
linux-image-virtual-lts-xenial 4.4.0.81.87
linux-image-lowlatency-lts-utopic 4.4.0.81.87
Ubuntu 16.04 LTS:
linux-image-4.4.0-1016-gke 4.4.0-1016.16
Ubuntu 16.04 LTS:
linux-image-snapdragon 4.4.0.1061.54
linux-image-4.4.0-1061-snapdragon 4.4.0-1061.66
Ubuntu 16.04 LTS:
linux-image-4.4.0-1020-aws 4.4.0-1020.29
Ubuntu 16.04 LTS:
linux-image-raspi2 4.4.0.1059.60
linux-image-4.4.0-1059-raspi2 4.4.0-1059.67
Ubuntu 16.04 LTS:
linux-image-4.8.0-56-powerpc-smp 4.8.0-56.61 ~ 16.04.1
linux-image-4.8.0-56-powerpc-e500mc 4.8.0-56.61 ~ 16.04.1
linux-image-4.8.0-56-lowlatency 4.8.0-56.61 ~ 16.04.1
linux-image-4.8.0-56-generic 4.8.0-56.61 ~ 16.04.1
linux-image-generic-hwe-16.04 4.8.0.56.27
linux-image-lowlatency-hwe-16.04 4.8.0.56.27
linux-image-4.8.0-56-generic-lpae 4.8.0-56.61 ~ 16.04.1
linux-image-virtual-hwe-16.04 4.8.0.56.27
linux-image-generic-lpae-hwe-16.04 4.8.0.56.27
linux-image-4.8.0-56-powerpc64-emb 4.8.0-56.61 ~ 16.04.1
Ubuntu 14.04 LTS:
linux-image-powerpc-smp-lts-xenial 4.4.0.81.66
linux-image-lowlatency-lts-xenial 4.4.0.81.66
linux-image-4.4.0-81-powerpc-smp 4.4.0-81.104 ~ 14.04.1
linux-image-4.4.0-81-powerpc-e500mc 4.4.0-81.104 ~ 14.04.1
linux-image-4.4.0-81-lowlatency 4.4.0-81.104 ~ 14.04.1
linux-image-4.4.0-81-generic-lpae 4.4.0-81.104 ~ 14.04.1
linux-image-generic-lpae-lts-xenial 4.4.0.81.66
linux-image-powerpc64-smp-lts-xenial 4.4.0.81.66
linux-image-4.4.0-81-generic 4.4.0-81.104 ~ 14.04.1
linux-image-4.4.0-81-powerpc64-smp 4.4.0-81.104 ~ 14.04.1
linux-image-generic-lts-xenial 4.4.0.81.66
linux-image-powerpc64-emb-lts-xenial 4.4.0.81.66
linux-image-powerpc-e500mc-lts-xenial 4.4.0.81.66
linux-image-virtual-lts-xenial 4.4.0.81.66
linux-image-4.4.0-81-powerpc64-emb 4.4.0-81.104 ~ 14.04.1
Ubuntu 14.04 LTS:
linux-image-powerpc-e500mc 3.13.0.121.131
linux-image-lowlatency-pae 3.13.0.121.131
linux-image-3.13.0-121-powerpc64-emb 3.13.0-121.170
linux-image-generic-pae 3.13.0.121.131
linux-image-3.13.0-121-powerpc-smp 3.13.0-121.170
linux-image-3.13.0-121-powerpc-e500mc 3.13.0-121.170
linux-image-3.13.0-121-powerpc-e500 3.13.0-121.170
linux-image-3.13.0-121-generic-lpae 3.13.0-121.170
linux-image-generic- lts - quantal 3.13.0.121.131
linux-image-virtual 3.13.0.121.131
linux-image-powerpc-e500 3.13.0.121.131
linux-image-generic- lts - trusty 3.13.0.121.131
linux-image-3.13.0-121-generic 3.13.0-121.170
linux-image-omap 3.13.0.121.131
linux-image-powerpc64-emb 3.13.0.121.131
linux-image-3.13.0-121-powerpc64-smp 3.13.0-121.170
linux-image-generic 3.13.0.121.131
linux-image-highbank 3.13.0.121.131
linux-image-generic- lts - saucy 3.13.0.121.131
linux-image-powerpc-smp 3.13.0.121.131
linux-image-3.13.0-121-lowlatency 3.13.0-121.170
linux-image-generic-lpae-lts-saucy 3.13.0.121.131
linux-image-generic- lts -raring 3.13.0.121.131
linux-image-powerpc64-smp 3.13.0.121.131
linux-image-generic-lpae-lts-trusty 3.13.0.121.131
linux-image-generic-lpae 3.13.0.121.131
linux-image-lowlatency 3.13.0.121.131
Ubuntu 12.04 ESM:
linux-image-powerpc-smp 3.2.0.128.142
linux-image-3.2.0-128-virtual 3.2.0-128.173
linux-image-3.2.0-128-generic-pae 3.2.0-128.173
linux-image-generic 3.2.0.128.142
linux-image-generic-pae 3.2.0.128.142
linux-image-highbank 3.2.0.128.142
linux-image-3.2.0-128-highbank 3.2.0-128.173
linux-image-3.2.0-128-powerpc-smp 3.2.0-128.173
linux-image-virtual 3.2.0.128.142
linux-image-powerpc64-smp 3.2.0.128.142
linux-image-3.2.0-128-omap 3.2.0-128.173
linux-image-3.2.0-128-powerpc64-smp 3.2.0-128.173
linux-image-omap 3.2.0.128.142
linux-image-3.2.0-128-generic 3.2.0-128.173
Ubuntu 12.04 LTS:
linux-image-3.13.0-121-generic 3.13.0-121.170 ~ precise1
linux-image-generic-lpae-lts-trusty 3.13.0.121.112
linux-image-generic- lts - trusty 3.13.0.121.112
linux-image-3.13.0-121-generic-lpae 3.13.0-121.170 ~ precise1

Sudo

Le bogue sudo susmentionné est couvert par USN-3304-1 , à partir du 30 mai 2017:

Ubuntu 17.04:
sudo-ldap 1.8.19p1-1ubuntu1.1
sudo 1.8.19p1-1ubuntu1.1
Ubuntu 16.10:
sudo-ldap 1.8.16-0ubuntu3.2
sudo 1.8.16-0ubuntu3.2
Ubuntu 16.04 LTS:
sudo-ldap 1.8.16-0ubuntu1.4
sudo 1.8.16-0ubuntu1.4
Ubuntu 14.04 LTS:
sudo-ldap 1.8.9p5-1ubuntu1.4
sudo 1.8.9p5-1ubuntu1.4
muru
la source
Donc en résumé, il devrait déjà être corrigé dans la plupart des versions d'Ubuntu qui sont toujours prises en charge, il suffit de mettre à jour?
CJCombrink
@TheBadger non, comme indiqué par le tracker CVE, certaines combinaisons sont toujours répertoriées comme version en attente. Je suppose que plus d'USN seront publiés à mesure que des correctifs seront publiés.
muru
4
Mais, oui, la mise à jour devrait être suffisante, aucune configuration supplémentaire n'est nécessaire.
muru
Si cela affecte, comment vérifier?
daisy
1
@immibis selon l'article suivant, mais l'implémentation existante ne fonctionne pas correctement: explication du bug Stackguard par Qualys Research Labs
Igor B
1

Comment un bug multi-OS est-il arrivé?

Pour répondre spécifiquement à cette partie de votre question:

Ce problème se pose en raison de l'utilisation d'un espace d'adressage partagé pour le tas (qui augmente vers le haut) et la pile (qui augmente vers le bas).

Cette conception est commune à de nombreux systèmes, d'où la raison pour laquelle de nombreux systèmes sont vulnérables à la même classe de vulnérabilité.

user7761803
la source