Journal Alerte rouge! RCE dans opensshd

Posté par  . Licence CC By‑SA.
43
1
juil.
2024

Bonjour Nal,

certains jours, des certitudes disparaissent. Par exemple, le résultat aux élections, ou des softs qu'on pensait durs comme l'acier. Mais certains matins sont plus douloureux que d'autres. Et ce matin, entre autre, j'ai lu qu'openssh est vulnérable! (cris, hurlements, grincements de dents, etc..).

Et oui, certains chercheurs en sécu ont réussi l'impensable: ils possèdent une RCE sur opensshd. Et c'est grave.

Avant de courir les bras en l'air en disant 'onoz' ou d'arracher les cables RJ45 des datacenters, quelques précisions:

  • l'attaque fonctionne sur i386, le chercheur pense que c'est exploitable en x86_64 mais ne l'a pas codé.
  • la vuln touche les systèmes linux basé sur glibc
  • une mise à jour existe, go go go update!

https://www.openwall.com/lists/oss-security/2024/07/01/3

https://www.openssh.com/security.html

avant de jeter openssh, je copie colle la note préliminaire de l'advisory:

Preliminary note: OpenSSH is one of the most secure software in the
world; this vulnerability is one slip-up in an otherwise near-flawless
implementation. Its defense-in-depth design and code are a model and an
inspiration, and we thank OpenSSH's developers for their exemplary work.

Je vous laisse, j'ai des distribs à update, see you!

  • # La faille en 1 phrase

    Posté par  . Évalué à 6 (+4/-0).

    Extrait de https://www.openssh.com/security.html

    July 1, 2024
    sshd(8) in Portable OpenSSH versions 8.5p1 to 9.7p1 (inclusive).
    Race condition resulting in potential remote code execution.
    A race condition in sshd(8) could allow remote code execution as root on non-OpenBSD systems. This attack could be prevented by disabling the login grace timeout (LoginGraceTime=0 in sshd_config) though this makes denial-of service against sshd(8) considerably easier

    Traduit rapidement ça donne :

    Une condition de concurrence dans sshd(8) pourrait permettre l'exécution de code à distance en tant que root sur des systèmes non-OpenBSD. Cette attaque peut être évitée en désactivant le délai de grâce de connexion (LoginGraceTime=0 dans sshd_config), bien que cela rende le déni de service contre sshd(8) considérablement plus facile.

    Le point qui a attiré mon attention est «sur des système non-OpenBSD».

    • [^] # Re: La faille en 1 phrase

      Posté par  (site web personnel) . Évalué à 4 (+2/-0).

      L'article sur openwall explique assez bien le pourquoi du comment. En gros la faille est inactivée sur openBSD depuis 2001 grâce à des appels systèmes "thread safe" par défaut, et était patchée en interne dans OpenSSH depuis 2006 avant d'avoir été réintroduite par inadvertance. L'article d'OpenWall est d'ailleurs assez bien construit : il se divise en section de plus en plus technique ce qui le rend partiellement très accessible même pour un ignorant.

      « IRAFURORBREVISESTANIMUMREGEQUINISIPARETIMPERAT » — Odes — Horace

    • [^] # Re: La faille en 1 phrase

      Posté par  (Mastodon) . Évalué à 5 (+2/-0).

      sshd(8) in Portable OpenSSH versions 8.5p1 to 9.7p1 (inclusive).

      C'est quoi cette mention "Portable" ? C'est celle qu'on a généralement dans les distribs ?

      En théorie, la théorie et la pratique c'est pareil. En pratique c'est pas vrai.

      • [^] # Re: La faille en 1 phrase

        Posté par  . Évalué à 10 (+11/-0).

        La version native est celle d'OpenBSD.

        La version portable est celle pour les autres systèmes d'exploitation.

  • # Faut aussi voir les versions

    Posté par  (site web personnel) . Évalué à 10 (+7/-0).

    Déja, faut des versions assez récentes (par exemple, ni RHEL 7 ou RHEL 8), l'attaque est longue (de 1 mois à quelques heures), et n'a été testé que sur des machines avec un réseau fiable (même si ça concerne sans doute tout les serveurs).

    Je ne sais pas non plus comment se comporte l'exploit avec un serveur qui est utilisé donc avec du CPU à fond, ou des utilisateurs qui font des ssh (genre, est ce que les bots qui scannent tout l'internet vont foutre la zone dans les mesures de timing précises ?)

    Ensuite, y a des contournements plus simples que mettre GraceLoginTime à 0 comme "relancer openssh toutes les heures". C'est con, mais vu que ça va changer le layout en mémoire, ça remets l'ASLR à 0.

    Je me demande aussi si avoir openssh en "start on demand", comme sur certains systèmes embarqués ou comme Ubuntu 22.10 n'a pas aussi le bon goût de foutre en l'air l'exploit (vu qu'avec un process séparé à chaque fois, c'est dur de trouver les offsets mélangés par par l'ASLR)

    • [^] # Re: Faut aussi voir les versions

      Posté par  . Évalué à 5 (+3/-0).

      Alors oui, il y a des contournements, oui, l'exploit est long. Mais ça reste une p*tain de vulnérabilités. Ouais, c'est ssh, c'est bien codé, y'a de la défense en profondeur mais ça reste exceptionnel.

      Et pour l'ASLR, c'est pas vraiment aussi mélangé que l'on croit. Tiens, par exemple, en 32 bits, il y a exactement 2 adresses pour la glibc (si si, 2, ce n'est pas une typo).
      ```
      Moreover, this Debian version suffers from the ASLR weakness described
      in the following great blog posts (by Justin Miller and Mathias Krause,
      respectively):

      https://zolutal.github.io/aslrnt/
      https://grsecurity.net/toolchain_necromancy_past_mistakes_haunting_aslr

      Concretely, in the case of sshd on i386, every memory mapping is
      randomized normally (sshd's PIE, the heap, most libraries, the stack),
      but the glibc itself is always mapped either at address 0xb7200000 or at
      address 0xb7400000; in other words, we can correctly guess the glibc's
      address half of the time
      ```

      • [^] # Re: Faut aussi voir les versions

        Posté par  (site web personnel) . Évalué à 4 (+1/-0).

        J'ai le sentiment que plus grand monde n'a de machines 32 bits intel, donc ça limite un peu la portée aussi.

        Je ne dit pas qu'il y a pas moyen a terme de contourner l'ASLR sur le 64 bits, mais c'est aussi plus difficile. Donc il y a quand même le temps de voir venir.

        Ceci dit, ayant lu plus en détail l'advisory, je vois que ma question sur "est ce que les bots influent sur le timing" a pour réponse "sans doute pas suffisamment". Sur ma machine, ssh lance 1 process par connexion, et je suppose que c'est ce process qui est attaqué, donc un bot va juste ralentir l'attaque en prenant un slot de MaxProcesses de temps en temps, donc ralentir de 10 à 20 % au maximum l'attaque, ce qui est négligeable vu le temps que ça prends déjà (genre, au lieu de 8h, ça va en prendre 1 de plus).

        • [^] # Re: Faut aussi voir les versions

          Posté par  . Évalué à 4 (+2/-0).

          J'ai le sentiment que plus grand monde n'a de machines 32 bits intel

          les distros qui continuent de sortir en 32 bits ont visiblement un sentiment différent — et des stats de téléchargement :-)

          • [^] # Re: Faut aussi voir les versions

            Posté par  (site web personnel) . Évalué à 3 (+0/-0).

            Certes, mais est ce que c'est des machines avec un serveur ssh et une connexion fiable ?

            Des discussions que j'ai vu sur les listes Fedora, c'était surtout des gens avec des vieux PCs de bureau. C'est certes fonctionnel, mais je ne crois pas que ça soit la cible de ce genre d'exploit (car j'ai des doutes sur l'usage de ssh dessus, et surtout des doutes sur la connexion fiable, en plus d'avoir des doutes sur la valeur des infos qu'on peut obtenir).

            Je suis sur qu'une grande majorité des serveurs encore sous garantie sont en 64 bits, et que même si plein de gens ont des vieux trucs hors garantie pour du test, c'est aussi du 64 bits.

            Y a du 32 bits dans l'embarqué, je n'en doute pas, mais est ce que c'est de l'intel, est ce qu'il y a un ssh exposé ?

        • [^] # Re: Faut aussi voir les versions

          Posté par  . Évalué à 2 (+0/-0).

          J'ai le sentiment que plus grand monde n'a de machines 32 bits intel, donc ça limite un peu la portée aussi.

          Je n'ai pas relu le papier de qualys, mais il me semble que ça impacte le 32bits de manière générale? Il a pris i386, mais ça serait la même chose sur ARM, powerPc ou mips?

          Et de l'arm32 il en reste pas mal (y'a un paquet de raspberryPi par exemple, car le site propose toujours du 32bits). Mips32 aussi.

          • [^] # Re: Faut aussi voir les versions

            Posté par  (site web personnel) . Évalué à 3 (+0/-0).

            Et de l'arm32 il en reste pas mal (y'a un paquet de raspberryPi
            par exemple, car le site propose toujours du 32bits). Mips32
            aussi.

            Mais est ce que ça tourne souvent avec de la glibc et openssh ?

            Je concède qu'il y a sans doute des tas de gens avec de la raspbian qui traînent (même si je suppose pas trop dans un cadre professionnel business critical), mais pas forcément exposé sur internet directement. Et pour mips32, j'aurais tendance à croire que c'est de l'openwrt, avec dropbear et un libc autre que la glibc.

            C'est peut être aussi exploitable, mais sans doute après un temps important de développement (> 1 mois) comme x86_64.

            • [^] # Re: Faut aussi voir les versions

              Posté par  . Évalué à 2 (+0/-0).

              Mais est ce que ça tourne souvent avec de la glibc et openssh ?

              Pour raspbian, oui.
              Pour les autres, la proba reste faible je dirais. Souvent l'embarqué c'est du dropbear (ou pas de serveur ssh du tout). Donc oui, ça reste assez minime.

  • # Fedora est-il impacté ?

    Posté par  . Évalué à 5 (+4/-0).

    La faille est annoncée publiquement, mais avant que tout le monde ai pu faire la mise à jour ?

    Sur des serveurs tournant sous Fedora Server que je dois gérer, la version d'OpenSSH semble être concernée.

    Mais j'ai rien trouvé d'autres que ce ticket :
    https://bugzilla.redhat.com/show_bug.cgi?id=CVE-2024-6387

    Sur les salons IRC de Fedora, sur Libera.chat, c'est trop silencieux.

    Le dernier build d'OpenSSH sur koji build system date du 23 juin.

    Donc en attendant, arrêt de tout les services sshd, on ressort le cables UART et je vais devoir me déplacer. :(

    • [^] # Workaround

      Posté par  . Évalué à 1 (+1/-0). Dernière modification le 01 juillet 2024 à 19:39.

      Plutôt que de débrancher les câbles…

      If sshd(8) cannot be updated, this signal handler race condition can be
      mitigated by setting LoginGraceTime to 0 in /etc/ssh/sshd_config and
      restarting sshd(8). This makes sshd(8) vulnerable to a denial of service
      (the exhaustion of all MaxStartups connections), but makes it safe from the
      remote code execution presented in this advisory.

      Source : équipe FreeBSD

      • [^] # Re: Workaround

        Posté par  (site web personnel) . Évalué à 3 (+0/-0).

        Sinon, on peut aussi se dire que la création d'un exploit sur 64 bits va sans doute prendre quelques jours ou semaines (on sait que Qualys est dessus depuis ~1 ou 2 mois vu qu'ils ont contactés l'équipe openssh dés qu'ils ont commencés à bosser sur l'exploit 64 bits:

        A few days after we started our work on amd64, we noticed the following bug report (in OpenSSH's public Bugzilla), about a deadlock in sshd's SIGALRM handler
        

        Soit avant:

        2024-05-19: We contacted OpenSSH's developers.
        

        J'imagine que Qualys ne va pas coller l'exploit partout (pas plus qu'ils ont collé l'exploit pour le 32 bits), et que donc les attaquant vont devoir repartir de 0. De plus, comme indiqué également dans l'advisory, l'ASLR sur 64 bits rends l'écriture d'un exploit plus difficile.

        Tout ça pour dire qu'il y a sans doute pas de quoi paniquer (au sens "faut tout interrompre", mais que faire une mise à jour demain ou après demain (quand le paquet sera sur les miroirs), ça sera sans doute largement suffisant.

        En fait, je suis même pas sur que grand monde se jette dans le développement d'un exploit de ce genre vu qu'il va vite être patcher. Prendre 1 ou 2 mois pour un usage certes puissant mais sans doute peu applicable car beaucoup de gens vont naturellement mettre à jour n'est pas forcément un bon calcul (car les boites/agences/gang qui écrivent les outils d'exploitation, elles ont aussi des contraintes de rentabilité de leur temps)

Envoyer un commentaire

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.