Más Full Path Disclosure en WordPress y sin solución

Hace unos días publiqué un artículo sobre varios plugins que nos permitian ver el directorio completo de la instalación de wordpress (full path disclosure). Luego de esta publicación de una discusión en un hilo de la lista en full disclosure, me llegó un correo donde me comentaban que no sólo eran esos ficheros los que tenian esta vulnerabilidad, sino muchos más dentro de todo el sistema de wordpress.pwnpress
En la lista full disclosure y por otros medios, la gente me decia que eso se desactivaba facilmente deshabilitando la opcion “display errors” de php (ya sea en el php.ini, htaccess o en el mismo fichero php) pero mi opinión fue siempre la misma: Esta forma de ‘solucionarlo’ ocultaría el error pero en ningún caso lo solucionaría, es decir, el problema continuaría estando, pero oculto. Otras personas dieron otro tipo de solución como la de editar los ficheros e incluir una validación de la existencia de algunas constantes o variables que WordPress setea y, de esta forma, saber si el fichero se está ejecutando directamente o mediante wordpress.

Este problema lo reporté a security en wordpress.com el mismo día que hice la publicación pero no obtuve respuesta.

Ahora les mostraré los otros ficheros por los cuales es posible descubrir la ruta completa del sistema y las posibles soluciones que me han palnteado.

Dentro del directorio wp-admin/import tenemos varios ficheros php:

blogger.php
blogware.php
btt.php
dotclear.php
greymatter.php
jkw.php
livejournal.php
mt.php
opml.php
rss.php
stp.php
textpattern.php
utw.php
wordpress.php
wp-cat2tag.php

Todos vulnerables.
Dentro de wp-admin/includes tenemos los siguientes ficheros vulnerables:

admin.php
class-ftp-pure.php
class-ftp-sockets.php
class-wp-filesystem-direct.php
class-wp-filesystem-ftpext.php
class-wp-filesystem-ftpsockets.php
class-wp-filesystem-ssh2.php
comment.php
continents-cities.php
file.php
media.php
misc.php
plugin-install.php
plugin.php
schema.php
template.php
theme-install.php
update.php
upgrade.php
user.php

La solución que plantea esta persona es la siguiente:

  1. if ( defined(‘WP_ADMIN’) or defined(‘WP_USE_THEMES’) ){
  2. ;//coninue
  3. }
  4. else{
  5. die();
  6. }

o bien

  1. if ( defined(‘ABSPATH’)){
  2. die();

Esta persona me comentó que haría una publicación en su sitio web al respecto, pero no la encuentro. Les dejo el enlace a su blog por si las moscas: https://rollanwar.net

3 comentarios

  1. tambien propongo definirlo asi

    if ( !defined(‘WP_ADMIN’) and !defined(‘WP_USE_THEMES’) or defined(‘ABSPATH’) ) die();

    en una sola linea es mas facil de editar cada archivo

  2. Tambien vale esta:
    if (! ( defined(‘WP_ADMIN’) or defined(‘WP_USE_THEMES’) or defined(‘ABSPATH’) ) ){
    die();
    }

  3. I have fun with, result in I discovered exactly what I was taking a
    look for. You have ended my 4 day long hunt! God Bless you
    man. Have a great day. Bye

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Esto sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.