Il y a quelques jours, en explorant un serveur LDAP public — celui de *.cd — je suis tombé sur une découverte qui mérite d’être partagée, car elle montre à quel point certaines configurations de serveurs peuvent être dangereusement ouvertes.
Pour ceux qui ne le savent pas encore, LDAP (Lightweight Directory Access Protocol) est une technologie largement utilisée dans les entreprises et administrations pour gérer les informations des utilisateurs : leurs noms, adresses mail, groupes d’appartenance, et parfois même des photos. C’est comme un annuaire numérique, centralisé, qui permet aux systèmes et aux applications de vérifier qui est qui, de gérer les accès, et parfois d’autoriser des actions.
Normalement, pour accéder aux informations sur un serveur LDAP, il faut s’authentifier. C’est-à-dire fournir un nom d’utilisateur et un mot de passe, ce qui garantit que seuls les utilisateurs autorisés peuvent voir certaines données. Sauf que, dans ce cas précis, le serveur acceptait les connexions anonymes. Cela veut dire que n’importe qui, sans fournir aucun identifiant, pouvait se connecter et parcourir toute la base.
Parce que cette ouverture permet à un attaquant de :
- Lister tous les comptes utilisateurs.
- Découvrir la structure interne de l’organisation.
- Récupérer potentiellement des données sensibles (adresses mail, groupes, et parfois même photos).
Cela donne une énorme carte blanche à quelqu’un qui voudrait attaquer le système plus tard — par exemple, en envoyant des emails de phishing ciblés ou en essayant de forcer des mots de passe.
Avec quelques lignes de code en Python, en utilisant la bibliothèque ldap3, j’ai réussi à me connecter au serveur, à lancer une recherche simple, et à obtenir la liste des utilisateurs sans aucun mot de passe. Voici en gros ce que ça donnait :
from ldap3 import Server, Connection, ALL
server = Server('*.cd', get_info=ALL)
conn = Connection(server, auto_bind=True)
conn.search('dc=*,dc=cd', '(objectClass=person)', attributes=['cn', 'mail'])
for entry in conn.entries:
print(entry)
Pas besoin d’authentification, juste la connexion, et hop, la base était ouverte.
On appelle ça une divulgation d’informations via LDAP anonyme, ou plus simplement un LDAP Anonymous Bind Information Disclosure. C’est une vulnérabilité assez classique, mais pourtant très dangereuse, surtout quand le serveur est exposé sur Internet et contient des données sensibles.
Que faire pour se protéger ?
- Désactiver les connexions anonymes : un serveur LDAP ne devrait jamais permettre de naviguer sans authentification. Voir : LDAP Anonymous Binds Explained.
- Restreindre les données visibles : limiter les attributs consultables selon l’identité de celui qui fait la requête. Plus d’infos sur les ACL LDAP ici : OpenLDAP Access Control.
- Limiter l’accès réseau : idéalement, le serveur LDAP ne doit pas être accessible en clair sur Internet. Privilégier le VPN ou les connexions sécurisées.
- Surveiller les accès : détecter toute requête anormale ou massive. Des outils comme Splunk , Elasticsearch , ou encore ce rapport HackerOne sur LDAP pour le bug bounty peuvent être utilisés.
Scripts de test
Pour ceux qui veulent reproduire cette exploration ou tester leurs propres serveurs LDAP, nous avons mis à disposition les scripts Python que nous avons utilisés. Vous pouvez les consulter, les télécharger et les adapter librement via ce lien :
En savoir plus sur les vulnérabilités LDAP
Pour approfondir, voici quelques ressources intéressantes :
Conclusion
Cette découverte m’a rappelé que même des technologies robustes comme LDAP peuvent devenir des points faibles si elles ne sont pas bien configurées. La sécurité, c’est dans le détail — et c’est un travail continu. Que ce soit pour un projet perso ou une grosse organisation, il faut toujours vérifier que ses serveurs ne laissent pas des portes ouvertes.
Si tu utilises LDAP, prends le temps de vérifier tes configurations, et surtout, n’hésite pas à faire des audits réguliers !
Merci d’avoir lu