Blog: On voulait parler des attaques cyber pendant les JO mais on n'a rien à dire
Blog: regreSSHion, critical vulnerability on OpenSSH CVE-2024-6387
Author: Vlad
Published on
C'est la fin du monde mais exceptionnelement nous sommes lundi et pas vendredi ... youhou...
Comme le dit le groupe Daughter dans sa chançon The End :
<< This is the end, this is the end
You wait to find that I'm still here
And you've been waiting for the light to shine >>
Et la lumière va briller si vous ne mettez pas à jour !
Il s'agit en réalité d'une regression de 2020 d'une vulnérabilité initialement corrigée en 2006 (d'où le nom 😎). C'est une "race condition" qui demande plusieurs heures à être exploitée mais qui permet de devenir root. Elle est détectable mais il faudra savoir être réactifs !
L'article d'origine : https://www.openwall.com/lists/oss-security/2024/07/01/3
Les versions d'OpenSSH impactées sont les suivantes :
- OpenSSH < 4.4p1 (la vulnérabilité de 2006) est vulnérable à la "race condition"
- 4.4p1 <= OpenSSH < 8.5p1 n'est pas vulnérable
- 8.5p1 <= OpenSSH < 9.8p1 est à nouveau vulnérable en raison de la régression
Premières choses à déterminer :
- Avez-vous des OpenSSH exposés sur Internet ?
- Si oui, sont-ils vulnérables ?
- Si oui, mettez-les à jour en priorité !
Ensuite :
- Avez-vous des OpenSSH en interne ?
- Si oui, sont-ils vulnérables ?
- Si oui, planifiez la mise à jour
Si vous ne parvenez pas à mettre à jour :
- Restreindre l'accès à SSH (limiter l'exposition de ssh aux réseaux d'administration, filtrer par liste blanche d'adresses IP...)
- Désactiver les connexions par mot de passe lorsque c'est possible
- Surveiller les journaux d'évènement SSH pour détecter les activités inhabituelles
En complément, voici une procédure que nous recommandons pour mettre à jour sans perdre la main si la mise à jour classique ne fonctionne pas ou n’est pas disponible :
sudo apt show openssh-server
Depends: adduser (>= 3.9), dpkg (>= 1.9.0), libpam-modules (>= 0.72-9), libpam-runtime (>= 0.76-14), lsb-base (>= 4.1+Debian3), openssh-client (= 1:8.9p1-3ubuntu0.7), openssh-sftp-server, procps, ucf (>= 0.28), debconf (>= 0.5) | debconf-2.0, libaudit1 (>= 1:2.2.1), libc6 (>= 2.34), libcom-err2 (>= 1.43.9), libcrypt1 (>= 1:4.1.0), libgssapi-krb5-2 (>= 1.17), libkrb5-3 (>= 1.13~alpha1+dfsg), libpam0g (>= 0.99.7.1), libselinux1 (>= 3.1~), libssl3 (>= 3.0.2), libsystemd0, libwrap0 (>= 7.6-4~), zlib1g (>= 1:1.1.4)
sudo apt install adduser dpkg libpam-modules libpam-runtime lsb-base openssh-client openssh-sftp-server procps ucf debconf libaudit1 libc6 libcom-err2 libcrypt1 libgssapi-krb5-2 libkrb5-3 libpam0g libselinux1 libssl3 libsystemd0 libwrap0 zlib1g libzstd1 zlib1g libssh-4 libssh-dev libssl3 libc6-dev libc6 libcrypt-d
VER=9.8p1
wget -O /tmp/openssh-9.8p1.tar.gz https://ftp.fr.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-${VER}.tar.gz
wget -O /tmp/RELEASE_KEY.asc https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/RELEASE_KEY.asc
gpg --import /tmp/RELEASE_KEY.asc
cd /tmp/
tar -xvf openssh-${VER}.tar.gz
cd openssh-${VER}
./configure --prefix=/opt/openssh-${VER}
sudo make
sudo make install
cd /usr/lib/systemd/system/
cp -av ssh.service ssh-latest.service
cp -av ssh@.service ssh-latest@.service
cp -av ssh.socket ssh-latest.socket
cp -av rescue-ssh.target rescue-ssh-latest.target
### Modification manuellement
diff -y --suppress-common-lines ssh-latest.service ssh.service
ConditionPathExists=!/opt/openssh-latest/etc/sshd_not_to_be_r | ConditionPathExists=!/etc/ssh/sshd_not_to_be_run
EnvironmentFile=-/opt/openssh-latest/default/ssh | EnvironmentFile=-/etc/default/ssh
ExecStartPre=/opt/openssh-latest/sbin/sshd -t | ExecStartPre=/usr/sbin/sshd -t
ExecStart=/opt/openssh-latest/sbin/sshd -D $SSHD_OPTS | ExecStart=/usr/sbin/sshd -D $SSHD_OPTS
ExecReload=/opt/openssh-latest/sbin/sshd -t | ExecReload=/usr/sbin/sshd -t
Type=exec | Type=notify
RuntimeDirectory=sshd-latest | RuntimeDirectory=sshd
Alias=sshd-latest.service | Alias=sshd.service
diff -y --suppress-common-lines ssh-latest.socket ssh.socket
Before=ssh-latest.service | Before=ssh.service
Conflicts=ssh-latest.service | Conflicts=ssh.service
ConditionPathExists=!/opt/openssh-latest/etc/sshd_not_to_be_r | ConditionPathExists=!/etc/ssh/sshd_not_to_be_run
ListenStream=2222 | ListenStream=22
diff -y --suppress-common-lines rescue-ssh.target rescue-ssh-latest.target
Requires=network-online.target ssh.service | Requires=network-online.target ssh-latest.service
After=network-online.target ssh.service | After=network-online.target ssh-latest.service
mkdir -vp /opt/openssh-latest/default/
cp -av /etc/default/ssh /opt/openssh-latest/default/
systemctl enable ssh-latest.service
systemctl enable ssh-latest.socket
systemctl daemon-reload
systemctl start ssh-latest
systemctl status ssh-latest
echo | nc localhost 2222
SSH-2.0-OpenSSH_9.8
Invalid SSH identification string.
Ensuite :
- Se connecter via le port 2222 pour verifier que ca fontionne et desactiver le service ssh.service
- Modifier la conf de port de /etc/ssh/sshd_config pour remettre le port 22
- Redemarrer le service ssh-latest (risque de perdre le serveur)
- Se reconnecter en ssh sur le port 22
ssh -p 2222 <user>@<server>
cat /etc/ssh/sshd_config
...
Port 22
...
sudo systemctl restart ssh-latest
ssh -p 22 <user>@<server>
Source: https://gist.github.com/jtmoon79/745e6df63dd14b9f2d17a662179e953a
Bonnes chances et soyez heureux que nous soyons lundi et pas vendredi 😉.
Levée de 11 M€ pour Patrowl en série A : Vers une protection continue des actifs numériques
Blog: regreSSHion, critical vulnerability on OpenSSH CVE-2024-6387