viernes, 11 de noviembre de 2011

Moodle bailando con CRLF y XSS

¡Hola buenos días! subo las escaleras mientras me quito el abrigo, abro la puerta, enciendo la luz de la oscura oficina, seguidamente arranco el hilo musical ¿Qué sería de un día sin música? Me siento, el pc me pide a gritos que presione su Power, carga mi Ubuntu derrochador de simpatía, directo al VMware camino del odiado Windows, doble clic sobre Acunetix y...

No suelo ser muy abusivo de scaners, pero para una buena auditoria no puede faltar lanzarles. Tengo la costumbre de tirarme de los pocos pelos que me quedan frente al gigante Moodle, hoy, no podía ser menos y seguir abriendo fuego ante la versión que utilizo 1.9.11+, estaba dentro de mis planes para conquistar el mundo.




Realmente la Heurística de Acunetix asusta más de lo que aparenta, ambos Blind SQL injection, no son más que falsos positivos. El número de Cross Site Scripting sin embargo, llama demasiado la atención, y no podía explicarme, como una plataforma tan sumamente depurada, podría llegar a tener fallos tan gordos. No sé si les sonará el Control WebBroser, que de seguro a más de un desarrollador le tiene quemado de incorporarla en sus proyectos. Pues bien, esta librería es muy común a la hora de embeber una ventana de navegación sobre el software, entre otras suits como Havij e inclusive Acunetix la incorporan. Siendo esta, el motor de internet explorer comunmente la versión 6. Por aquello de las compatibilidades(?).

¿Es internet explorer 6 un navegador poco utilizado?

Nada mejor que visitar el siguiente enlace, una visión realmente poco detallada, contando que un continente entero como es África, no ha sido ni tan siquiera contabilizado.

Ante tan semejante cantidad de enlaces vulnerables, no podía quedarse atrás el probarlo en algún hostin externo... ¿les suena la UNED?




Rutas vulnerables:

/Moodle/admin/auth_config.php
/Moodle/admin/block.php
/Moodle/admin/blocks.php
/Moodle/admin/environment.php
/Moodle/admin/index.php
/Moodle/admin/lang.php
/Moodle/admin/langimport.php
/Moodle/admin/maintenance.php
/Moodle/admin/mnet/access_control.php
/Moodle/admin/mnet/enr_hosts.php
/Moodle/admin/mnet/index.php
/Moodle/admin/mnet/peers.php
/Moodle/admin/mnet/trustedhosts.php
/Moodle/admin/module.php
/Moodle/admin/modules.php
/Moodle/admin/register.php
/Moodle/admin/report/backups/index.php
/Moodle/admin/report/courseoverview/index.php
/Moodle/admin/report/question/index.php
/Moodle/admin/report/security/index.php
/Moodle/admin/report/spamcleaner
/Moodle/admin/report/spamcleaner/index.php
/Moodle/admin/report/unittest/index.php
/Moodle/admin/roles/assign.php
/Moodle/admin/roles/manage.php
/Moodle/admin/roles/override.php
/Moodle/admin/search.php
/Moodle/admin/settings.php
/Moodle/admin/stickyblocks.php
/Moodle/admin/timezoneimport.php
/Moodle/admin/uploadpicture.php
/Moodle/admin/uploaduser.php
/Moodle/admin/user.php
/Moodle/admin/user/user_bulk.php
/Moodle/backup/backup.php
/Moodle/blocks/admin_bookmarks/create.php
/Moodle/blog/edit.php
/Moodle/blog/index.php
/Moodle/blog/preferences.php
/Moodle/calendar/event.php
/Moodle/calendar/export.php
/Moodle/calendar/export_execute.php
/Moodle/calendar/preferences.php
/Moodle/calendar/set.php
/Moodle/calendar/view.php
/Moodle/course/category.php
/Moodle/course/edit.php
/Moodle/course/index.php
/Moodle/course/info.php
/Moodle/course/jumpto.php
/Moodle/course/report/log/index.php
/Moodle/course/report/log/indexlive.php
/Moodle/course/report/stats/index.php
/Moodle/course/search.php
/Moodle/course/user.php
/Moodle/course/view.php
/Moodle/files/index.php
/Moodle/grade/edit/letter/edit.php
/Moodle/grade/edit/letter/index.php
/Moodle/grade/edit/scale/edit.php
/Moodle/grade/edit/scale/index.php
/Moodle/grade/index.php
/Moodle/grade/report/index.php
/Moodle/help.php
/Moodle/index.php
/Moodle/login/change_password.php
/Moodle/login/environment.php
/Moodle/login/forgot_password.php
/Moodle/login/index.php
/Moodle/login/logout.php
/Moodle/message/discussion.php
/Moodle/message/index.php
/Moodle/mod/forum/user.php
/Moodle/mod/forum/view.php
/Moodle/notes/edit.php
/Moodle/notes/index.php
/Moodle/question/edit.php
/Moodle/tag/manage.php
/Moodle/tag/search.php
/Moodle/theme/index.php
/Moodle/theme/preview.php
/Moodle/user/action_redir.php
/Moodle/user/edit.php
/Moodle/user/editadvanced.php
/Moodle/user/index.php
/Moodle/user/profile/index.php
/Moodle/user/view.php

/Moodle/admin/auth_config.php
/Moodle/admin/block.php
/Moodle/admin/blocks.php
/Moodle/admin/environment.php
/Moodle/admin/index.php
/Moodle/admin/lang.php
/Moodle/admin/langimport.php
/Moodle/admin/maintenance.php
/Moodle/admin/mnet/access_control.php
/Moodle/admin/mnet/enr_hosts.php
/Moodle/admin/mnet/index.php
/Moodle/admin/mnet/peers.php
/Moodle/admin/mnet/trustedhosts.php
/Moodle/admin/module.php
/Moodle/admin/modules.php
/Moodle/admin/register.php
/Moodle/admin/report/backups/index.php
/Moodle/admin/report/courseoverview/index.php
/Moodle/admin/report/question/index.php
/Moodle/admin/report/security/index.php
/Moodle/admin/report/spamcleaner
/Moodle/admin/report/spamcleaner/index.php
/Moodle/admin/report/unittest/index.php
/Moodle/admin/roles/assign.php
/Moodle/admin/roles/manage.php
/Moodle/admin/roles/override.php
/Moodle/admin/search.php
/Moodle/admin/settings.php
/Moodle/admin/stickyblocks.php
/Moodle/admin/timezoneimport.php
/Moodle/admin/uploadpicture.php
/Moodle/admin/uploaduser.php
/Moodle/admin/user.php
/Moodle/admin/user/user_bulk.php
/Moodle/backup/backup.php
/Moodle/blocks/admin_bookmarks/create.php
/Moodle/blog/edit.php
/Moodle/blog/index.php
/Moodle/blog/preferences.php
/Moodle/calendar/event.php
/Moodle/calendar/export.php
/Moodle/calendar/export_execute.php
/Moodle/calendar/preferences.php
/Moodle/calendar/set.php
/Moodle/calendar/view.php
/Moodle/course/category.php
/Moodle/course/edit.php
/Moodle/course/index.php
/Moodle/course/info.php
/Moodle/course/jumpto.php
/Moodle/course/report/log/index.php
/Moodle/course/report/log/indexlive.php
/Moodle/course/report/stats/index.php
/Moodle/course/search.php
/Moodle/course/user.php
/Moodle/course/view.php
/Moodle/files/index.php
/Moodle/grade/edit/letter/edit.php
/Moodle/grade/edit/letter/index.php
/Moodle/grade/edit/scale/edit.php
/Moodle/grade/edit/scale/index.php
/Moodle/grade/index.php
/Moodle/grade/report/index.php
/Moodle/help.php
/Moodle/index.php
/Moodle/login/change_password.php
/Moodle/login/environment.php
/Moodle/login/forgot_password.php
/Moodle/login/index.php
/Moodle/login/logout.php
/Moodle/message/discussion.php
/Moodle/message/index.php
/Moodle/mod/forum/user.php
/Moodle/mod/forum/view.php
/Moodle/notes/edit.php
/Moodle/notes/index.php
/Moodle/question/edit.php
/Moodle/tag/manage.php
/Moodle/tag/search.php
/Moodle/theme/index.php
/Moodle/theme/preview.php
/Moodle/user/action_redir.php
/Moodle/user/edit.php
/Moodle/user/editadvanced.php
/Moodle/user/index.php
/Moodle/user/profile/index.php
/Moodle/user/view.php

Llegó la hora de CRLF, no suele verse mucha documentación sobre la vulberabilidad, aunque no está de más explicarla un poco para aquellos que no la vieron anteriormente.

Variables vulnerables en Moodle.



Como el nombre indica CR/LF, no es más que un retorno de carro junto un salto de linea, que inyectados sobre algún parámetro vulnerable, son capaces de modificar el html o el header de la página, a este segundo se le denomina como HTTP response splitting, con el consiguiente impacto de vulnerabilidades como pueden llegar a ser ataques de cross site scripting, cross user defacement o web cache poysoning. Para que la inyección sea válida, los caracteres de retorno y salto deben de ir cifrados con URLEncode, herramienta que también forma parte del propio Acunetix.

CR = %0d = \r
LF = %0a = \n



Si hacemos una petición Get al parámetro vulnerable, la respuesta del servidor será la siguiente.


Habremos conseguido inyectar en los campos del Header, un nombre separados por un “%3a”, o lo que es igual a “:”, el cual es interpretado y agregado a la tabla.

Moodle debería de venir de serie en Backtrack, no tenemos nada mejor para probar nuestras herramientas...

Saludos 4n4les! ;)

5 comentarios:

  1. Gracias al equipo de Moodle, ya corrigieron los fallos y en este si me pusieron si jeje

    http://www.securityfocus.com/bid/50923

    MDL-29925
    http://moodle.org/mod/forum/discuss.php?d=191754

    ResponderEliminar
  2. Me quito el sombrero colega :), necesitamos más gente como tú en la seguridad informática :)

    ResponderEliminar
    Respuestas
    1. Muchas gracias! me alegro de que te guste el artículo :)

      Eliminar
  3. buenas noches, puedes enseñarme a ver mi usuario y password en moodle?, lo cambie y en la uni me cobran $100 pesos para restablecer la contraseña...

    ResponderEliminar