miércoles, abril 09, 2008

Jugando con LDAP (I de III)


***************************************************************************************
- Jugando con LDAP (I de III)
- Jugando con LDAP (II de III)
- Jugando con LDAP (III de III)
***************************************************************************************

Las técnicas de LDAP Injection tienen peculiaridares dependiendo de la implementacion, el componente que se esté utilizando en la aplicación web como cliente LDAP y el filtro LDAP dónde se esté inyectando. Hay algunas de ellas bastantes curiosas, por ser tratadas de forma distinta en las distintas implementaciones, así que vamos a jugar un poco con ello.

Las implementaciones

Hay sitios dónde se acaban los RFCs. Sí, en las orillas, en los casos degenerados, en los usos extremos de los protocolos los estandares no definen todos los comportamientos. Sí, supongo que cuando nos enseñan que es un estándar tendemos a pensar que un estándar define absolutamente todos los comportamientos, pero la realidad es que no es así. Hay situaciones no contempladas por los estándares dónde las decisiones las toma la implementación. Ejemplos de estos hemos tenido en TCP/IP y las herramientas de fingerprinting para reconocer el sistema operativo en base a las respuestas en situaciones no contempladas en mensajes TCP/IP. En LDAP Sucede lo mismo.

Las preguntas

¿Se pueden enviar dos filtros LDAP en un único mensaje LDAP a un servidor LDAP? ¿Qué va a hacer el componente utilizado como cliente LDAP en la aplicación Web? ¿Cómo se va a comportar el servidor LDAP? ¿Cuál es la mejor decisión respecto a seguridad? ¿Sería mejorable?.

Estas son algunas de las cuestiones que podemos hacernos a la hora de evaluar estos comportamientos. Hay que tener en cuenta que la decisión que adopte una implementación u otra marcará las reglas en un ataque de LDAP Injection.

Dos filtros LDAP en un único mensaje

A la pregunta de sí se puede enviar dos filtros en un único mensaje hemos de decir que a priori esto depende del componente. Hay componentes que sí lo permiten y hay componentes que no lo permiten. Vaya, acabamos de empezar y ya tenemos discrepancias. LDAP Browser, una herramienta gratuita que cualquiera se puede descargar sí permite enviarlos, mientras que IP*Works!. Esto va a tener implicaciones en el la aplicación y alguna curiosidad que analizaremos más adelante.

OpenLDAP

¿Qué hace OpenLDAP si le llegan dos filtros en un mensaje? Pues una curiosidad. En la siguiente captura teneis la captura de WireShark para el envío de dos filtros a un árbol LDAP. Cómo se puede ver, Wireshark da un mensaje de error (en amarillo) a la hora de interpretar el protocolo, ya que encuentra caracteres después del primer filtro completo.

Wireshark. Dos filtros en un mensaje enivados a OpenLDAP

¿Y que va a devolver OpenLDAP? Pues curiosamente las implementaciones de OpenLDAP han optado por devolver la respuesta únicamente al primer filtro completo.

Respuesta OpenLDAP a dos filtros en un mensaje

¿Es esta la mejor respuesta? Yo no lo tengo claro, pero lo que sí es cierto este es que este comportamiento hace que las inyecciones LDAP que se realicen en filtros sin operador lógico, es decir, filtros simples con una única comparación no tengan impacto. Al hacer esto, cualquier inyección de lógica en un filtro LDAP simple dará al menos dos filtros y el segundo (el inyectado) no tendrá efecto. Esto hace que las inyecciones propuestas por Sacha Faust, que él probó en un entorno SUN, y que están descritas en OWASP-LDAP Injection, NO funcionen en OpenLDAP de esta forma.

Esto no funciona en OpenLDAP

Saludos Malignos!

***************************************************************************************
- Jugando con LDAP (I de III)
- Jugando con LDAP (II de III)
- Jugando con LDAP (III de III)
***************************************************************************************

Eleven Paths Blog

Seguridad Apple

Entradas populares