Actualización: Las contraseñas del eCenso no están precisamente guardadas en texto plano, pero sigue siendo muy feo el asunto

Nota: Quiero reiterar que las informaciones expresadas en este blog corresponden a mi opinión personal y no comprometen la compañía para la que trabajo.

Ayer publiqué un post diciendo que las contraseñas de los usuarios del eCenso están almacenadas en texto plano, dado que muestran la contraseña al final del registro y la mandan el texto plano por email si usas la opción de “Olvidé mi contraseña”. Al investigar más, me di cuenta que esto no es precisamente cierto, así que quiero precisar lo que he descubierto desde entonces, gracias a la ayuda de Andrés Felipe Cruz y Jairo Suárez en Facebook.

eCenso Offline

Actualización: El eCenso Offline ya no está disponible.

El DANE tiene una opción de hacer el eCenso sin conexión a internet vía una aplicación de Windows. Sin embargo, esto no es una aplicación común y corriente: es un servidor WAMP completo que el usuario tiene que descargar y ejecutar, y que abre su propio navegador web.

2

El código detrás del eCenso Offline, hasta donde puedo ver, es casi idéntico al del eCenso normal. El código está escondido usando la bandera de archivo de sistema de Windows, pero apenas activé la opción de mostrar estos archivos en Windows, los pude ver.

1

Esto significa que cualquier persona puede descargar el código completo del eCenso y ver qué está ocurriendo. Esto también podría llevar a que un hacker pueda leer el código para descubrir más problemas de seguridad.

¿Cómo se almacenan las contraseñas?

Las contraseñas se almacenan en MySQL, en la base de datos bd_censo y la tabla ecp_usuarios. La contraseña para la base de datos está disponible en el código en los archivos de configuración. Creé un usuario de prueba y pude extraer su nombre de usuario y contraseña:

3

4

Parece que está encriptada, ¿no? Sí, está encriptada, pero es encriptación simétrica, y lo peor de todo es que la llave es pública para que todos la vean. El código para encriptar y desencriptar contraseñas es el siguiente, del archivo Danecrypt.php:

5

Ahora, es posible que la llave la hayan cambiado para la aplicación offline, pero de todas maneras sigue siendo muy mala práctica encriptar contraseñas en vez de usar hash+sal.

Adicionalmente, este código no es seguro. Haciendo una búsqueda, podemos ver que este código fue copiado y pegado de StackOverflow de una respuesta que tiene numerosas advertencias de los problemas de seguridad incluídos en él. ¿Por qué el DANE usaría código que la comunidad de programadores profesionales diría que es inseguro?

¿Por qué es malo encriptar contraseñas (en vez de usar un hash+sal no-reversible)?

Si las contraseñas se pueden encriptar, significa que se puede desencriptar, no solo por el sistema, sino también por un hacker, un empleado con intenciones maliciosas, o cualquier otra persona que consiga acceso a la llave. En este caso, conseguir acceso a la llave fue ridículamente fácil ya que el DANE nos deja literalmente descargarla de su página.

Poder recuperar la contraseña original suena como buena idea para alguien sin mucho conocimiento, pero al analizarlo más profundamente, no es algo necesario o deseable. Dado que muchos usuarios re-usan contraseñas, es importante que si se roban la base de datos, los hackers no puedan usar las contraseñas para hackear otras páginas. Además, este tipo de encripción hace que todos los usuarios que usen la misma contraseña tengan la misma contraseña encriptada (recordemos que la contraseña más popular del mundo es “password”).

Las contraseñas deben ser transformadas usando hash+sal, lo cual hace virtualmente imposible recuperar la contraseña original. Este es el estándar de la industria. Si el usuario olvida la contraseña, no es necesario darle la contraseña original; puede recuperar su cuenta creando una nueva. El hash hace que la contraseña se transforme en una sola vía en algo único pero irreconocible, mientras que la sal aleatoria hace que el hash de todos los usuarios sea diferente y único.

Conclusión

Todo esto apunta a que el eCenso tiene numerosos problema de seguridad. No solo guarda la contraseña en un formato de encripción reversible, sino que hace que la llave de encripción esté pública para que todos la vean y mandan las contraseñas por email en texto plano. Además, otras contraseñas como la de la base de datos están fácilmente disponibles en el código descargable.

En mi opinión, el DANE debe responder a estas fallas de seguridad tremendas que hay en el eCenso. Están promoviendo el eCenso como seguro, pero esto es falso. Por lo menos, de manera inmediata deben quitar el eCenso Offline y actualizar todas las contraseñas y llaves de encripción en su aplicación online, especialmente si se comparten con la versión offline.

  • JhonAlx

    Hola ¿Tienes el código? ya no está disponible y quisiera verlo. Si me puedes enviar un link de algún repoo paraa clonaralo, sería perfecto.

    Gracias :)

    • Juliana Peña

      Hola Jhon, espero entiendas que dado su naturaleza sensible y el hecho que no soy dueña del código, no lo puedo compartir.

  • Marcus Sanchez

    Todas las contraseñas quedan en la bandeja de salida del email que las envia, no es para nada menos feo, es exactamente lo que decias, estan siendo guardadas en texto plano, solo que no en la base de datos.

  • Andres Gonzalez

    wow, es increible que utilicen tecnologia tan obsoleta para un sitio web que tiene contiene informacion tan sensible.

    • Orlando Garzón Díaz

      Que tal Andres. Las aplicaciones web hechas en PHP no son obsoletas, sino porque cerca del 30% de los sitios Web están bajo WordPress ? http://mediatemple.net/blog/news/what-expect-wordpress-2018

    • Andres Gonzalez

      Yo no estoy hablando del lenguaje, me refiero más bien a la arquitectura y diseño. Tal vez me exprese mal en ese sentido. Aunque por otro lado php no es que sea reconocido por su nivel de seguridad.

    • franciscoandrspinznsantoyo

      Tiene razòn con la arquitectura de software.
      2. PHP es muy seguro siempre y cuando lo sepa implementar, utilizando buenas practicas de desarrollo, el uso de Frameworks en dez de “PHP Puro”. El punto aquí es la contratación de las entidades del estado con “x empresas” sin profesionalismo, si no más bien, favores políticos o sencillamente corrupción. No hay discusión al respecto.
      Al menso la presión los llevo a cambiar o implementar el cambio de contraseña.
      No me imagino las discusiones allá internamente…

    • Orlando Garzón Díaz

      Que tal Andres. De nuevo retomo el tema de la seguridad de lenguaje PHP no es cierto, como lo mencioné antes si es tan inseguro por qué WordPress (CMS basado en PHP) tiene el más del 29% de los sitios Web http://mediatemple.net/blog/news/what-expect-wordpress-2018 , y porque el sitio Web de la Casa Blanca de EE.UU. (https://www.drupal.org/u/whitehouse ) sigue basado en Drupal (otro CMS escrito en PHP, y es más si no a ingresado a Facebook desde su navegador del celular, sigue soportando su sitio principal en PHP ? Solamente para nombrar unos cuantos ejemplo. Seguramente todos ellos estarán muy equivocados. El tema de la seguridad en PHP no es el lenguaje, sino la configuración del servidor Web y de la experiencia del desarrollador para incluir métodos para evitar ataques informáticos de diferentes tipos. Hasta donde yo sé, los servidores Web como Apache se puede usar un módulo llamado modSecurity https://openwebinars.net/blog/seguridad-en-apache-modsecurity/ que tiene reglas de la OWASP https://www.owasp.org/index.php/Main_Page . No afirme algo que al parecer no ha trabajado en profundidad, y que el tema de que muchos proyectos pequeños fueron implementados por desarrolladores novatos o con poca experiencia, no le quita que el lenguaje sea inseguro.

    • Muy buena apreciación Orlando, solo un detalle el sitio Web de la Casa Blanca de EE.UU hace poco esta en WordPress :)

      Saludos

    • Ana Angel

      Un cordial saludo Andres, quisiera preguntarte segun tu, cual sería mejor reconocido por su nivel de seguridad, con que base comentas que no es reconocida, solo porque la Ingeniera menciono (de manera erronea) los fallos de seguridad generaste esa apreciación?
      Cuando subieron las cosas a facebook y estaba en php pensaron en ello? y claroooo ahora si se preocupan. Dejemos un poco la doble moral, sobretodo de los que ahorita andan angustiados por su contraseña… son los mismos que en un supermercado cada vez que les dan un detallito gratis dejan todos sus datos en el papel y lo firman … hay si no se preocupan? no solo se roban la información de los sistemas informaticos, hay que abrir un poco los ojos
      .

    • Jaime Villeneuve

      Donde Fabien Potencier lea esto lo despeluca.

    • Andres Aguilar

      jajaja lo que hay que leer….. por el comentario se puede deducir que tiene un nivel similar al pobre que desarrollo la dichosa aplicación

    • Andres Gonzalez

      Puede ser… tal vez si me presento a una licitación pueda ganarme un contrato con el gobierno.

  • franciscoandrspinznsantoyo

    Cómo podemos llamar esto, ¿un favor político?.
    – “Hola político_x, será que usted me puede ayudar”
    – “Claro mi chino, dejeme le busco alguito”
    – “Huy Dr. Muchas gracias”
    Mientras tanto en el DANE…
    – “Chino usted puede hacer esta pendejadita …”
    – “Claro Dr. de una, yo le hago eso”
    – “Listo, a trabajar pelao”
    Mientras tanto en los contratos….el paquete grande para el político x y el “chino” al menos pudo comer por unos meses.

    #EstoEsColombia

  • fredy

    Una de las cosas que más me dejo aterrado es lo de: “La contraseña para la base de datos está disponible en el código en los archivos de configuración” es que me parece increible. En Colombia hay desarrolladores con mucha experiencia, pero el solo hecho de convertir todo contrato en favor político genera este tipo de resultados, proyectos hechos por desarrolladores con poca experiencia al parecer…

    • Estoy de acuerdo, esta fue de las cosas que más me sorprendió. Quién aprobó esto?! Y se digna a decir el Ministerio TIC que el eCenso ha sido verificado con expertos de seguridad internacionales. Por lo menos ya el DANE quitó el eCenso Offline.

    • De acuerdo. Mintic, ha tenido muchos aciertos pero desaciertos igual. De ahi el problema de contratar personas que no quiero llamar “baratas”, sino ahorrativas para los proyectos para que puedan ser mas lucrativos para los empresarios de la tecnología en Colombia. Ojalá esto destapé mucha mas basura que se puede evidenciar en todos los procesos de contratación de tecnología en Colombia. Ya sea en desarrollo como en implementación.

    • Geovanny Morillo

      El problema es que le quieren pagar muy bajo a los desarrolladores por eso contratan empresas con baja certificaciòn o ninguna.

    • Rafael A. Parra

      Comparto la misma opinion. Quede frio cuando vi esa parte de lo que encontró Juliana. Muchas gracias por hacer publico tu hallazgo.

    • Geovanny Morillo

      “La contraseña para la base de datos está disponible en el código en los archivos de configuración”, sin embargo esto es normal en una aplicacion web y si el codigo fuente en este caso php está en el servidor no representaría una falla de seguridad tan grave ya que el propio servidor debería estar protegido y el codigo fuente no deberia ser accesible desde fuera.
      El problema aqui es que al tratar de hacer una aplicacion web LOCAL u OFFLINE se tiene que pasar obligatoriamente el codigo fuente php con el wampp y facilmente se puede acceder a el. Normalmente el propio codigo php no se encripta, no es una falla de seguridad simplemente es inherente a la propia tecnología que se escogió para hacerla.
      Lo mejor hubiera sido crear una aplicación OFFLINE de escritorio con tecnologías .NET por ejemplo así solo se pasaría el ejecutable y no habría este problema.

    • Totalmente de acuerdo. El problema aquí es el modelo seleccionado para poder entregar una solución offline. Muy mal hecho en este caso. Por lo demás como lo veo, es cambiar semillas, cambiar algoritmos en el código utilizado para encriptar y desencriptar y lógico el modelo de sincronización e intercambio de datos offline y online.

    • Por lo general en muchas aplicaciones, diría que cientos, las contraseñas se almacenan en archivos de configuración. Esta en los especialistas de seguridad y desarrolladores, verificar posibles vulnerabilidades en sus líneas de código y generar los controles para que no puedan acceder a dichos archivos. En este caso se debe revisar si la base de datos contenida en dicha aplicación es la misma de el servidor en nube. Y además de esto, si las contraseñas entregadas en el offline son las mismas, que pensaría yo, que no. Aunque lo dudo por el código de encripción.

  • Gonzalo Gomez

    gracias Juliana por la informacion, voy a comentarles a los conocidos para que esperen las correcciones o el censo presencial

    • Sí, lo mejor es hacerlo presencial o hacerlo en línea con una contraseña única y aleatoria. En general, nunca debes compartir contraseñas entre diferentes páginas y servicios. Un programa como LastPass puede ayudar para generar contraseñas largas y aleatorias sin que tengas que memorizarlas.

  • Pingback: Tenga cuidado con la contraseña que usa en el censo del DANE | Publimetro Colombia()

  • Oscar Bustos

    Las mejores prácticas de seguridad se encuentran en el OWASP: https://www.owasp.org/index.php/Password_Storage_Cheat_Sheet.
    Muchas gracias Juliana por este hallazgo. A mi también me pareció super sospechoso el correo. En realidad es una error de diseño grave, y entiendo que ningún sistema es 100% seguro, pero esto parece que no hubiera sido diseñado por un arquitecto de software sino por un desarrollador junior.

  • Racso

    Hola, Juliana. Te felicito por la iniciativa que has tenido respecto a este tema. Una sugerencia: trata de empezar tus artículos con las recomendaciones directamente. Es probable que la mayoría de la gente no comprenda el tema, dado que incluso conozco a muchos ingenieros informáticos que no entienden la diferencia (en cuanto a riesgos) entre almacenar contraseñas encriptadas y almacenar los hash de las contraseñas (obviamente, es impensable que entiendan el concepto de “sal”), pero lo crítico aquí es 1) que la gente sepa qué hacer ante estos fallos para minimizar su posible impacto, y 2) hacerle notar a la comunidad general que, una vez más, las obras del Estado hacen gala de su poca o nula rigurosidad. Los motivos de ello creo que los conocemos todos.

  • Nomad

    Ya bajaron la descarga de la app offline, pero dudo mucho que hagan algo al respecto de la web, en especial por la gente que ya creó las cuentas..

  • Pablo Velasquez

    En este momento por lo menos la contraseña no la están mostrando al registrarse ni al dar olvidar contraseña, piden crear una nueva.

  • Oscar Daza

    eso apenas es la punta del shitberg (creditos a santiago moure). te recomiendo eches una mirada por los demas portales del gobierno, tanto distrital como nacional, es una coleccion interminable de chambonadas. recuerdo que en la pagina de la eaab es posible tomar una sesion abierta de otra persona, porque ellos creen que una ip puede levantar solo una sesion. de modo que si ud entra desde su oficina a pagar el agua, otra persona en su misma oficina podra entrar a su sesion con solo entrar a la pagina del acueducto. sin tener que hacer login. abre de una vez en la sesion suya.

  • Oscar Daza

    https://uploads.disquscdn.com/images/8a3cf4d96a7e6662102263ba5acf8644569941d97e7e25718f5e6be74fc78861.png

    Esta si es una basura de pagina. el tal RIT que nos van a obligar a hacer . opinen uds

  • Oscar Daza

    https://uploads.disquscdn.com/images/06c5853557b03b489fa7dd779c767a7bf70686ac8a2a2ab7edecf056d4d08b41.png

    “puede imprimir el archivo si lo desea”. pero es un archivo vacio, como la cabeza de ciertos funcionarios en la alcaldia.

    • MigOS

      Y como van esas compra por Aliexpress y ebay. xD, Si vas a colocar capturas de pantalla, cierra todo lo que no tenga que ver con el asunto. xD

  • dj_truco

    Hola, veo que el dane bajo el ejecutable http://prntscr.com/i182gy podrias compartir el archivo que estaba en la pagina?
    Muchas gracias!

  • Ana

    Si bien la información que nos cuentas es muy importante, por favor sé más responsable con los comentarios que das en vivo, en la W salieron a decir que las cuentas bancarias de los usuarios estaban en peligro, sabiendo que las características de las claves de eCenso y una cuenta bancaria son totalmente diferentes. Se está generando terrorismo desde diversos medios, para que las personas no hagan el censo. Sí, es verdad que la plataforma tiene muchos errores, pero es una versión de prueba, el primer censo digital inclusivo y en lo posible accesible, más que salir a generar terrorismo, se necesitan desarrolladores como tu o los que comentan para mejorar la plataforma.

    • Geovanny Morillo

      Sin embargo los que desinforman son los de la W no el articulo que ella escribió…

  • Hello. Revisando la poca documentación de este incidente, y viendo el boom de la noticia. Creo que en este caso el error garrafal y del cual se deben tomar medidas inmediatas es de la recomendación de entregar este tipo de método para trabajarlo offline.
    1. Definitivamente una muy mala decisión por parte de los desarrolladores como tal el entregar en un paquete la aplicación o parte de ella, si fue realmente así.
    2. No se si realmente cuando se descarga esta webapp offline, se descarga toda la base de datos, yo pensaría que no. O al menos creo que no. si es así muy mal.
    3. Cuando te refieres a que ese algoritmo es inseguro, debes explicar la parte de el, que en este caso sería el algoritmo de encripción utilizado, no el código completo como tal.
    4. La parte en que se ve el código como tal, no se que tanto tenga de errores, el error es permitir acceder al código fuente, que en estos momentos no sabemos si es el mismo contenido en la webapp online.
    5. De hecho si uno llega a acceder a un archivo que contiene una semilla (salt); como tal, podría simple y llanamente construir tablas rainbow para poder averiguar los HASH+SALT por medio de fuerza bruta.
    6. No se si realmente ellos hayan utilizado o recomendado un algoritmo lento de encripción, lo que le falta a hash+salt para ser mas eficiente.
    7. Lo de desencriptar asi se apliquen algoritmos complejos y de hecho un buen numero de iteraciones del mismo, pues es algo que no se va a poder evitar, sobre todo con técnicas de fuerza bruta.
    8. Es bueno que como ingeniera, te pongas un poco en el papel de las personas que ven este tipo de publicaciones y mas en un programa de radio. Ya que los que conducen el programa no tienen la menor idea, y el público oyente mucho menos. Recuerda las bases de la ingeniería y otras carreras como medicina, no puedes hablarle técnicamente a personas que no estudiaron lo mismo que tu.

    De todas maneras me encanta que esto se haya hecho público y que se haga algo para solucionar este tema, y se genere una brecha muy amplia para que se empiecen a preguntar en manos de quien esta la tecnología en Colombia.

    • Geovanny Morillo

      3) me imagino que se refiere a que falta un salt, sin embargo como expones en el punto 5 inclusive con salt no estan seguro
      5) dependiendo del hardware y el tamaño del salt esto podria tomar años o minutos

  • Edwin Pardo

    Buen análisis Juliana, esto en desarrollo es básico, fuerza!!

  • Otto

    Estuvo muy bien denunciar y destapar esa olla podrida. Por la sobrerreacción se puede deducir que cobraron muchisimo por este esperpento de desarrollo y ahora lo quieren defender a como de lugar. Pase lo que pase sostente
    “Amigo es Platón, pero más amiga la verdad”, Aristoteles

  • Samanta

    Que buen análisis.

  • Oscar Bustos

    Juliana, pudiste leer la carta abierta al Dane que escribió la comunidad de Colombia-dev? https://github.com/colombia-dev/carta