=======================
Greymatter: Algunos fallos de seguridad
=======================
FraMe (frame at kernelpanik.org)
http://www.kernelpanik.org
=======================
Greymatter 1.3 es un CMS escrito en PERL que usa ficheros de texto como sistema
de backend. Actualmente es usado en muchas áreas: weblogs, sitios de noticias
y grupos de trabajo, por citar algunos.
Mientras probaba las caracteristicas de esta nueva versión, dado que esto no
puede ser considerado una auditoría de código, he encontrado algunos fallos
de seguridad no reportados hasta ahora.
A continuación se expondrán, de menor a mayor índice de riesgo, los citados
fallos y se darán algunas soluciones.
* ====================
* Primero: gm-token.cgi
* Tipo: Condición de carrera
* Riesgo: Bajo
* ====================
Cuando GreyMatter reconstruye la sección "main entry pages", por ejemplo: un
template ha cambiado o un usuario ha presionado el botón rebuild, un fichero
temporal es creado. El fichero es eliminado una vez que el proceso ha concluido.
El fichero es creado con el nombre "gm-token.cgi", y con un formato como:
$ cat gm-token.cgi
gmXXXXXXXXXX ( donde X son números )
nombre_de_usuario
password_en_texto_plano
El fichero es creado en el directorio "archives/", con permisos 0666 . Si el
directorio "archives/" not está dentro de "/cgi-bin", o en un directorio con permisos,
cgi (ScriptAlias/+ExecCGI) cualquiera puede recuperar este fichero con un GET sobre
"archives/gm-token.cgi".
Obviamente, obtener este fichero requiere usar un demonio chequeando constantemente.
(Si obtienes el fichero en el primer GET, prueba jugar a la lotería) Este chequeo
puede ser detectado de forma sencilla en los logs del servidor. No obstante, es un
ataque factible. Y bien puede ser combinado con los que se exponen abajo.
¿Cómo solucionarlo?. Usando tmpnam(); una función de PERL para generar un nombre
aleatorio.
* ====================
* Segundo: gm-cplog.cgi
* Tipo: XSS
* Riesgo: Medio
* ====================
gm-cplog.cgi es el nombre del fichero que guarda los logs de GreyMatter.
Los intentos de login tambien son almacenados. Sin embargo las variables
suministradas en el proceso de login no son adecuadamente saneadas, así
que un ataque XSS puede ser inyectado.
¿Como explotarlo?. Vamos a cgi-bin/gm.cgi y ponemos algo como:
Author:
Passwd:
Después, esperamos. Alguien presionará sobre "View Control Panel Log".
Este exploit es sencillo de modificar para obtener los datos de forma
remota.
¿Cómo solucionarlo?. Filtrando todas las entradas que se guardan en gm-cplog.cgi
* ====================
* Tercero: gm-comments.cgi
* Tipo: XSS
* Riesgo: Medio/Alto
* ====================
En la versión 1.3 "gm-comments.cgi" tiene algunas mejoras en la seguridad. Por
ejemplo las inyecciones de código php son detectadas y se incluyen algunos
métodos para evitar los XSS. No obstante, sigue siendo posible sobrepasar
las protecciones contra los XSS.
Por defecto, GreyMatter guarda una cookie con el usuario y la contraseña
que es usada en "cgi-bin/gm.cgi", robar esta cookie hace trivial el acceso
a greymatter.
¿Cómo explotarlo?. Insertando un comentario como el siguiente:
Name: Your Name
Email:
Homepage:
Content: