SUPEE-9767, modman et liens symboliques

16

Je voudrais patcher une boutique Magento avec SUPEE-9767. La documentation de SUPEE-9767 me dit de désactiver le paramètre Symlinks avant d'appliquer le correctif:

Avant d'appliquer le correctif ou de mettre à niveau vers la dernière version, assurez-vous de désactiver le paramètre Symlinks ... Le paramètre, s'il est activé, remplacera le paramètre du fichier de configuration et sa modification nécessitera une modification directe de la base de données.

Mais j'utilise modman pour gérer les modules et comme certains modules utilisent des fichiers de modèle, le paramètre Symlinks est activé conformément à la suggestion dans le fichier README de modman. Est-il sûr de laisser le paramètre Symlinks activé comme l'un des messages du correctif de sécurité SUPEE-9767 - Problèmes possibles? suggère (je ne peux pas encore commenter les articles car je suis un nouvel utilisateur)?

Les utilisateurs utilisant modman pour gérer les modules Magento 1.x doivent s'assurer qu'ils ne désactivent pas les liens symboliques car cela désactivera les modules modman.

Si je laisse le paramètre Symlinks activé, la boutique ne serait-elle pas exposée à APPSEC-1281: exécution de code à distance via des liens symboliques , une menace de sécurité que ce correctif est censé corriger?

Existe-t-il d'autres façons d'utiliser modman avec des fichiers modèles après ce patch? (Je connais l'option "version corrigée de Mage / Core / Block / Template.php" que le README de modman mentionne, mais patcher un fichier core semble dangereux.)

ehannes
la source
1
J'utilise Modman et Composer dans mes projets. Je ne peux pas croire que pendant de nombreuses années, l'option Symlinks dans Magento n'était pas considérée comme une bombe. Du coup c'est une bombe! Ce changement sans notifications ni explications créera beaucoup de problèmes à de nombreuses personnes. Triste pour l'avenir de Modman et Composer à Magento.
ADDISON74
1
C'est tout un défi. Si vous êtes prêt à investir, la création d'un processus de génération qui génère un artefact fusionné (sans liens symboliques) est une très bonne façon de procéder.
Joseph à SwiftOtter le
Un excellent article à ce sujet peut être trouvé sur tomlankhorst.nl/… où il explique également comment se débarrasser de l'avertissement "Symlinks are enabled" introduit dans Magento 1.9.3.4.
ehannes

Réponses:

14

Voici quelques clarifications concernant ce changement:

Lisez d'abord cette explication de Peter O'Callaghan, cela vous donnera une grande compréhension: https://peterocallaghan.co.uk/2017/06/appsec-1281-dangerous-symlinks/

Une autre lecture intéressante est également cet article de Max Chadwick https://maxchadwick.xyz/blog/what-allow-symlinks-actually-does

Cette modification concerne vraiment l'appel de contenu téléchargeable (comme des images) via des directives de modèle.

Le problème lié aux liens symboliques n'est exploitable qu'avec un accès administrateur et Magento a également ajouté une protection supplémentaire concernant les téléchargements d'images.

Veuillez noter qu'il s'agit de protections contre les moyens connus de l'exploiter en plus du paramètre lui-même.

Donc, si vous comprenez le risque encouru, vous pouvez laisser les liens symboliques activés.

Si vous devez les activer pour une nouvelle installation, vous pouvez exécuter:

UPDATE core_config_data SET value = 1 WHERE path = "dev/template/allow_symlink";
Raphael chez Digital Pianism
la source
Si je laisse les liens symboliques activés, comment protéger la boutique contre "APPSEC-1281: exécution de code à distance via les liens symboliques"?
ehannes
@ehannes en protégeant l'accès à votre backend pour commencer car l'exploit nécessite un accès backend. En plus de cela, le téléchargement d'image a maintenant une validation de rappel supplémentaire.
Raphael au Digital Pianism le
3
obtenir un accès administrateur signifie que vous avez accès à l'ensemble de l'interface principale de Magento. qui se soucie d'un exploit à ce stade trouvé dans un script d'image de téléchargement? cet utilisateur malveillant peut supprimer tous vos produits, peut faire des choses inimaginables. la discussion devrait commencer par "si cet utilisateur obtient des droits d'administrateur parce que le véritable administrateur n'est pas stupide et ne protège pas le backend de plusieurs façons"
ADDISON74
1
@ehannes s'il vous plaît lire ce peterocallaghan.co.uk/2017/06/appsec-1281-dangerous-symlinks
Raphael au Digital Pianism
2
Peter O'Callaghan écrit: "Par conséquent, si quelqu'un parvient à accéder à votre panneau d'administration, il peut effectuer une inclusion malveillante pour obtenir le RCE.". Cela semble être la conclusion commune de cette discussion. Comme indiqué précédemment, si un utilisateur malveillant a accès à votre panneau d'administration, il y a d'autres choses à craindre que RCE. Si quelqu'un a quelque chose à ajouter à la discussion, n'hésitez pas. Quoi qu'il en soit, je pense que vous avez rendu les choses beaucoup plus claires @RaphaelatDigitalPianism et j'accepterai cette réponse.
ehannes
6

Le problème n'est pas les liens symboliques, le problème est les chemins qui atteignent des niveaux tels que ../../../../../media/tmp/hahaha.png. Si je me trompe, veuillez m'éclairer. Le "correctif" était intitulé "Autoriser les liens symboliques" et l'activer désactive la vérification qui a été implémentée à l'aide realpath(). À mon avis, un correctif tout aussi sûr, plus performant et toujours compatible avec les liens symboliques consiste à utiliser strpos($path, '..')et / ou à vérifier que le realpath()correspond à certains répertoires risqués comme mediaet var. S'il est implémenté de cette façon, il n'a pas besoin d'être configurable, il peut toujours être activé et ne pas casser des milliers de magasins.

Quoi qu'il en soit, l'utilisateur de votre serveur Web ne devrait pas avoir accès aux fichiers d'écriture dans les répertoires de code source (comme Magento Connect le fait ...), c'est donc une autre façon d'empêcher que du code malveillant soit écrit quelque part et exécuté comme modèle de bloc.

Ainsi, cette attaque sur les liens symboliques est simplement mal dirigée et une meilleure solution existe. En fait, j'en ai fourni un il y a plus d'un an et il y a même un lien vers celui-ci dans le modman github README.

ColinM
la source
0

Si, en plus de votre fichier de composition, vous définissez magento-deploystrategy pour copier vos fichiers seront copiés à partir du dossier du fournisseur plutôt que des liens symboliques.

    "extra":{
        "magento-root-dir":"./",
        "magento-deploystrategy":"copy",
        "magento-force": true
    }

Vous pouvez ensuite modifier votre core_config_data pour définir la valeur de dev / template / allow_symlink sur 0

Ressource pour information

WorkstationB
la source