LetsEncrypt is currently unsecure

3 mars 2016 par: Benoit Bonneville

LetsEncrypt (LE) permet la délivrance de certificats gratuits, c’est une révolution pour le web.

Problème:

Les certificats générés sont lisible par tout utilisateur du system unix lors de la génération automatique.
Actuellement sur letsencrypt 0.4.2

Récapitulatif sur son le fonctionnement
Installation :
git clone https://github.com/letsencrypt/letsencrypt /opt/letsencrypt
/opt/letsencrypt/letsencrypt-auto

Puis il suffit de vous laisser guider. LetsEncrypt s’assure que votre serveur héberge bien le/les domaine(s) que vous demandez par une requette sur votre serveur HTTP. Par conséquent votre site sera coupé 2 petites secondes le temps de s’assurer de la vérification.

La configuration se fait ici:
/etc/letsencrypt/cli.ini
Vous pouvez y mettre par exemple : (pour les paranos)
rsa-key-size = 4096

Les logs se trouvent ici :
/var/log/letsencrypt/
Vous y trouverez un fichier par commande.

Un certificat n’est valide que 90 jours, donc il ne faut pas oublier de renouveler les certificats
0 6 * * 1 /opt/letsencrypt/letsencrypt-auto renew
Je lance cette cron chaque semaine, et non tout les deux mois.
Letsencrypt-auto est capable de déterminer si il doit ou non se renouveler (au bout de 60 jours)
Et si votre serveur est off une petite minute au moment de la cron, il est dommage de casser votre certificat SSL non ?

La faille

Les certificats générés le sont dans : /etc/letsencrypt/archive/my-blog-domain.com/
La sécurité se fait par des droits 700 dans /etc/letsencrypt/archive/ (ce qui empêche les utilisateurs de lister le contenu du répertoire)
Mais les certificats sont disponible en 644 (donc lisible par tous.)
Imaginons que vous utilisiez un wordpress, qui se fait pirater. Le pirate pourra utiliser des scripts sous l’utilisateur www-data. Il pourra alors lister le contenu de votre répertoire et accéder à votre fichier de configuration : /etc/apache/sites-enabled/my-blog-domain-ssl.conf
Une fois dedans il retrouvera le nom de votre clef privé letsencrypt et pourra la voler et aura donc accès à votre certificat SSL,
Il pourra donc décrypter tout vos échanges.

Le bug report existe, il est ouvert ici, security level low.
https://github.com/letsencrypt/letsencrypt/issues/1473

Solution

Sur Ubuntu, il vous suffit de changer les droits des fichiers et de les rendre lisible par le groupe ssl-cert.
chmod 640 /etc/letsencrypt/archive/*/privkey*.pem; chown root:ssl-cert /etc/letsencrypt/archive/*/privkey*.pem

Et ne pas oublier de l’éxecuter aussi apres la cron de renew
0 6 * * 1 /opt/letsencrypt/letsencrypt-auto renew > /dev/null;chmod 640 /etc/letsencrypt/archive/*/privkey*.pem; chown root:ssl-cert /etc/letsencrypt/archive/*/privkey*.pem

Filed under: Non classé

Répondre