Que es peor: buenos programadores o malos programadores?

Axioma: Malos programadores hacen huecos en la seguridad del software, y buenos programadores los encuentran y los explotan. . . Así que cual es peor?


Sujeto: El Modelo de Objetos de SharePoint 2007


Paradigma: Buscando en los rincones escondidos del nuevo Modelo de Objetos de SharePoint 2007, he encontrado una propiedad que permite mostrar en pantalla la contraseña (password) del administrador. Todo lo que se necesita es 4 renglones de código:


    SPWebApplicationCollection CollectionApplicationsWeb = SPWebService.ContentService.WebApplications;
    SPWebApplication oneApplicationWeb = CollectionApplicationsWeb[«SharePoint – 80»];
    SPApplicationPool myAppplicationPool = oneApplicationWeb.ApplicationPool;
    Console.WriteLine(«Yo soy ‘» + myAppplicationPool.Username + «‘ y mi clave es ‘» + myAppplicationPool.Password + «‘»);


Y el resultado es … espeluznante:


(Note que la contraseña está protegida por todas partes, inclusive en la pantalla de IIS, desde donde ni siquiera se puede copiar con ctl+c, como el aviso indica).


Postulado: este es un hueco de seguridad más grande que el que tiene el monte Erebus (a que nadie sabe en donde queda el monte Erebus… no lo busquen, yo se los cuento: es en donde esta Appassionata von Climax en este momento)… estoy pensando que a metidas de pata en software habría que darles nombres como a los huracanes; desde este momento, podemos hablar del «Bug Erebus» para referirnos a esta forma de ver contraseñas de Windows… Además, Erebus fue el hijo de Caos, por lo que el nombre me parece bastante adecuado.


Escolio: A ver cuánto tiempo pasa antes de que un buen programador encuentre la forma de explotar el hueco. Hay un par de barreras a vencer, pero por eso tiene que ser un buen programador. Además, aunque Microsoft se de cuenta que metió las patas (demasiado tarde), y elimine esta propiedad del Modelo de Objetos, ya sabemos que las contraseñas están por ahí, en alguna parte, y simplemente habría que buscarlas un poquito más para encontrarlas.


Corolario: Hay alguien por ahí con línea directa con los dioses en Redmond? Yo les puedo enviar una docena de E-mails contándoles del asunto, pero de todas formas no me van a hacer caso, pero de pronto a alguien con buenos contactos por esas altas esferas si le hacen caso… Fuera de chistes, esto es serio señoras y señores, bastante serio…


Gustavo – http://www.gavd.net/servers/
Escriba un Comentario que me haga reir…

17 comentarios sobre “Que es peor: buenos programadores o malos programadores?”

  1. Uhmmm… has probado a ejecutar ese código con otra cuenta que no sea administrador.

    Esa contraseña es probable que esté escrita en el registro y protegida o bien con RSA o bien con DAPI y la cuenta de administrador tenga acceso a ella.

    Ahora no tengo aquí un IIS 6.0 pero mirando en IIS 7.0 en Windows Vista la contraseña del App Pool está encriptada en el applicationHost.config usando el proveedor de RSA. Ahora tengo que enterarme si con una clave de máquina o de usuario y quién tiene acceso a ella.

    Cuando tengas más datos lo comento.

  2. Hola Ivan. El código no ejecuta bajo un usuario «normal» porque solamente administradores tienen derechos suficientes para utilizar la clase «SPWebApplicationCollection». La cuestión es que nadie, pero nadie, ni siquiera un administrador debería poder ver contraseñas de nadie. Hasta ahora, que yo haya visto, ni siquiera las herramientas de crackers pueden hacer algo por el estilo (puedes intentar ataques de diccionario, o de fuerza bruta, pero no puedes descifrar las contraseñas existentes). El asunto grave es que si eres administrador, puedes ver las claves de otros administradores en el sistema, y eso no debería ser posible.

  3. Ten en cuenta que esto no te va a permitir ver otras contraseñas de otros administradores.

    Te va a dejar ver las password de las cuentas que hayas usado para la identidad de los app pools. Nada más. Y tus App Pool no se deberían de ejecutar bajo una cuenta de administrador.

    Nadie que no sea administrador va a poder ver esa contraseña, y si eres administrador, no es que la pueda ver… es que la puedo cambiar a la que me de la gana directamente!!!

    Esto lleva así desde que salío IIS 6 y hasta ahora no ha habido ningún problema.

    No conozco en detalle DAPI o RSA, pero alguien que no sea admin tendrá que hacer un ataque de fuerza bruta para sacar esa password. Y si llega a escalar privilegios y escalar como admin, pues este es el menor de tus problemas.

  4. Hola Ivan. Si te deja ver la contraseña de otros administradores, solamente tienes que especificar el Grupo de Trabajo que desees, y los datos los encuentras sin más. Tienes razón que un Application Pool no se debería ejecutar bajo una cuenta de Administrador, pero esa es la configuración por defecto de SharePoint (2003 y 2007), y todo el mundo la utiliza sin pensar en las consecuencias.
    Por otro lado, se pueden pensar escenarios en donde no sea necesario hacer un ataque de fuerza bruta para hacer algo de daño en el sistema; imagínate, por ejemplo, el hipotético Administrador de Sistemas que sale despedido de la empresa, y en su ultimo día se lleva todas las contraseñas que pueda encontrar… al día siguiente su propia contraseña es bloqueada, pero el ya tiene toda una lista a su disposición… casos han ocurrido.
    Por otro lado, estoy de acuerdo que es un hueco que no se dejara explotar fácilmente, pero el hecho es que de ninguna manera, nunca, se debería poder ver la contraseña de nadie. Y ese hecho ha sido negado con esta propiedad del Modelo de Objetos.

  5. ¿ alguien mas lo ha probado ?
    en mi caso pareciera no funcionar correctamente, ya que en una VPC de prueba la pwd del usuario de MOSS es «Pa$$w@rd» y me muestra «password» … aunque para hacer un poco mas de daño, he creado una pagina http://geeks.ms/files/folders/elbruno/entry9553.aspx y simplemente hay que ponerla en el directorio C:Program FilesCommon FilesMicrosoft Sharedweb server extensions12TEMPLATELAYOUTS y luego navegar «http://MOSS2007SERVER/_layouts/getpwd.aspx» menudo susto no ?

    Saludos

  6. Hola Gustavo & cía,

    lo he probado de diferentes maneras y formas, incluso creando un proyecto nuevo, y la contraseña me aparece siempre en blanco… es decir » (nada vamos).

    Lo he hecho en MOSS 2007, en WSS 3.0,… y el resultado es el mismo.

    Ni siquiera me aparece como a Bruno el texto password.

    Estoy ejecutándolo en una máquina virtual, con W2003 y todo en inglés.

    ¿Alguien más lo ha probado?.

    P.D.: para el que se pierda, necesita referenciar el namespace Microsoft.SharePoint.dll o bien seguir lo que dice Bruno.

    P.D.2: seguiré mirando un poco más por si acaso, pero en principio no me ha dado nada alarmante.

  7. He puesto todas las credenciales posibles en AppPool… igual se me escapa algo.

    También tengo los últimos parches del sistema instalado… ¿?

    De todos los modos, no tiene mucho sentido ejecutar la aplicación en un App Pool bajo la figura del Administrador ¿no?. El Administrador se supone que es el nivel más alto en la jerarquía y ejecutarlo en un App Pool de administrador puede resultar temerario.

    El administrador es normal que pueda y deba tener acceso a casi cualquier cosa.

  8. Hola Ivan, Jorge, El Bruno, Gustavo (no, Gustavo no, ese soy yo mismo)…

    En el script de El Bruno hay que cambiar el nombre del Application Pool para utilizar alguno de los Pools existentes en IIS. Por casualidad puede funcionar con “SharePoint – 80”, pues MOSS crea una Aplicación Web por defecto con ese Pool, pero no tiene porque ser así siempre.

    Por pura curiosidad he creado un nuevo usuario en el servidor y cambiado la identidad del Pool para que lo utilice, con un resultado raro y otro previsible: el raro es que por más que intento de todo, el código de prueba sigue dándome las credenciales del usuario origina (no importa si detienes y arrancas el Pool de nuevo, o si haces un iisreset); el previsible es que MOSS deja de funcionar…

    La saga continua…

    PS: Jorge: Un Administrador debe tener acceso a casi cualquier cosa, pero no a las contraseñas de otros usuarios

  9. Estoy con Gustavo, aunque con matices: Según el tipo de entorno/organización, los admins, por más admins que sean, NO deben tener acceso a las contraseñas DE NADIE. Esto en el caso de tratarse de los admins de empresas tipo Endesa, Banesto…

    Ahora bien si se trata de una empresilla de 3 o 4 sucursales y no más de 30 o 40 empleados, normalmente de las llamadas «familiares»… hombre aquí la cosa se podria relajar un poquillo, que no se trata de convertir a la Mercería Las Virtudes en el Pentágono del barrio 😛

  10. A ver a ver… voy a tratar de aclarar…

    Yo decía:
    «El administrador es normal que pueda y deba tener acceso a casi cualquier cosa.»

    Es decir, que el administrador puede tener acceso a casi cualquier cosa, pero no a todo obviamente. No hablo de las contraseñas de otros, pero sí a que pueda tener acceso a la gestión de todo el entorno. Sólo eso.

    Lo que pasa es que en este caso, a mí no me sale lo que comentas Gustavo. Lo he probado varias veces y de diferentes formas, e igual soy yo quien me estoy equivocando…

    Desconozco si tienes algún SP instalado o si es por el idioma de la máquina, pero a mí no me muestra nada.

    ¿Puedes enviarme o poner la aplicación de consola por si me he equivocado en algo al escribir la aplicación de explotación de esta posible vulnerabilidad?.

    El puerto es el 80, y accedo a la misma que tú… «SharePoint – 80» que es la instancia por defecto.

  11. PabloNetrix,

    no sucede que un admin pueda ver el password de otro admin porque si!!!

    lo que se está demostrando en este caso es que se podría si el otro/s admins configuran un AppPool para que se ejecute con su cuenta de admin.

    Y en este caso se merecen que se sepa su pass y la lapidación pública en la plaza del pueblo

    🙂

    No es Windows el que almacena la contraseña de forma reversible, es IIS cuando tu le metes los datos en la pestaña de configuración del AppPool para luego poder lanzar los W3WP con esas credenciales.

  12. Señores (todavía no ha aparecido una señora por estos lados), la propuesta de Jorge me parece estupenda. Desde este sitio pueden bajar la aplicación:

    http://www.gavd.net/servers/files/2007/MiContrasennaPorFavor.zip

    Es una aplicación de consola, y de entrada les va a mostrar las Aplicaciones Web creadas.

    Cuando estaba probándolo todo me he dado cuenta de un par de cosas:

    – No funciona siempre; probablemente este es el problema de Jorge. En una instalación de MOSS con 4 Aplicaciones Web, funciona con tres y con una no.

    – No funciona siempre de la misma manera; lo he probado con una instalación de MOSS en español (lo que les cuenta aquí arriba), y luego con otra en Ingles que es instalada precisamente de la misma forma que la versión en español: aquí funciona en dos Aplicaciones Web, y en las otras dos no.

    Todas las Aplicaciones han sido creadas con exactamente la misma cuenta. Así que si a alguien se le ocurre algo… Jorge: No creo que te estés equivocando, lo más probable es lo contrario… yo ya voy perdiendo la cuenta de lo que está pasando con este asunto… Así que si los dos terminamos en un manicomio (perdón, en una casa de salud), a lo mejor podemos dedicarnos a jugar ajedrez On-Line tranquilamente y dejar los problemas de SharePoint a otras victimas  [:D]

    También incluyo el código para que se puedan divertir un rato con los misterios que nos proporcionan nuestros amigos de Microsoft.

    Un saludo.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *