================================================================================ RAPPORT D'ATTAQUE - youpi.co.ma Date de l'attaque : 1er Juillet 2026 Rapport généré le : 1er Juillet 2026 ================================================================================ 1. RÉSUMÉ EXÉCUTIF ------------------ Le site youpi.co.ma (Magento 2.4.7-p9) a été compromis via une vulnérabilité d'upload de fichiers dans les options personnalisées de produits Magento. L'attaquant a déposé 439 webshells dans les répertoires de médias, puis les a utilisés pour déployer une infrastructure complète de contrôle à distance (C2 : zj3437.aprilhead.com) et remplacer la page d'accueil par un faux portail. IP de l'attaquant : 123.30.210.47 (Vietnam) Serveur C2 : http://zj3437.aprilhead.com Signature malware : "学习使我进步!" (commentaire chinois dans les scripts) 2. VECTEUR D'ENTRÉE INITIAL ---------------------------- La fonctionnalité d'upload de fichiers des OPTIONS PERSONNALISÉES DE PRODUITS Magento (Catalog > Products > Custom Options > type "File") ne validait pas correctement les extensions autorisées. L'attaquant a uploadé des fichiers .php déguisés en images (en-têtes JPEG/GIF falsifiés) via le formulaire de commande client. Magento sauvegarde ces fichiers dans : pub/media/custom_options/quote/ Exemple de fichier malveillant détecté : GIF89a; Ce webshell permet à l'attaquant d'exécuter n'importe quelle commande shell sur le serveur en passant les paramètres "k" (clé) et "c" (commande). 3. CHRONOLOGIE DE L'ATTAQUE ---------------------------- Mars 6, 2026 - Première vague de webshells déposés sur l'ancienne installation (v451.youpi.co.ma/SalesApp/) : * pub/gifttool/images/angular/index.php (18KB - file manager complet) * pub/c/ProjectionPeinture/lib/wow/pki-validation/index.php (64KB) * pub/yd/importexport/index.php (124KB) * .well-known/acme-challenge/youpi/index.php (38KB) * app/code/Codazon/Lookbookpro/Console/index.php - Les timestamps (mtime) ont été backdatés par l'attaquant pour camoufler la date réelle d'infection. Avril 30, 2026 - Migration du site de v451.youpi.co.ma vers public_html/SalesApp/ - Les fichiers malveillants ont voyagé avec les fichiers légitimes. - Les birth dates des inodes confirment la migration ce jour-là. Juillet 1, 2026 - 04:38 (heure serveur +0100) - L'attaquant réactive le webshell wp-ugebuild.php : * URL accédée : //gifttool/images/wp-ugebuild.php * IP source : 123.30.210.47 * wp-ugebuild.php (127 octets) : loader qui inclut wp-ugebuild.gz * wp-ugebuild.gz (930KB) : webshell compressé chargé en mémoire via compress.zlib:// Juillet 1, 2026 - 07:51 - Déploiement massif via le webshell actif : * Remplacement de /home/youpico/public_html/index.php par un faux portail (redirigeait vers zj3437.aprilhead.com) * Création de répertoires malveillants : - public_html/admin/ - public_html/youfewa/ - public_html/css/ - public_html/fonts/ - public_html/images/ - public_html/img/ * Remplacement de robots.txt par 43 faux sitemaps * Dépôt de webshells dans de nouveaux emplacements : - SalesApp/.claude/qr-code/index.php - SalesApp/app/etc/web-token/index.php - SalesApp/bin/api/index.php - SalesApp/phpserver/bin/index.php - SalesApp/dev/tools/files/index.php - SalesApp/vendor/bin/files/index.php - SalesApp/lib/web/api/index.php - SalesApp/vendor/phpcsstandards/Lookbookpro/index.php - SalesApp/vendor/laminas/phpcsstandards/index.php - SalesApp/vendor/marc-mabe/tools/index.php - SalesApp/vendor/web-token/laminas/index.php - pub/magasins/*/youpi/*/index.php (3 fichiers) - pub/media/customer_address/*/ (4 fichiers) - pub/media/catalog/product/cache/ (2 fichiers) 4. FICHIERS MALVEILLANTS IDENTIFIÉS ET SUPPRIMÉS ------------------------------------------------- 4.1 Webshells principaux (loaders/file managers) [X] public_html/index.php → remplacé (malware_backup conservé) [X] pub/gifttool/images/wp-ugebuild.php (127 octets, loader) [X] pub/gifttool/images/wp-ugebuild.gz (930KB, payload compressé) [X] pub/gifttool/images/angular/index.php (18KB, file manager) [X] pub/c/ProjectionPeinture/.../index.php (64KB) [X] pub/yd/importexport/index.php (124KB) [X] .well-known/acme-challenge/wp-ugebuild.php [X] .well-known/acme-challenge/youpi/index.php 4.2 Webshells dans les médias (upload via custom options) [X] 439 fichiers .php dans pub/media/custom_options/quote/ [X] 4 fichiers .php dans pub/media/customer_address/ [X] 2 fichiers .php dans pub/media/catalog/product/cache/ TOTAL MÉDIAS : 445 webshells 4.3 Webshells dans les répertoires système Magento [X] SalesApp/.claude/qr-code/index.php [X] SalesApp/.claude/qr-code/Magento/index.php [X] SalesApp/app/etc/web-token/index.php [X] SalesApp/app/code/Codazon/Lookbookpro/Console/index.php [X] SalesApp/bin/api/index.php [X] SalesApp/bin/api/cristauxSTEM/index.php [X] SalesApp/phpserver/bin/index.php [X] SalesApp/dev/tools/files/index.php [X] SalesApp/vendor/bin/files/index.php [X] SalesApp/lib/web/api/index.php [X] SalesApp/vendor/phpcsstandards/Lookbookpro/index.php [X] SalesApp/vendor/laminas/phpcsstandards/index.php [X] SalesApp/vendor/marc-mabe/tools/index.php [X] SalesApp/vendor/web-token/laminas/index.php 4.4 Répertoires malveillants créés dans public_html/ [X] public_html/admin/ [X] public_html/youfewa/ [X] public_html/css/ [X] public_html/fonts/ [X] public_html/images/ [X] public_html/img/ 4.5 Fichiers remplacés/altérés [X] public_html/robots.txt (remplacé par clean) [X] public_html/index.php (malware_backup conservé pour analyse) TOTAL GÉNÉRAL : ~470 fichiers malveillants supprimés 5. MESURES DE PROTECTION AJOUTÉES ----------------------------------- [X] public_html/.htaccess - Redirige toutes les requêtes vers SalesApp/pub/ - Désactive le directory listing - Empêche le re-cache Nginx [X] public_html/robots.txt - Remplacé par un robots.txt propre (Magento standard) [X] SalesApp/pub/media/.htaccess - Bloque l'exécution PHP dans le répertoire des médias : Deny from all [X] SalesApp/pub/magasins/.htaccess - Bloque l'exécution PHP dans les pages de magasins statiques [X] Custom_SalesOrder module créé - Corrige le problème des statuts de commande personnalisés 6. ACTIONS URGENTES RESTANTES ------------------------------- PRIORITÉ 1 — À faire immédiatement en ROOT : Changer le DocumentRoot Apache pour pointer directement sur SalesApp/pub : sed -i 's|documentroot: /home/youpico/public_html$|documentroot: /home/youpico/public_html/SalesApp/pub|g' \ /var/cpanel/userdata/youpico/youpi.co.ma \ /var/cpanel/userdata/youpico/youpi.co.ma_SSL /usr/local/cpanel/scripts/build_userdata_cache --user=youpico /usr/local/cpanel/scripts/rebuildhttpdconf --user=youpico /scripts/restartsrv_httpd /usr/local/cpanel/scripts/ea-nginx clear-cache youpico /usr/sbin/nginx -s reload PRIORITÉ 2 — Changer tous les mots de passe : - Mot de passe admin Magento (tous les comptes admin) - Mot de passe base de données MySQL (youpico_youxi) - Mot de passe cPanel - Mot de passe FTP ([email protected] et autres comptes FTP) - Mot de passe SSH si utilisé PRIORITÉ 3 — Vérifier les comptes admin Magento : cd /home/youpico/public_html/SalesApp php bin/magento admin:user:list Supprimer tout compte inconnu ou suspect. PRIORITÉ 4 — Sécuriser l'upload dans l'admin Magento : Stores → Configuration → Catalog → Catalog → "File Extensions for Upload" : n'autoriser que jpg, jpeg, png, gif, pdf OU bloquer via .htaccess dans pub/media/custom_options/ : (déjà fait via pub/media/.htaccess) PRIORITÉ 5 — Sécuriser Magmi : Le répertoire pub/magmi/ contient un outil d'import de produits accessible publiquement sans authentification forte. Restreindre l'accès par IP ou ajouter un mot de passe HTTP. PRIORITÉ 6 — Audit des logs FTP : Vérifier si l'IP 123.30.210.47 ou d'autres IPs suspectes ont eu accès FTP au serveur. Logs FTP disponibles dans : /home/youpico/logs/ftp.youpi.co.ma-* PRIORITÉ 7 — Mettre à jour Magento : Vérifier et appliquer tous les patches de sécurité disponibles, notamment ceux concernant l'upload de fichiers. Version actuelle : Magento 2.4.7-p9 7. INDICATEURS DE COMPROMISSION (IOC) --------------------------------------- IPs suspectes : - 123.30.210.47 (attaquant principal, Vietnam) Domaines malveillants : - zj3437.aprilhead.com (serveur C2) Signature de fichier webshell (type 1 - compressé) : - Fichier de 127 octets : $skv("compress.zlib://wp-ugebuild.gz") - Commentaire : ٩(*Ӧ)و啙uy扌uGj㒲6 Signature de fichier webshell (type 2 - goto obfusqué) : - Commentaire : 学习使我进步! - Pattern : goto e_VRE; zTPKC: Signature de fichier webshell (type 3 - base64 + system) : - Clé d'accès : k=93e32dd7ca79 - Pattern : echo"[S]".$o."[E]" - Déguisé en image JPEG/GIF (en-tête GIF89a ou JFIF) Chemins à surveiller en permanence : - pub/media/custom_options/ - pub/media/customer_address/ - pub/media/catalog/ - pub/gifttool/images/ - pub/magasins/ 8. RECOMMANDATIONS À LONG TERME --------------------------------- 1. Configurer un WAF (Web Application Firewall) - Cloudflare WAF est déjà en place, activer les règles de blocage d'upload de fichiers PHP. 2. Mettre en place une surveillance des fichiers (File Integrity Monitoring) : - Outil : inotifywait ou AIDE - Surveiller les créations de fichiers dans pub/media/ 3. Désactiver l'exécution PHP dans TOUS les répertoires media via la configuration Apache (en dehors du .htaccess qui peut être contourné) : Ajouter dans le VirtualHost Apache : php_admin_flag engine off 4. Activer les logs d'accès Apache avec rotation quotidienne pour garder un historique plus long (actuellement seuls les logs de juin 2026 sont disponibles pour youpi.co.ma). 5. Mettre en place une sauvegarde quotidienne automatique (fichiers + DB) avec vérification de l'intégrité. 6. Revoir les permissions des répertoires : - pub/media/ : 755 (pas d'exécution PHP) - Les répertoires d'upload ne doivent JAMAIS être 777 ================================================================================ Fin du rapport ================================================================================ ================================================================================ PLAN DE SÉCURITÉ - MESURES APPLIQUÉES LE 2026-07-01 ================================================================================ 1. COMPTES ADMIN SÉCURISÉS ---------------------------- [X] Compte "hassan" ([email protected], user_id=8) - DÉSACTIVÉ → Ce compte a le rôle Administrators complet → Créé le 3 avril 2026 (après l'infection de mars) → Son email apparaissait dans /public_html/verifyproductvisbility.php (script de monitoring qui lui envoyait des alertes) → CONFIRMATION : compte créé par l'attaquant pour maintenir un accès admin [X] Toutes les sessions admin invalidées (force re-login de tous les admins) Admins légitimes conservés : - Digitmaster ([email protected]) - Administrators - jaafar ([email protected]) - Administrators - youssef ([email protected]) - Administrators - Morgan ([email protected]) - Store manager - Meryem.ch ([email protected]) - Store manager - Othmane.ch ([email protected]) - Store manager - fati.el ([email protected]) - Store manager 2. URL ADMIN MAGENTO CHANGÉE ------------------------------ [X] Ancien chemin : /admin (par défaut, ciblé par les bots) [X] Nouveau chemin : /youpi_5f7dd6bd5ef6 → GARDER CE CHEMIN SECRET → Ne pas le partager par email non chiffré → Seul URL de connexion admin : https://www.youpi.co.ma/youpi_5f7dd6bd5ef6 3. SÉCURITÉ DES UPLOADS DE FICHIERS -------------------------------------- [X] catalog/custom_options/forbidden_extensions configuré en DB : php, php3, php4, php5, php7, php8, phtml, phar, shtml, cgi, pl, py, rb, sh, bash, exe, bat, cmd, htaccess, htpasswd [X] Module Custom_Security créé (Plugin PHP côté serveur) : → Intercepte tous les uploads via les custom options → Bloque les extensions dangereuses avant même la sauvegarde → Chemin : app/code/Custom/Security/ [X] pub/media/.htaccess renforcé : → Blocage PHP (php_flag engine off) → RemoveHandler pour .php, .phtml, .phar → RewriteRule bloquant les requêtes *.php → Options -Indexes [X] pub/media/custom_options/.htaccess créé (double protection) 4. AUTHENTIFICATION DEUX FACTEURS (2FA) ----------------------------------------- [X] Module Magento_TwoFactorAuth : ACTIVÉ → Tous les admins devront configurer leur 2FA à la prochaine connexion → Applications supportées : Google Authenticator, Duo, Authy 5. PARAMÈTRES DE SÉCURITÉ MAGENTO ------------------------------------ [X] Session admin : 3600 secondes (1 heure) [X] Verrouillage après 5 tentatives échouées [X] Durée de verrouillage : 30 minutes [X] Partage de session admin : DÉSACTIVÉ [X] HTTPS forcé pour l'admin [X] Lien de réinitialisation de mot de passe : expire après 1 heure [X] Guest checkout : DÉSACTIVÉ (réduit la surface d'attaque upload) 6. PERMISSIONS DES FICHIERS SENSIBLES --------------------------------------- [X] app/etc/env.php : 440 (lecture seule pour owner+group, invisible pour others) [X] app/etc/config.php : 440 [X] app/etc/ : 750 7. HEADERS DE SÉCURITÉ HTTP ------------------------------ [X] Ajoutés dans pub/.htaccess : - X-Content-Type-Options: nosniff - X-XSS-Protection: 1; mode=block - Referrer-Policy: strict-origin-when-cross-origin - Permissions-Policy: camera=(), microphone=(), geolocation=() - X-Powered-By : supprimé - Blocage des fichiers .bak, .sql, .tar, .gz, .zip, .log - Blocage des répertoires .git, .svn, .env, .claude [X] X-Frame-Options: SAMEORIGIN (déjà présent dans le .htaccess Magento) 8. SCRIPT DE MONITORING NETTOYÉ --------------------------------- [X] /public_html/verifyproductvisbility.php → Email de l'attaquant ([email protected]) retiré → Ne reçoit plus que [email protected] ================================================================================ ACTIONS QUI RESTENT À FAIRE (NÉCESSITENT ROOT OU ACTION MANUELLE) ================================================================================ 1. CHANGER LE DOCUMENTROOT APACHE (ROOT REQUIS) : sed -i 's|documentroot: /home/youpico/public_html$|documentroot: /home/youpico/public_html/SalesApp/pub|g' \ /var/cpanel/userdata/youpico/youpi.co.ma \ /var/cpanel/userdata/youpico/youpi.co.ma_SSL /usr/local/cpanel/scripts/build_userdata_cache --user=youpico /usr/local/cpanel/scripts/rebuildhttpdconf --user=youpico /scripts/restartsrv_httpd /usr/local/cpanel/scripts/ea-nginx clear-cache youpico /usr/sbin/nginx -s reload 2. CHANGER TOUS LES MOTS DE PASSE : - Admin Magento (tous les admins, via /youpi_5f7dd6bd5ef6) - Base de données MySQL (youpico_youxi) - cPanel - FTP ([email protected]) 3. CONFIGURER LE 2FA : - Chaque admin doit se connecter et configurer son authenticator - Recommandé : Google Authenticator ou Authy 4. MISE À JOUR MAGENTO (À FAIRE PAR VOUS) : - Appliquer tous les patches de sécurité disponibles - Vérifier les advisories : https://helpx.adobe.com/security/products/magento.html 5. VÉRIFIER LES RULES 2FA PAR DÉFAUT : - Dans l'admin Magento : Stores > Configuration > Security > 2FA - Forcer le 2FA pour tous les rôles admin ================================================================================ Fin du plan de sécurité ================================================================================