[Résolu] Page blanche après site(s) en 4.4.20 hacké ce matin

Bonjour à tous,

J’utilise Spip en simple utilisatrice depuis très longtemps et je n’ai jamais eu à venir ici. J’ai migré une dizaine de sites en version 4.4.19 vers la 4.4.20 la semaine dernière sans problème. Ce matin, je m’aperçois que mon serveur (Linux Debian) est surchargé (charge de 200).

En vérifiant les accès, les piratages sont automatiques puisque 9 des 10 sites hébergés ont été attaqués en moins de 2 minutes ce matin à 10:22. Je ne sais pas pourquoi le 10e est passé entre les mailles du filet (le seul en http et non https, c’est peut-être une piste).

Je fais le ménage dans les processus, les crons (il y avait un truc appelé dans le cron de www-data), je passe un coup de spip_cleaner et je termine en passant le chiffon et l’aspirateur un peu partout.

Les bases de données sont bonnes (vérifiées avec l’archivage de jeudi dernier). Tous les scripts litigieux ont été retirés (y compris les trucs dont le nom commence par ., … ou …). Les caches ont été vidés. J’ai réinstallé SPIP 4.4.21 depuis le serveur à partir de l’archive zip (et non de spip_loader.php, le site étant dysfonctionnel). Et là, c’est la catastrophe. Tous les sites sont en erreur 401 :

Exemple d’un site hébergeant des données pour des enseignants d’histoire :

Warning: Undefined global variable $profondeur_url in /export/home/bertrand/web/histoire/ecrire/inc/urls.php on line 68

Fatal error: Uncaught Exception: Missing a url function for type propres : urls_propres_decoder_url() in /export/home/bertrand/web/histoire/ecrire/inc/utils.php:1942 Stack trace: #0 /export/home/bertrand/web/histoire/ecrire/inc/urls.php(173): charger_fonction_url() #1 /export/home/bertrand/web/histoire/ecrire/urls/page.php(92): urls_transition_retrouver_anciennes_url_propres() #2 /export/home/bertrand/web/histoire/ecrire/inc/urls.php(113): urls_page_decoder_url_dist() #3 /export/home/bertrand/web/histoire/ecrire/inc/filtres.php(2692): urls_decoder_url() #4 /export/home/bertrand/web/histoire/ecrire/inc/filtres.php(4701): form_hidden() #5 /export/home/bertrand/web/histoire/ecrire/src/Afficher/Minipage/Admin.php(127): bouton_action() #6 /export/home/bertrand/web/histoire/ecrire/inc/flock.php(403): Spip\Afficher\Minipage\Admin->page() #7 /export/home/bertrand/web/histoire/ecrire/inc/flock.php(669): raler_fichier() #8 /export/home/bertrand/web/histoire/ecrire/xml/analyser_dtd.php(105): sous_repertoire() #9 /export/home/bertrand/web/histoire/ecrire/xml/analyser_dtd.php(48): analyser_dtd() #10 /export/home/bertrand/web/histoire/ecrire/xml/sax.php(196): charger_dtd() #11 /export/home/bertrand/web/histoire/ecrire/xml/valider.php(353): xml_sax_dist() #12 /export/home/bertrand/web/histoire/ecrire/plugins/infos_paquet.php(34): xml_valider_dist() #13 /export/home/bertrand/web/histoire/ecrire/plugins/get_infos.php(121): plugins_infos_paquet() #14 /export/home/bertrand/web/histoire/ecrire/plugins/get_infos.php(67): plugins_get_infos_un() #15 /export/home/bertrand/web/histoire/ecrire/inc/plugin.php(66): plugins_get_infos_dist() #16 /export/home/bertrand/web/histoire/ecrire/inc/plugin.php(252): liste_plugin_files() #17 /export/home/bertrand/web/histoire/ecrire/inc/plugin.php(854): liste_plugin_valides() #18 /export/home/bertrand/web/histoire/ecrire/inc/plugin.php(782): ecrire_plugin_actifs() #19 /export/home/bertrand/web/histoire/ecrire/inc/utils.php(314): actualise_plugins_actifs() #20 /export/home/bertrand/web/histoire/ecrire/inc/autoriser.php(112): pipeline() #21 /export/home/bertrand/web/histoire/ecrire/inc/flock.php(298): autoriser() #22 /export/home/bertrand/web/histoire/ecrire/inc/flock.php(330): ecrire_fichier() #23 /export/home/bertrand/web/histoire/ecrire/inc/meta.php(141): ecrire_fichier_securise() #24 /export/home/bertrand/web/histoire/ecrire/inc/meta.php(223): touch_meta() #25 /export/home/bertrand/web/histoire/ecrire/inc/acces.php(139): ecrire_meta() #26 /export/home/bertrand/web/histoire/ecrire/inc/meta.php(64): renouvelle_alea() #27 /export/home/bertrand/web/histoire/ecrire/inc/utils.php(2873): inc_meta_dist() #28 /export/home/bertrand/web/histoire/ecrire/inc_version.php(508): spip_initialisation_core() #29 /export/home/bertrand/web/histoire/ecrire/index.php(23): include('...') #30 {main} thrown in /export/home/bertrand/web/histoire/ecrire/inc/utils.php on line 1942

Cette fonction est pourtant dans un fichier propre.php ou propre2.php qui est bien dans plugins-dist. Je ne comprends pas pourquoi cette fonction existant sous la forme urls_propres_decoder_url_dist() n’est pas trouvée.

Toute aide sera la bienvenue.

Odile

D’ailleurs, tant que j’y pense… Serait-il possible de prévoir une case à cocher quelque part pour automatiser l’installation de la nouvelle version à partir du cron au lieu d’envoyer un mail disant qu’une nouvelle version est disponible ?

De ce que je comprends, l’erreur principale provient de sous_repertoire() qui n’arrive pas à créer un dossier. Probablement un problème de droits sur des répertoires de cache (tmp/cache/)

Par ailleurs, je reproduis en désactivant l’écriture sur le dossier du cache ; j’ai ouvert un ticket

Quelle idiote !
Comme www-data n’a pas de shell, j’ai unzipé l’archive en oubliant un chown -R www-data:www-data…

Et pour le petit bouton pour (optionnellement) passer automatiquement les mises à jour en restant sur la même branche ? J’ai fait les mises à jour de 4.4.19 vers 4.4.20 à partir de mon smartphone en vacances, ce n’était pas très pratique… Je préfère personnellement avoir un bug d’affichage quelque part qu’un site hacké.

1 « J'aime »

Bonjour à tous,
Tout fonctionne à nouveau comme attendu (sauf un petit problème avec google, j’ouvre un autre fil).
Merci.