Contenido

Fallo de seguridad en WordPress (otro más)

5 Jul

+ 11

Via La brujula verde descubro que han detectado otro fallo de seguridad en WordPress, el cual te permite conocer datos «sensibles» de la base de datos del blog.

Realmente debido al fallo solo podemos obtener el prefijo de la tablas que definimos en la instalación lo cual usado con conocimiento y mala fé podemos comprometer la seguridad de algún que otro blog.

http://tublog/paged=X

Si cambiamos X por un caracter no numérico vereis un trozo de código sobre la web mostrando una serie de datos de tu blog.

Para solucionar esto temporalmente, hasta que WordPress se pronuncie, sería controla el parametro paged en el fichero wp-blog-header.php de la siguiente forma.

En las primeras líneas del fichero, despues del <?, insertar lo siguiente:

//Comprobamos que paged sea númerico  
if (isset($_GET['paged']) && !is_int($_GET['paged']))
die("Ha ocurrido un error");

De esta forma estamos terminando la ejecución del script. Si esta noche tengo tiempo, encontraré otra solución más elegante.

Actualización
Gracias a nacho de 16novenos que me ha comentado que sería mejor usar la función is_int() para evitarnos problemas con los números negativos.

  • Que raro, lo pruebo en mi blog que esta hecho con wordpress y no logro ver nada raro…

  • Jé, me muestra error de bd, yupi! ^^

    @Com: lo que pasa es que usas una version vieja de Worpdress (2.0).

  • Que raro pero yo tambien tengo la ultima version y no me muestra nada..

    Tal vez sea porque esta integrado con mi portal (xoops) como un modulo, aunque aun asi es la ultima version.

  • Quizá sería mejor cambiar la función is_numeric() por is_int() y comprobar que el número no es negativo, dado que la paginación viene en números positivos.

    if (!isset($_GET[‘paged’] || !is_int($_GET[‘paged’]) || $_GET[‘paged’]

  • Ya está el listo xDDDD

    Pues tienes razón 😀 No había pensado en negativo… siempre positivo 😀

    ¿que tal todo? ¿el nuevo curro?

  • Porque no simplemente agregarle una @ al principio de la linea que da el error para que, justamente, no muestre el error?

  • K3NNY, si, esa es sin duda una de las mejores soluciones, o en el fichero wp-db.php hacer que el atributo show_errors sea false, pero es una solución temporal hasta que WordPress decida algo sobre el tema y publique un parche en condiciones.

    El problema es que una buena solución puede incluir varios cambios en varios ficheros y para esas cosas mejor que WordPress solucione el problema de la mejor manera.

    un saludo.

  • Con esa solución, las busquedas dejan de funcionar a partir de la página dos. porque paged es siempre un caracter, y por tanto, siempre da fallo al comprobar el is_int( $paged). Yo creo que, haciendolo como lo haces tú, deberíamos probar a hacer un cast antes. Es decir:

    if (isset($_GET['paged'])

  • kour, tienes razón, dejan de funcionar en la página 2 de la búsqueda, pero no es por ese motivo, por que 2 tambien es un entero. Y debería entrar saltarse la condición.

    Creo que en la versión 2.0.4 ya han corregido este problema.

Comentar

#

Me reservo el derecho de eliminar y/o modificar los comentarios que contengan lenguaje inapropiado, spam u otras conductas no apropiadas en una comunidad civilizada. Si tu comentario no aparece, puede ser que akismet lo haya capturado, cada día lo reviso y lo coloco en su lugar. Siento las molestias.