Quels problèmes de sécurité dois-je avoir lors de la définition de FS_METHOD sur "direct" dans wp-config?
3 réponses
- votes
-
- 2015-05-27
Voici commentj'ai compris l'idée de l ' API defichiers WordPress . Si cen'estpas le cas,veuillez voter contre :)
D'accord. Si voustéléchargez unfichier,cefichier a unpropriétaire. Si voustéléchargez votrefichier avec FTP,vous vous connectezet lefichier appartiendra à l'utilisateur FTP. Puisque vous avez lesinformations d'identification,vouspouvezmodifier cesfichiers via FTP. Lepropriétairepeutgénéralementexécuter,supprimer,modifier,etc. lefichier. Bien sûr,vouspouvez changer celaen modifiant les autorisations defichier .
Si voustéléchargez unfichieren utilisant PHP,l'utilisateur Linux,quiexécute PHPestpropriétaire dufichier. Cet utilisateurpeutmaintenant éditer,supprimer,exécuter,etc. lefichier. Cen'estpasgravetant que vous seul êtes l'utilisateur,quiexécute PHP sur votre système.
Supposons que vous soyez sur un hôtepartagé "mal" configuré. Beaucoup degens utilisent leurs sites Web PHP sur ce système. Disons qu'un seul utilisateur Linuxexécute PHPpourtoutes cespersonnes. L'un des webmasters de cet hôtepartagé a demauvaisesintentions. Il voit votrepageet iltrouve le chemin de votreinstallation WordPress. Parexemple,WP_DEBUGest défini surtrueet il y a unmessage d'erreur comme
[warning] /var/www/vhosts/userxyz/wp-content/plugins/bad-plugin/doesnt-execute-correctly.php on line 1
"Ha!" dit lemauvaisgarçon. Voyons,si cegars a défini
FS_METHOD
surdirect
et il écrit un script comme<?php unlink( '/var/www/vhosts/userxyz/wp-content/plugins/bad-plugin/doesnt-execute-correctly.php' ); ?>
Comme un seul utilisateurexécute PHPet que cet utilisateurest également utilisépar lebadboy,ilpeutmodifier/supprimer/exécuter lesfichiers sur votre système si vous les aveztéléchargés via PHPet par cela,l'utilisateur PHPen tant quepropriétaire.
Votre site a étépiraté.
Ou,commeilest dit dans le Codex:
Denombreux systèmes d'hébergement utilisent le serveur Weben tant qu'utilisateur différent que lepropriétaire desfichiers WordPress. Lorsque c'est le cas,un processus d'écriture defichiers àpartir de l'utilisateur du serveur Web aura le résultat fichiers appartenant au compte utilisateur du serveur Web au lieu du compte de l'utilisateur. Celapeut conduire à unproblème de sécurité dans l'hébergementmutualisé situations,oùplusieurs utilisateurspartagent lemême serveur Webpour différents sites.
This is just, how I understood the idea of the WordPress File API. If it is wrong, please downvote :)
Okay. If you upload a file, this file has an owner. If you upload your file with FTP, you login and the file will be owned by the FTP user. Since you have the credentials, you can alter these files through FTP. The owner can usually execute, delete, alter etc. the file. Of course, you can change this by changing the file permissions.
If you upload a file using PHP, the linux user, which is executing PHP is owning the file. This user can now edit, delete, execute etc. the file. This is okay as long as only you are the user, who is executing PHP on your system.
Lets assume, you are on a "poorly" configured shared host. A lot of people run their PHP websites on this system. Lets say only one linux user is executing PHP for all these people. One of the webmasters on this shared host has bad intentions. He sees your page and he figures out the path to your WordPress installation. For example, WP_DEBUG is set to true and there is an error message like
[warning] /var/www/vhosts/userxyz/wp-content/plugins/bad-plugin/doesnt-execute-correctly.php on line 1
"Ha!" the bad boy says. Lets see, if this guy has set
FS_METHOD
todirect
and he writes a script like<?php unlink( '/var/www/vhosts/userxyz/wp-content/plugins/bad-plugin/doesnt-execute-correctly.php' ); ?>
Since only one user is running PHP and this user is also used by the bad boy he can alter/delete/execute the files on your system if you have uploaded them via PHP and by this attached the PHP user as the owner.
Your site is hacked.
Or, as it says in the Codex:
Many hosting systems have the webserver running as a different user than the owner of the WordPress files. When this is the case, a process writing files from the webserver user will have the resulting files owned by the webserver's user account instead of the actual user's account. This can lead to a security problem in shared hosting situations, where multiple users are sharing the same webserver for different sites.
-
- 2016-07-14
Quelest le risque?
Sur un hôtepartagémal configuré,le PHP de chaque client s'exécutera comme lemême utilisateur (disons
apache
pour la discussion). Cette configurationest étonnamment courante.Si vous êtes sur untel hôteet que vous utilisez WordPresspourinstaller lepluginen utilisant l'accès direct auxfichiers,tous vosfichiers deplugin appartiendront à
apache
. Un utilisateur légitime sur lemême serveurpourrait vous attaqueren écrivant un script PHP quiinjecte du codemalveillant dans vosfichiers deplugin. Ilstéléchargent leur script sur leurpropre site Webet demandent son URL. Votre code a été compromis avec succès car leur script s'exécuteen tant queapache
,lemême quipossède vosfichiers deplug-in.Qu'est-ce que
FS_METHOD 'direct'
a à voir avec cela?Lorsque WordPress abesoin d'installer desfichiers (comme unplugin),il utilise get_filesystem_method () pour déterminer comment accéder au système defichiers. Si vousne définissezpas
FS_METHOD
,il choisira une valeurpar défautpour vous,sinonil utilisera votre sélectiontant que cela a du sens.Le comportementpar défaut essayera de détecter si vous êtes dans unenvironnement à risque comme celui quej'ai décrit ci-dessus,et s'ilpense que vous êtesen sécurité,il utilisera le
'direct'
. Dans ce cas,WordPress créera lesfichiers directement via PHP,lesfaisant appartenir à l'utilisateurapache
(dans cetexemple). Sinon,il reviendra à uneméthodeplus sûre,comme vous demander lesinformations d'identification SFTPet créer lesfichiers comme vous.FS_METHOD = 'direct'
demande à WordPress de contourner cette détection à risqueet de toujours créer desfichiersen utilisant laméthode'direct'
./p>
Alorspourquoi utiliser
FS_METHOD = 'direct'
?Malheureusement,la logique de WordPresspour détecter unenvironnement à risqueestimparfaiteet produit à lafois desfauxpositifset desfauxnégatifs. Oups. Letest consiste à créer unfichieret à s'assurer qu'il appartient aumêmepropriétaire que le répertoire dans lequelil réside. L'hypothèseest que si les utilisateurs sont lesmêmes,PHPfonctionne sous votrepropre compteet vouspouvezinstaller despluginsen toute sécurité avec ce compte. S'ils sont différents,WordPress suppose que PHPfonctionneen tant que comptepartagéet qu'iln'estpas sûr d'installer desplugins sous ce compte. Malheureusement,ces deux hypothèses sont des suppositions éclairées qui seront souventfausses.
Vous utiliseriez
define('FS_METHOD', 'direct' );
dans un scénariofauxpositif comme celui-ci: vousfaitespartie d'une équipe de confiance dont lesmembrestéléchargenttous desfichiers via leurpropre compte . PHPfonctionne comme sonpropre utilisateur distinct. WordPress supposera qu'il s'agit d'unenvironnement à risqueet nepasserapaspar défauten mode'direct'
. En réalité,iln'estpartagé qu'avec des utilisateursen qui vous avez confianceet entant quetel,lemode'direct'
est sûr. Dans ce cas,vous devez utiliserdefine('FS_METHOD', 'direct' );
pourforcer WordPress à écrire desfichiers directement.What's the risk?
On a poorly configured shared host, every customer's PHP will execute as the same user (let's say
apache
for discussion). This setup is surprisingly common.If you're on such a host and use WordPress to install the plugin using direct file access, all of your plugin files will belong to
apache
. A legitimate user on the same server would be able to attack you by writing a PHP script that injects evil code into your plugin files. They upload their script to their own website and request its URL. Your code is successfully compromised because their script runs asapache
, the same one that owns your plugin files.What does
FS_METHOD 'direct'
have to do with it?When WordPress needs to install files (such as a plugin) it uses the get_filesystem_method() function to determine how to access the filesystem. If you don't define
FS_METHOD
it will choose a default for you, otherwise it will use your selection as long as it makes sense.The default behavior will try to detect whether you're in an at-risk environment like the one I described above, and if it thinks you're safe it will use the
'direct'
method. In this case WordPress will create the files directly through PHP, causing them to belong to theapache
user (in this example). Otherwise it'll fall back to a safer method, such as prompting you for SFTP credentials and creating the files as you.FS_METHOD = 'direct'
asks WordPress to bypass that at-risk detection and always create files using the'direct'
method.Then why use
FS_METHOD = 'direct'
?Unfortunately, WordPress' logic for detecting an at-risk environment is flawed and produces both false-positives and false-negatives. Whoops. The test involves creating a file and making sure it belongs to the same owner as the directory it lives in. The assumption is that if the users are the same, PHP is running as your own account and it's safe to install plugins as that account. If they're different, WordPress assumes that PHP is running as a shared account and it's not safe to install plugins as that account. Unfortunately both of these assumptions are educated guesses that will frequently be wrong.
You would use
define('FS_METHOD', 'direct' );
in a false positive scenario such as this one: you are part of a trusted team whose members all upload files through their own account. PHP runs as its own separate user. WordPress will assume that this is an at-risk environment and will not default to'direct'
mode. In reality it's only shared with users you trust and as such'direct'
mode is safe. In this case you should usedefine('FS_METHOD', 'direct' );
to force WordPress to write files directly. -
- 2017-02-23
Ilexiste une situation "bien configurée" où "direct"entraînera desproblèmes.
Ilest égalementpossible de configurer l'hébergement WPpartagé avec des utilisateurs d'exécution PHPnonpartagés,différents des utilisateurspropriétaires defichiers/répertoires. Vous vous retrouvez donc avec lesfichiers appartenant à user1et le code PHPestexécutéen tant quephp-user1.
Dans cette situation,lespluginspiratés ou le codeprincipal (a)ne peuventpas écrire (oumême lire àpartir,selon les autorisations) des répertoires des autres utilisateurs;(b)ne peutpas écrire lesfichiers de cet utilisateuret nepeut doncpas ajouter de code cheval de Troie au code dunoyau ou duplugin.
Donc,si l'hébergementest configuré comme ça,vous DEVEZ utiliser FTPpour lesmises àjouret «direct»ne fonctionnerapas.
Si vous définissez 'direct' dans wp-config.phpet que l'utilisateur d'exécution PHPn'apas l'autorisation d'écriture,vous obtiendrez desmessages d'échec de lamise àjouret aucunefenêtre contextuellene demandant lesinformations d'identification FTP.
There is a 'well-configured' situation where 'direct' will lead to problems.
It is also possible to configure shared WP hosting with non-shared PHP execution users, different from the file/directory ownership users. So you end up with the files owned by user1 and the PHP code is executed as php-user1.
In that situation, hacked plugins or core code (a) can't write to (or even read from, depending on permissions) other users' directoriess; (b) can't write this user's files and so can't add trojan code to the core or plugin code.
So if the hosting is set up like that, you MUST use FTP for updates and 'direct' will not work.
If you set 'direct' in wp-config.php and the PHP execution user does not have write permission, you'll get Update Failed messages and have no pop-up asking for FTP credentials.
J'ai récemmenteu unproblème oùje n'aipaspuinstaller leplugin WP Smush Pro carje n'aipas les options d'installationmanuelle ou d'installationen un clic disponibles.
Je suistombé sur cemessage qui a suggéré demodifier lesparamètres dans
wp-config.php
. J'ai ajouté lesparamètres suggérés,mais celui qui semble être leplusimportantest:define('FS_METHOD', 'direct');
Ce queje voudrais savoir,c’est quelles sont les véritablespréoccupations queje devrais avoiren définissant
FS_METHOD
surdirect
? Existe-t-il d'autres alternatives à l'installation duplugin?Voici ce que dit la documentation officielle: