Si, cabe mencionar que WHK me aviso en cuanto se dio cuenta.
La vulnerabilidad en si no era explotable a menos que tuvieras un rango considerablemente alto (en la configuracion de este foro, en muchos otros probablemente no).. pero bueno, se tomaron medidas de todas formas.
SMF ya esta tomando medidas, no tengo idea de porque no han publicado el parche.
El parche temporal que recomendaria..
Para los LFI, pues.. simplemente no permitan subir archivos a sus usuarios, esto es muy importante, si permiten a cualquier persona subir archivos a su foro estan poniendose en peligro por muchas mas cosas que un LFI.. la regla debe ser jamas permitir subir archivos a sus usuarios.
El codigo se puede arreglar agregando un token contra CSRF al procesar la peticion, de hecho la vulnerabilidad consiste en eso.. es un ataque de CSRF.. hay de estos muchos en muchos lugares solo es cuestion de buscarlos
El segundo que no requiere intervencion del administrador (es otro bug).. aplica la misma contramedida, no dejen subir a sus usuarios archivos!! aun podrian atacarlos con los logs de apache, pero bueno.
http://milw0rm.com/exploits/7011Abstract: smf permite que modifiques cualquier variable de un tema, (para que pongas colores, o yo que se), y despues asigna a $settings el valor de las configuraciones del tema, por lo que puedes modificar cualquier configuracion de SMF (como el path de un theme).
Asi:
la opcion jsoption manda llamar a la funcion SetJavaScript en Sources/Themes.php
Linea 249 de index.php
'jsoption' => array('Themes.php', 'SetJavaScript')
Linea 1185 de Sources/Themes.php
function SetJavaScript()
Despues, esta funcion asigna en la tabla themes la variable que le mandaste.
Linea 1205 de Sources/Themes.php
db_query("
REPLACE INTO {$db_prefix}themes
(ID_THEME, ID_MEMBER, variable, value)
VALUES ($settings[theme_id], $ID_MEMBER, SUBSTRING('$_GET[var]', 1, 255), SUBSTRING('" . (is_array($_GET['val']) ?
implode(',', $_GET['val']) : $_GET['val']) . "', 1, 65534))", __FILE__, __LINE__);
Despues, lee esa misma informacion de esa misma tabla.
Linea 853 de Sources/Themes.php
$request = db_query("
SELECT ID_THEME, variable, value
FROM {$db_prefix}themes
WHERE variable IN ('name', 'theme_url', 'theme_dir', 'images_url')" . (empty($modSettings['theme_default']) && !allowedTo
('admin_forum') ?
" AND ID_THEME IN ('$knownThemes')
AND ID_THEME != 1" : '') . "
AND ID_THEME != 0
LIMIT " . count(explode(',', $modSettings['knownThemes'])) * 8, __FILE__, __LINE__);
Linea 861 de Sources/Themes.php
Y la guarda en $context['available_themes'][ID DEL TEMA]
Linea 869 de Sources/Themes.php
$context['available_themes'][$row['ID_THEME']][$row['variable']] = $row['value'];
Despues saca la informacion de cada tema:
Linea 904 de Sources/Themes.php
foreach ($context['available_themes'] as $ID_THEME => $theme_data)
Y asigna a settings el valor de las variables que acabamos de sacar de la base de datos.
Linea 910 de Sources/Themes.php
$settings = $theme_data;
Y al final, incluye un archivo usando un valor en $theme_dir
Linea 914 de Sources/Themes.php
include($settings['theme_dir'] . '/languages/Settings.' . $user_info['language'] . '.php')
Terrible no?
Para arreglar eso, simplemente asignen a settings theme_dir, default_theme_dir y base_theme_dir el valor correcto de forma estatica..
Puede ser que haya mas vulnerabilidades, pero para eso hay que esperar al parche.
El foro no seria explotable a este ataque, pero... si lo logran hacer de alguna forma porfavor avisenos.
Saludos!!