web-dev-qa-db-fra.com

Un serveur HTTPS peut-il divulguer accidentellement sa clé privée?

Y a-t-il des cas connus de sites Web HTTPS qui fuient la clé privée de leur certificat SSL? Est-il même techniquement possible pour un mauvais administrateur de site Web de mal configurer un site pour envoyer la clé privée dans le cadre de la chaîne de certificats?

24
John Blatz

Y a-t-il des cas connus de sites Web HTTPS qui fuient la clé privée de leur certificat SSL?

Oui - le bogue Heartbleed impliquait des fuites de mémoire du serveur HTTP telles que:

Nous nous sommes attaqués de l'extérieur, sans laisser de trace. Sans utiliser aucune information privilégiée ou informations d'identification, nous avons pu nous voler les clés secrètes utilisées pour nos certificats X.509, ...

Mis à part des bugs comme ça,

Est-il même techniquement possible pour un mauvais administrateur de site Web de mal configurer un site pour envoyer la clé privée dans le cadre de la chaîne de certificats?

Sûr. Si vous spécifiez le mauvais fichier dans, par exemple, SSLCertificateChainFile alors Boom! Voilà la clé privée.

Comme le souligne @duskwuff dans les commentaires, il existe des protections contre cela. Ni Apache ni NGINX n'enverra de clé PEM incluse dans un fichier de certificat; ils le retireront en silence (ce qui, je suis prêt à parier, est une protection mise en place après un certain nombre d'événements où les gens ont fait ce que je pensais pouvoir fonctionner).

D'autres erreurs de configuration, telles qu'une racine Web incorrecte combinée à des autorisations lâches ou à des privilèges de serveur Web excessifs, feront également fuir la clé, mais ces erreurs de configuration sont à la fois banales et extrêmes (par exemple, vous devez vraiment essayer de casser des choses aussi mal).

Cela n'est pas recommandé.

38
gowenfawr

Oui, via une mauvaise configuration ou des configurations incorrectes encore inconnues. Je ne répéterai pas le contenu de la réponse de @gowenfawr.

Il convient de mentionner en passant qu'il existe un certain nombre de mauvaises configurations possibles qui ne fuient pas directement la clé mais pourraient permettre à un attaquant de déchiffrer des parties de la communication. Une partie du travail vers TLS 1.3 vise à atténuer cela en supprimant la prise en charge de certains chiffrements et d'autres configurations potentiellement non sécurisées ( https://blog.cloudflare.com/rfc-8446-aka-tls-1-3/ ).

De même, d'autres éléments peuvent entraîner une perte de confidentialité; comme la vulnérabilité SSL v2 connue sous le nom de DROWN ( https://drownattack.com/ ) où auparavant SSL v2 était connu pour être non sécurisé mais de nombreuses installations l'ont laissé activé pour des raisons de compatibilité.

Bien que ce ne soit pas idéal, cela a conduit à la possibilité d'extraire la clé de session d'un serveur qui utilisait les mêmes clés ou le même certificat mais qui se trouvait exécuter SSL v2 via un padding Oracle, exposant même le contenu des services TLS 1.2 en utilisant le même certificat (après observant un certain nombre de connexions entre la victime et le serveur).

DROWN montre que la simple prise en charge de SSLv2 est une menace pour les serveurs et clients modernes. Il permet à un attaquant de déchiffrer les connexions TLS modernes entre les clients et les serveurs à jour en envoyant des sondes à un serveur qui prend en charge SSLv2 et utilise la même clé privée.

En termes de fuite directe de la clé, vous pouvez également servir votre clé privée sur un serveur Web mal configuré, ou via un problème de traversée de répertoire (ou similaire)

6
richard

Il y a peu de temps, j'ai découvert une faille dans Traefik où un point de terminaison API fuyait la clé privée de leur certificat SSL (CVE-2018-15598).

https://Twitter.com/edoverflow/status/1031267058615508994

enter image description here

1
EdOverflow

Y a-t-il des cas connus de sites Web HTTPS qui fuient la clé privée de leur certificat SSL?

À strictement parler, une clé privée doit avoir des autorisations dr--------, avec root:root. Ainsi, seul l'utilisateur root peut lire le certificat. Si cela est mal configuré et que le serveur Web a accès à la clé privée, dans certaines circonstances, comme le serveur Web, il est compromis. Ensuite, nous avons pu voir la clé privée être "divulguée", sans le savoir par le serveur Web. Ceci, bien sûr, s'applique à tout programme ayant un accès en lecture à la clé privée.

Est-il même techniquement possible pour un mauvais administrateur de site Web de mal configurer un site pour envoyer la clé privée dans le cadre de la chaîne de certificats?

Par la configuration, je l'ai fait avec Apache 2, non! Ainsi, l'une de mes configurations de serveur Web implique:

    SSLCertificateFile /etc/Apache2/ssl/safesploit.com.cert.pem
    SSLCertificateKeyFile /etc/Apache2/ssl/safesploit.com.key.pem
    SSLCertificateChainFile /etc/Apache2/ssl/fullchain.pem

Donc, même si je comprends votre préoccupation concernant un `` mauvais administrateur '' plaçant la clé privée dans la chaîne complète, ce n'est tout simplement pas possible dans Apache 2 Vanilla, à moins qu'Apache n'ait été modifié pour accepter ce type de configuration.

Pour le contexte:

  • Clés publiques -r - r - r-- racine root
  • Clés privées -r -------- root root
1
safesploit