¿Qué preocupaciones de seguridad debo tener al configurar FS_METHOD como "direct" en wp-config?

27 may 2015, 12:36:20
Vistas: 125K
Votos: 60

Recientemente he tenido un problema donde no he podido instalar el plugin WP Smush Pro porque no tengo disponibles las opciones de Instalación Manual o Instalación con Un Clic.

Me encontré con esta publicación que sugería modificar la configuración en wp-config.php. Agregué la configuración sugerida, sin embargo, la que parece ser la más importante es:

define('FS_METHOD', 'direct');

Lo que me gustaría saber es qué preocupaciones reales debería tener al configurar FS_METHOD como direct? ¿Hay otras alternativas para instalar el plugin?

Esto es lo que dice la documentación oficial:

FS_METHOD fuerza el método del sistema de archivos. Solo debe ser "direct", "ssh2", "ftpext", o "ftpsockets". Generalmente, solo deberías cambiarlo si estás experimentando problemas de actualización. Si lo cambias y no ayuda, cámbialo de nuevo o elimínalo. En la mayoría de las circunstancias, configurarlo como 'ftpsockets' funcionará si el método elegido automáticamente no lo hace.

(Preferencia Principal) "direct" fuerza el uso de solicitudes directas de E/S de archivos desde PHP, esto está lleno de problemas de seguridad en hosts mal configurados. Este método se elige automáticamente cuando es apropiado.

0
Todas las respuestas a la pregunta 3
1
47

Esto es solo cómo entendí la idea de la API de Archivos de WordPress. Si está mal, por favor vota negativo :)

Vale. Si subes un archivo, este archivo tiene un propietario. Si subes tu archivo con FTP, inicias sesión y el archivo será propiedad del usuario de FTP. Como tienes las credenciales, puedes modificar estos archivos a través de FTP. El propietario generalmente puede ejecutar, eliminar, modificar, etc. el archivo. Por supuesto, puedes cambiar esto modificando los permisos del archivo.

Si subes un archivo usando PHP, el usuario de Linux que está ejecutando PHP es el dueño del archivo. Este usuario ahora puede editar, eliminar, ejecutar, etc. el archivo. Esto está bien siempre y cuando solo tú seas el usuario que ejecuta PHP en tu sistema.

Supongamos que estás en un hosting compartido "mal" configurado. Mucha gente ejecuta sus sitios PHP en este sistema. Digamos que solo un usuario de Linux ejecuta PHP para todas estas personas. Uno de los webmasters en este hosting compartido tiene malas intenciones. Él ve tu página y descubre la ruta a tu instalación de WordPress. Por ejemplo, WP_DEBUG está configurado como true y hay un mensaje de error como:

[warning] /var/www/vhosts/userxyz/wp-content/plugins/bad-plugin/doesnt-execute-correctly.php on line 1

"¡Ja!" dice el chico malo. Veamos si este tipo ha configurado FS_METHOD como direct y escribe un script como:

<?php
unlink( '/var/www/vhosts/userxyz/wp-content/plugins/bad-plugin/doesnt-execute-correctly.php' );
?>

Dado que solo un usuario está ejecutando PHP y este usuario también es utilizado por el chico malo, puede modificar/eliminar/ejecutar los archivos en tu sistema si los has subido a través de PHP y, por lo tanto, has asignado al usuario de PHP como propietario.

Tu sitio está hackeado.

O, como dice en el Codex:

Muchos sistemas de hosting tienen el servidor web ejecutándose como un usuario diferente al propietario de los archivos de WordPress. Cuando este es el caso, un proceso que escribe archivos desde el usuario del servidor web tendrá los archivos resultantes propiedad de la cuenta de usuario del servidor web en lugar de la cuenta del usuario real. Esto puede llevar a un problema de seguridad en situaciones de hosting compartido, donde múltiples usuarios comparten el mismo servidor web para diferentes sitios.

27 may 2015 15:38:33
Comentarios

Entonces, ¿cómo ayuda FS_METHOD en esto?

Jānis Elmeris Jānis Elmeris
19 jun 2021 14:49:08
2
39

¿Cuál es el riesgo?

En un hosting compartido mal configurado, el PHP de cada cliente se ejecutará como el mismo usuario (digamos apache para este ejemplo). Esta configuración es sorprendentemente común.

Si estás en un host así y usas WordPress para instalar plugins mediante acceso directo a archivos, todos tus archivos de plugins pertenecerán a apache. Un usuario legítimo en el mismo servidor podría atacarte escribiendo un script PHP que inyecte código malicioso en tus archivos de plugins. Subirían su script a su propio sitio web y solicitarían su URL. Tu código se vería comprometido porque su script se ejecuta como apache, el mismo usuario que posee tus archivos de plugins.

¿Qué tiene que ver FS_METHOD 'direct' con esto?

Cuando WordPress necesita instalar archivos (como un plugin) usa la función get_filesystem_method() para determinar cómo acceder al sistema de archivos. Si no defines FS_METHOD, elegirá un método por defecto; de lo contrario usará tu selección siempre que tenga sentido.

El comportamiento predeterminado intentará detectar si estás en un entorno de riesgo como el descrito anteriormente. Si considera que es seguro, usará el método 'direct'. En este caso WordPress creará los archivos directamente mediante PHP, haciendo que pertenezcan al usuario apache (en este ejemplo). De lo contrario, recurrirá a un método más seguro, como pedirte credenciales SFTP y crear los archivos como tú.

FS_METHOD = 'direct' le pide a WordPress que omita esa detección de riesgo y siempre cree archivos usando el método 'direct'.

Entonces, ¿por qué usar FS_METHOD = 'direct'?

Desafortunadamente, la lógica de WordPress para detectar entornos de riesgo es defectuosa y produce tanto falsos positivos como falsos negativos. La prueba implica crear un archivo y verificar que pertenezca al mismo propietario que el directorio donde reside. La suposición es que si los usuarios son los mismos, PHP se ejecuta como tu propia cuenta y es seguro instalar plugins como ese usuario. Si son diferentes, WordPress asume que PHP se ejecuta como una cuenta compartida y no es seguro instalar plugins como esa cuenta. Lamentablemente, ambas suposiciones son conjeturas que frecuentemente serán incorrectas.

Usarías define('FS_METHOD', 'direct' ); en un escenario de falso positivo como este: formas parte de un equipo confiable cuyos miembros suben archivos a través de sus propias cuentas. PHP se ejecuta como un usuario separado. WordPress asumirá que es un entorno de riesgo y no usará el modo 'direct' por defecto. En realidad solo se comparte con usuarios de confianza, por lo que el modo 'direct' es seguro. En este caso deberías usar define('FS_METHOD', 'direct' ); para forzar a WordPress a escribir archivos directamente.

14 jul 2016 23:02:41
Comentarios

¡Gracias @mark, fue muy útil! Tal vez necesites actualizar el enlace de get_filesystem_method() a este: https://developer.wordpress.org/reference/functions/get_filesystem_method/

szegheo szegheo
8 ene 2021 17:42:03

Entonces, ¿la diferencia real entre (los resultados de usar) los FS_METHODs está en quién es el propietario de los archivos de plugins instalados?

Jānis Elmeris Jānis Elmeris
18 jun 2021 17:28:51
0

Existe una situación 'bien configurada' donde el método 'directo' causará problemas.

También es posible configurar un alojamiento WordPress compartido con usuarios de ejecución PHP no compartidos, diferentes a los usuarios propietarios de archivos/directorios. Así terminas con archivos propiedad de usuario1 y el código PHP se ejecuta como php-usuario1.

En esa situación, plugins hackeados o código del núcleo (a) no pueden escribir (o incluso leer, dependiendo de permisos) en directorios de otros usuarios; (b) no pueden escribir los archivos de este usuario y por lo tanto no pueden añadir código troyano al núcleo o plugins.

Así que si el hosting está configurado así, DEBES usar FTP para actualizaciones y el método 'directo' no funcionará.

Si configuras 'direct' en wp-config.php y el usuario de ejecución PHP no tiene permisos de escritura, recibirás mensajes de "Actualización fallida" sin que aparezca un pop-up solicitando credenciales FTP.

24 feb 2017 00:56:11