KeiruaProd

I help my clients acquire new users and make more money with their web businesses. I have ten years of experience with SaaS projects. If that’s something you need help with, we should get in touch!
< Back to article list

Clés RSA Github compromise: que faire

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.

Le problème

Pierre est expert en sécurité, et il explique bien mieux que moi les conséquences de cet accident, et les possibles problèmes.

Supprimer l’ancienne clé github de vos hotes connus

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

Révoker la clé RSA de github

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

Une gestion fine de vos clés

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.

Passer à ed25519

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.

La conf finale

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