Habiendo cometido el mismo error hace un par de años:
La mayoría de los protocolos / software devolverán un código de error si intenta iniciar sesión con un nombre de usuario válido (que no sea "anónimo") y una contraseña vacía. Esto es cierto incluso para la mayoría de los sistemas que permiten algún tipo de uso anónimo sin iniciar sesión en absoluto.
Para LDAP, sin embargo, el caso común es que el servidor permite inicios de sesión con cualquier nombre de usuario y una contraseña vacía . El usuario terminará siendo anónimo. Pero el inicio de sesión devuelve un código de estado que indica el éxito.
RFC2829 dice:
Un cliente LDAP también PUEDE elegir enlazar explícitamente de forma anónima. Un cliente que desee hacerlo DEBE elegir la opción de autenticación simple en la solicitud de enlace (consulte la sección 4.1) y configurar la contraseña para que sea de longitud cero. (Esto lo hacen a menudo los clientes LDAPv2). Por lo general, el nombre también es de longitud cero.
Entonces, ahora imagine que el usuario no realiza el inicio de sesión directamente. Pero el usuario inicia sesión en otro software, y este software toma el nombre de usuario y la contraseña y realiza un inicio de sesión LDAP entre bastidores.
Si este software confía ciegamente en el resultado "exitoso" del servidor LDAP sin tener un manejo especial de casos para contraseñas vacías, boom .
Ese software podría incluso intentar leer cierta información sobre el usuario actual, como la dirección de correo electrónico. Pero si LDAP se utiliza como un directorio de personas, esta información puede ser accesible para usuarios anónimos. Los servidores LDAP a menudo solo son accesibles desde la red de la empresa y no desde Internet.
Dije al principio, que yo mismo cometí este error. Nuestro software es compatible con muchos tipos diferentes de frente de autenticación y backends. LDAP fue el único sistema afectado de todos los que admitimos.
Para garantizar que esto no vuelva a suceder, ahora rechazamos globalmente las contraseñas vacías para todos los sistemas de autenticación , a menos que el sistema no tenga contraseña, como los servicios de inicio de sesión único y las tarjetas inteligentes. Y agregamos un caso de prueba adicional a nuestra documentación (buen caso de prueba, prueba de contraseña incorrecta, contraseña de prueba vacía).