Une faille dans sudo permet de prendre le contrôle du Mac

Stéphane Moussie |

Découverte à l'origine sur Linux, une faille dans la commande sudo (CVE-2021-3156), qui permet d'exécuter d'autres commandes avec tous les droits, affecte aussi la sécurité du Mac. À l'aide d'une méthode nommée heap overflow qui s'attaque à la mémoire temporaire, des chercheurs de Qualys ont trouvé comment exploiter sudo sans mot de passe pour s'arroger les droits administrateur de l'ordinateur.

La vulnérabilité est présente depuis au moins 10 ans, mais elle n'a été découverte que récemment. Pour être exploitée, elle demande d'avoir accès au système, ce qui limite les risques immédiats, même si un malandrin peut s'appuyer sur l'installation d'un malware pour parvenir à ses fins.

Comme le rapporte ZDNet, plusieurs chercheurs en sécurité ont confirmé la présence de la faille sur Mac (Intel et Apple Silicon), y compris sur macOS Big Sur 11.2 sorti cette semaine. Contacté par le site, Apple s'est refusé à tout commentaire, mais on imagine qu'un correctif est en préparation.

avatar YetOneOtherGit | 

« Découverte à l'origine sur Linux »

Histoire de faire mon casse pieds : Linux c’est un noyau, sudo est une commande que l’on trouve sur nombre d’Unix-Like mais pas sur toutes les distribution basée sur un noyau Linux 🤓😉

Blague à part la dénomination de l’OS est une question quasiment politique et je suis de l’obédience GNU/Linux, vive Richard Stallman 😃😉

avatar YetOneOtherGit | 

Quand même impressionnant d’avoir un buffer overflow sur une commande de ce niveau de sensibilité et relativement ancienne 🤯

avatar raoolito | 

@YetOneOtherGit

et une faille aussi tres ancienne !

avatar YetOneOtherGit | 

@raoolito

"et une faille aussi tres ancienne !"

Dans le monde Unix sudo est une commande relativement récente 😉

Le très ancien dans cet univers est vraiment plus vieux 🥸

avatar BeePotato | 

@ YetOneOtherGit : « Dans le monde Unix sudo est une commande relativement récente 😉
Le très ancien dans cet univers est vraiment plus vieux »

L’usage généralisé de sudo dans les distributions Linux (pardon, « GNU/Linux ») est relativement récent. Mais sudo lui-même a quarante ans (comme pas mal de choses, il n’a heureusement pas attendu Linux pour exister), ce qui n’en fait pas vraiment un jeunot, même dans l’univers d’Unix.

Mais du coup, il est vrai que relativement à tout ça cette faille est en effet assez récente.
Qui sait ? Peut-être qu’un jour prochain on découvrira une faille traînant depuis les toutes premières versions de sudo. :-)

avatar YetOneOtherGit | 

@BeePotato

"Mais sudo lui-même a quarante ans"

Les premise effectivement mais il est resté très marginal dans toutes les famille d’Unix jusqu’au moins dans les années 90.

su ça c’est une commande ancienne 😉

avatar BeePotato | 

@ YetOneOtherGit : « Les premise effectivement mais il est resté très marginal dans toutes les famille d’Unix jusqu’au moins dans les années 90. »

Il était surtout sur BSD, mais il existait et il n’est donc pas « relativement récent », s'tout. :-P :-D

J’ai un très vague souvenir comme quoi il était déjà utilisé dans NeXTStep, mais il est fort possible que je mélange avec autre chose.

avatar YetOneOtherGit | 

@BeePotato

“Il était surtout sur BSD, mais il existait et il n’est donc pas « relativement récent », s'tout. :-P :-D”

Relativement récent c’est justement relatif.

Et avec l’âge la notion de récent se dilate fortement. 😂😉

avatar YetOneOtherGit | 

@BeePotato

"Il était surtout sur BSD"

J’étais sur Sun OS qui était un BSD et je n’ai pas de souvenir de sudo en standard (J’ai encore dans la cave la masse de classeur où se trouver en version imprimé tout le contenu de man) il faudrait que je vérifie.

J’ai été dev NeXT et là il me semble bien que sudo était là 😉

avatar YetOneOtherGit | 

@BeePotato

"comme pas mal de choses"

Linux c’est la paupérisation d’Unix de toute façon 😂

avatar YetOneOtherGit | 

@BeePotato

"ce qui n’en fait pas vraiment un jeunot, même dans l’univers d’Unix."

Je suis d’une génération pré-sudo donc c’est un truc se jeunot 🥸

avatar YetOneOtherGit | 

@BeePotato

"Mais du coup, il est vrai que relativement à tout ça cette faille est en effet assez récente"

Yep et c’est un des pb : pas grand chose peut faire basculer la sécurité d’un outil essentiel qui semble digne de confiance.

avatar Cric | 

@YetOneOtherGit

Le cas s’était présenté également pour la saisie du MdP de session lorsqu’on appuyait 28 ou 29 fois sur la touche suppression (ou quelque chose dans le genre), MacGe en avait parlé il y a quelques temps.

Une faille très ancienne qui n’avait été identifiée que récemment pour le coup.

avatar YetOneOtherGit | 

@Cric

Y en a eu aussi sur SSH par exemple 😉

avatar iNitZer0 | 

@Cric

Ça me rappelle aussi ma jeunesse (début 90) quand sur Sco OpenServer (UNIX) il suffisait pour avoir accès en root d’appuyer très rapidement sur la touche « suprr » après avoir renseigné n’importe quoi en mot de passe...

avatar LoydD | 

Aucun risque avec ce genre de faille en ce moment ! heureusement avec le Covid-19, la majorité des malandrins ont la vie dure avec la distanciation sociale.

avatar pivert42 | 

@LoydD

Physique plutôt non !!

avatar LoydD | 

@pivert42
Naturellement cher Watson

avatar Kenny31i | 

@pivert42

Physique ça voudrait dire qu’on se tient éloigné des gens. Hors il n’y qu’à voir un rayon en soldes pour constater que non.
Il n’y a que nos proches aves lesquels nous sommes distants. Social sonne donc beaucoup plus juste.

Mais physique paraît plus acceptable. Pirouette politique :)

avatar occam | 

@LoydD

Vraiment?
Souvenez-vous du 6 janvier dernier : une meute de malandrins enragés prenait d'assaut le Capitole. La distanciation sociale était manifestement le cadet de leurs soucis.
Et ils ne se sont pas privés de s'emparer des ordinateurs qui leur tombaient sous la main.

Ce qui, soit dit en passant, apporte une nouvelle coloration à la notion d'attaque « brute force ».

avatar LoydD | 

@occam

😁

avatar YetOneOtherGit | 

@occam

"« brute force »."

Et au concept idiot-proof, la masse de ses glands à visage découvert était une ode au Darwinisme 😉

avatar koko256 | 

Il serait vraiment temps de virer le plus de programmes setuid écrit en C et les remplacer par un langage failsafe.

avatar lkaritoo | 

@koko256

Tu peux développer pour les novices comme moi ?
Le C est plutôt sûr de ce que j’ai toujours entendu.

avatar BeePotato | 

@ lkaritoo : « Le C est plutôt sûr de ce que j’ai toujours entendu. »

Non, le C n’est pas sûr du tout du point de vue de la gestion de la mémoire.
Tout simplement parce que les outils qu’il fournit pour cela sont très basiques et que presque toute cette gestion est à la charge du développeur, qui dispose du coup de beaucoup de liberté, qui se paye par autant de responsabilité.
Tant qu’on ne sort pas de l’espace mémoire attribué au processus, on peut aller lire et écrire n’importe quoi n’importe où sans se faire rappeler à l’ordre.

Ça a créé d’innombrables problèmes depuis des décennies. Dans le meilleur des cas, on se retrouve avec un processus qui plante (parce qu’il a fini par essayer d’accéder à la mémoire hors de l’espace qui lui était attribué). Dans le pire des cas, on a une faille de sécurité comme celle-ci, ou une corruption de données.

La plupart des langages de programmation créés plus récemment ont utilisé une approche plus sophistiquée de la gestion de la mémoire, offrant plus de protection contre les erreurs de programmation de ce genre.
Mais il y a énormément de code écrit en C utilisé tous les jours, et qui continue à être mis à jour. On n’a donc pas fini de voir ce genre de problème.

avatar YetOneOtherGit | 

@BeePotato

Je ne peux que te rejoindre sur ces constats et dieu c’est que j’en ai produit des volumes de C.

Et je suis surpris de constater qu’hélas bien des jeunes gens voient encore C comme un saint graal fantasmé ayant une aura fabriquer sur des mythes.

Et ce n’est pas cracher sur le K&R ni sur un langage qui m’a longtemps accompagné.

avatar BeePotato | 

@ YetOneOtherGit : « Et ce n’est pas cracher sur le K&R ni sur un langage qui m’a longtemps accompagné. »

Pareil. Je ne crache pas sur le C, que j’aime encore beaucoup même si je n’en écris presque plus. Mais si je devais faire une liste de ses qualités, le terme « sûr » n’y apparaîtrait pas. :-)

avatar YetOneOtherGit | 

@BeePotato

"Mais si je devais faire une liste de ses qualités, le terme « sûr » n’y apparaîtrait pas. :-)"

En 2021 la liste de ses qualités qui me le ferait recommander sur un projet me semble s’être très réduite.

avatar YetOneOtherGit | 

@BeePotato

Dans le même esprit je n’ai jamais été un grand fan de la qualité se code du noyau Linux.

Comparé à Solaris par exemple.

avatar YetOneOtherGit | 

@BeePotato

Au passage je ne sais pas si tu t’es intéressé à Rust il y a vraiment des choses très intéressante.

avatar BeePotato | 

@ YetOneOtherGit : « Au passage je ne sais pas si tu t’es intéressé à Rust il y a vraiment des choses très intéressante. »

Oui, j’ai essayé. Mais il y a des aspects de la syntaxe auxquels je n’ai pas accroché, et je ne suis pas encore pleinement convaincu pas ce modèle de gestion de la mémoire.
Du coup, ne disposant malheureusement pas d’un temps infini pour jouer avec tous les langages que je voudrais essayer, j’ai préféré me pencher bien plus sur Swift, qui offre plus d’opportunités de m’amuser.
Pas de vrais projets en Rust pour moi pour l’instant, donc. Mais je suis son évolution du coin de l’œil.

avatar YetOneOtherGit | 

@BeePotato

"et je ne suis pas encore pleinement convaincu pas ce modèle de gestion de la mémoire."

C’est la grande force même si le changement de sémantique de l’assignation est un peu déstabilisant.

On à utiliser en prod sur un petit projet interne d’outil relativement bas niveau (1 MxH environ) le post-mortem est assez prometteur.

avatar YetOneOtherGit | 

@lkaritoo

"Le C est plutôt sûr de ce que j’ai toujours entendu."

Il ne faut pas écouter ceux qui roulent des mécaniques en se croyant très fort parce qu’ils “font du C, peuvent tout se permettre et n’ont pas besoin qu’un langage leur donner des contraintes pour maîtriser”

Un langage moderne se définit bien plus par ce qu’il interdit de faire que parce qu’il permet de faire.

C c’est un langage “sans filet” ce qui n’est pas la chose la plus recommendable pour affronter la complexité.

Un pb de buffer overflow peut assez facilement arriver même pour un excellent développeur expérimenté.

avatar byte_order | 

Le C est plus un assembleur abstrait qu'autre chose.
En cela, il ne porte intrinsèquement aucune sûreté, c'est tout le contraire !

Il a d'autres atouts, mais pas celui là.

avatar YetOneOtherGit | 

@byte_order

"Il a d'autres atouts, mais pas celui là."

Et en 2021 il lui en reste pragmatiquement relativement peu.

En caricaturant je ne garderai que CompCert, le compilateur d’un très large sous-ensemble de C99 prouvé formellement avec Coq. 😉

On oubli souvent que les compilateurs aussi ont des bugs 🥶

avatar byte_order | 

@YetOneOtherGit

> Et en 2021 il lui en reste pragmatiquement relativement peu.

Essentiellement, d'être en effet un sorte d'assembleur universel quasiment disponible sur n'importe quelle plateforme.

Mais oui oui, il reste très peu d'intérêt.
Mais y'a un historique colossale à maintenir, et le cout de le convertir dans un autre langage est souvent pas justifiable.

avatar YetOneOtherGit | 

@byte_order

"Mais y'a un historique colossale à maintenir"

Ce dois sans doute être une des plus grosses base de code hérité effectivement 😉

avatar YetOneOtherGit | 
avatar Moonwalker | 

Gasp ! Depuis juillet 2011 et sudo 1.9.5p2

avatar hugome | 

@Moonwalker

C’est quand même sidérant.
sudo a été créée en 1984, est présente depuis le début sur OS X, c’est littéralement la première commande qu’on souhaiterait attaquer en hacking.
Des fois, j’ai envie de stocker certains trucs avec un papier et un crayon dans un coffre à la cave.

avatar DG33 | 

@hugome

Pense aux inondations

avatar hugome | 

@DG33

C’est pas faux, j’en ai eu une encore récemment. Mais avant que ça atteigne le coffre, il faudrait plus qu’une crue centennale de la Seine !

avatar lll | 

À chaque correction de bug du genre, c'est les cellules hacking des services secrets de tous les pays qui doivent faire la tronche. Je me demande combien l'avaient identifiée sans en tenir informées les sociétés concernées.

avatar YetOneOtherGit | 

@lll

"À chaque correction de bug du genre, c'est les cellules hacking des services secrets de tous les pays qui doivent faire la tronche."

Nous ne sommes pas sur un bug mais sur une faille, elle était relativement ressente et il ne faut pas croire que les agence de renseignements les trouvent à tour de bars avant tous les experts en sécurité.

avatar byte_order | 

@YetOneOtherGit
> Nous ne sommes pas sur un bug mais sur une faille

Euh, si, y'a *aussi* un bug dans la gestion des slash-escapings qui ne prévoit pas qu'un argument puisse se terminer par un \. Qui peut / va probablement aboutir à un segfault même sans attaque buffer overflow.

Et c'est ce bug qui, ensuite, permet, dans un cas très particulier (appel via sudoedit avec l'option -s ou -i) , la faille de sécurité via un heap overflow.

La correction :
https://github.com/sudo-project/sudo/commit/1f8638577d0c80a4ff864a2aad80a0d95488e9a8

avatar YetOneOtherGit | 

@byte_order

"Euh, si, y'a aussi un bug dans la gestion"

J’essaye de faire passer la nuance de sens pour les non initiée d’un point de vu général, les termes deviennent de tel fourre-tout qu’à la fin il ne veulent plus rien dire 😉

Un peut comme l’emploi de “optimisé M1” à la place de “porté sur M1”

C’est de la vulgarisation du champ d’application des concepts 😉🥸

avatar eX0 | 

@lll

Sudo est plein de bug et de manière d’escalader.
Il vaut mieux éviter, pour des raisons de sécurité, de l’installer.
Quelques démonstrations rapides:
(Les 40 premieres minutes suffisent)
https://youtu.be/lZ4wAi-1Y08

avatar Kazuki | 

FX de Cachem en parlait justement la semaine dernière (même si plus orienté Linux qu’Apple). Du coup il faut attendre une nouvelle maj de sécurité ?

avatar switch (non vérifié) | 

C'est du très lourd !
Je suis curieux de voir si Apple va proposer une mise à jour de sécurité pour toutes les versions d'OSX ou si elle va se contenter de patcher le binaire sudo sur les 2 ou 3 dernières versions de macOS...

avatar jb18v | 

Et le WSL serait touché, par curiosité ?

Pages

CONNEXION UTILISATEUR