La clé RSA de Github a été compromise ; quelqu’un l’a partagée sur un dépot public. Même si Github minimise le problème, c’est probablement grave. Si vous utilisez Github, il y a un certain nombre de mesures à prendre, dont on va parler ici.
C’est l’occasion de parler un peu de sécurité SSH, d’être paranoïaque (j’espère pour rien), mais d’apprendre des trucs.
Pierre est expert en sécurité, et il explique bien mieux que moi les conséquences de cet accident, et les possibles problèmes.
A minima, vous devez supprimer l’ancienne clé de vos hotes autorisés:
ssh-keygen -R http://github.com
# récupère la nouvelle clé
curl -L https://api.github.com/meta | jq -r '.ssh_keys | .[]' | sed -e 's/^/github.com /' >> ~/.ssh/known_hosts
Un truc à faire, c’est de révoquer cette clé. De ne plus jamais autoriser qui que ce soit à l’utiliser. Vous continuez d’utiliser RSA (c’est solide après tout), mais si qqu’un utilise cette clé (et je soupconne que des petits malins vont essayer), vous refusez la connection.
$ cat >>/etc/ssh/ssh_revoked_hosts <<EOF
# https://github.blog/2023-03-23-we-updated-our-rsa-ssh-host-key/
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAq2A7hRGmdnm9tUDbO9IDSwBK6TbQa+PXYPCPy6rbTrTtw7PHkccKrpp0yVhp5HdEIcKr6pLlVDBfOLX9QUsyCOV0wzfjIJNlGEYsdlLJizHhbn2mUjvSAHQqZETYP81eFzLQNnPHt4EVVUh7VfDESU84KezmD5QlWpXLmvU31/yMf+Se8xhHTvKSCZIFImWwoG6mbUoWf9nzpIoaSjB+weqqUUmpaaasXVal72J+UX2B+2RPW3RcT0eOzQgqlJL3RKrTJvdsjE3JEAvGq3lGHSZXy28G3skua2SmVi/w4yCE6gbODqnTWlg7+wC604ydGXA8VJiS5ap43JXiUFFAaQ==
EOF
# ~/.ssh/config
Host *
# https://gist.github.com/robbat2/b456f09b7799f4dafe24115095b8b29c
RevokedHostKeys /etc/ssh/ssh_revoked_host_keys
J’en ai parlé précédemment: par défaut, SSH va envoyer toutes vos clés à un hôte. Une solution, c’est d’avoir une gestion fine de vos clés, hôte par hôte.
Avec ça, ssh -v git@github.com
doit vous permettre de voir que vous ne présentez à github qu’une seule clé, que vous avez choisie.
Utiliser une clé RSA m’a fait passer pour un cake sur Twitter : pourquoi utiliser RSA (même si c’est encore solide) alors qu’il y a bien plus solide est rapide ?
On va régénérer une clé ED25519 pour résoudre le problème :
ssh-keygen -o -a 100 -t ed25519 -f ~/.ssh/keys/github.com -C moi@monemail.fr
Vous devez maintenant ajouter cette clé à votre compte github (et supprimer la clé RSA).
Comment tester que ca marche bien ? avec ssh -vt git@github.com
, vous pourrez voir que la clé ED25519 est bien utilisée, et que la connection se fait bien.
Voici un bout de cette config (~/.ssh/config
). Il vous faut le /etc/ssh/ssh_revoked_host_keys
créé au dessus.
# See https://www.keiruaprod.fr/blog/2023/01/09/better-ssh-public-key-usage.html
# for details
#
# In order to generate a key for an host:
# ssh-keygen -o -a 100 -t ed25519 -f ~/.ssh/keys/github.com -C your@host.com
# then you can test your key:
# ssh -vt git@github.com
# (-v for verbose, -t for test)
# An host you want a specific configuration for (it needs to be before "Host *")
Host 123.111.123.12
IdentityFile ~/.ssh/keys/id_your_machine_ed25519.pub
User your_user
# By default, we don’t want to send all our SSH keys to everybody
# So we tell it to use only one that match a pattern
Host *
# revoke some hosts, for instance after the github leak
# https://gist.github.com/robbat2/b456f09b7799f4dafe24115095b8b29c
RevokedHostKeys /etc/ssh/ssh_revoked_host_keys
IdentitiesOnly yes
# uses ~/.ssh/keys/git@github.com for github for example
IdentityFile ~/.ssh/keys/%h