Bonjour,
J'ai eu le même problème sur une de mes instances. Le soucis effectivement étant de trouver dans la base la localisation exacte de ce genre d'injection pour la supprimer.
De ce que j'ai pu voir ce malware s'injecte dans toutes les boîtes textes / HTML. Le code est constitué d'une balise image et d'un attribut onerror qui lance un script qui va ensuite chercher un script distant (je n'ai pas pu le voir en détail mais ça ne semble pas inoffensif).
Bref, une simple recherche sur la balise "script" ou même l'URL du script injecté peut échouer à faire apparaître l'ensemble des champs corrompus (vu qu'ici en fait on doit réellement chercher un balise image ou la chaîne createElement qui crée le script en question).
Moodle devrait pouvoir potentiellement interdire en entrée ce genre d'injection de scripts. Je sais que l'on fait confiance à l'utilisateur "enseignant", mais je ne sais pas si c'est suffisant. En tout cas dans notre cas même avec des antivirus à jour installés, ce problème s'est tout de même produit.
De ce que j'ai pu voir, cela peut simplement se reproduire en insérant le code suivant dans une étiquette d'un cours:
<img src="aAAA" onerror="console.log('Script executé');">
(heureusement la même balise est nettoyée si on l'insère dans un forum)
On pourrait espérer avoir au moins une option pour nettoyer systématiquement le texte à l'entrée dans la boîte de dialogue. Après c'est peut-être une option qui existe déjà et que je n'ai pas vue... mais en tout cas si cela n'existe pas il faudrait y penser.
Ici les paramètres ( forceclean et enabletrusttext ) permettent seulement de nettoyer les balises à l'affichage et éviter qu'elles apparaissent (en effet moodle a une fonction clean_text qui marcherait très bien dans ce cas et qui enlèvera le onerror de la balise img) .
Ici en ce qui me concerne, je vais faire en sorte que le contenu de la base soit nettoyé et inspecté minutieusement afin d'enlever toute occurrence de ce code.
Comme on peut penser que ce genre d'injection peut encore arriver et que la chaîne de caractère à rechercher aura probablement différents motifs (d'ailleurs j'ai vu un autre motif de mon coté que celui relevé par Jean François Petit), je me suis dit qu'on pourrait probablement avoir besoin d'un outil un peu similaire à 'tools/replace' mais avec la possibilité de rechercher les chaînes partout dans la base.
Une première tentative est ici : https://github.com/call-learning/moodle-tool_textcleanup
Attention : a n'utiliser pour l'instant que sur une copie de la base de production et pas directement en production car c'est une première version. Dans tous les cas une sauvegarde de la base avant toute action est la bienvenue.
A ce stade ce plugin permet :
- De remonter l'ensemble des textes de la base dans un endroit (y compris les block html) et de faire quelques recherches et de localiser ces resources.
- De passer la fonction clean_text sur les resources ayant le texte recherché.
Si c'est utile je l'améliorerai (et j'espère secrètement que l'on m'aidera à l'améliorer aussi 😀).