Expert Cybersécurité & IAv9.0
Besoin d'un accompagnement expert ?
Devis personnalisé sous 24h — audit, conformité, incident

Techniques de Hacking

31 articles
ETW Tampering : Évasion et Détection sur Windows en 2026 TPM et BitLocker : Cold Boot et Bypass Chiffrement Covert Channels Réseau : Stéganographie et Exfiltration Avancée Type Confusion V8 : Exploitation Avancée Navigateurs eBPF Offensif : Rootkits, Évasion et Détection Kernel-Level DMA Attacks : Exploitation Thunderbolt, PCIe et FireWire 2026 Type Confusion V8 : Exploitation Avancée Navigateurs Vol de Mots de Passe Chrome : DPAPI, Exploits et Outils Extraction Credentials Firefox : NSS, Key4.db et Exploits Hacking Password Managers Navigateurs : Attaques Expert EvilGinx : Phishing AiTM, Bypass MFA et Défense 2026 Persistance Windows Server 2025 : Techniques Complètes Escalade de Privilèges Windows 2025 : Scénarios Réels Buffer Overflow et Corruption Mémoire : Stack, Heap et Escalade de Privilèges Linux : Techniques Offensives et Escalade de Privilèges Windows : Du User au SYSTEM Hacking WordPress Expert : Red Team, Supply Chain et Hacking WordPress : Fondamentaux, Vulnérabilités : Guide Hacking WordPress Intermédiaire : Exploitation Avancée Infostealers : La Menace Silencieuse qui Alimente le Injection SQL Avancée : De la Détection à l'Exploitation MITRE ATT&CK : Les 10 Techniques les Plus Utilisées en OSINT et Reconnaissance Offensive : Du Renseignement Password Attacks : Cracking, Spraying et Credential Stuffing Ransomware : Anatomie d'une Attaque, Kill Chain et Reverse Engineering et Analyse de Malware : Guide Pratique Red Team vs Pentest vs Bug Bounty : Comparatif Complet Bug Bounty : Créer et Gérer un Programme de Sécurité Zero Trust Architecture : Implémentation Complète et Mouvement Latéral : Techniques d'Attaque, Détection et Attack Surface Management (ASM) : Gestion Continue de la

Attaques Active Directory

43 articles
Mouvement Latéral Windows AD 2026 : Techniques Expert Impacket : Guide complet exploitation Active Directory 2026 Pentest Active Directory : Guide Méthodologique Complet 2026 BloodHound : Cartographie des Chemins d'Attaque Active NTDS.dit : Extraction, Analyse et Protection des Secrets LAPS : Gestion Sécurisée des Mots de Passe : Guide Complet Tiering Model Active Directory : Segmentation des : Guide GPO Sécurisation Active Directory : Hardening par : Guide Forum InCyber 2026 : Securite AD en Vedette : Guide Complet Conditional Access Entra ID : Nouveautes Mars 2026 ADCS 2026 : Bilan ESC1 a ESC15 et Remediation en 2026 BloodHound 5 : Nouveaux Chemins d'Attaque Detectes Audit AD Automatise PowerShell : Scripts 2026 en 2026 NTLM Relay 2026 : Techniques et Defenses Actuelles Tiering Model AD 2026 : Adapter Face aux Menaces en 2026 Passwordless AD : Bilan des Risques et Opportunites Entra ID : Fin des Service Principals Legacy : Guide Complet BadSuccessor DMSA : Compromettre Active Directory en 2026 AD FS et SAML : Methodologie et Recommandations de Securite RBCD Abuse Active Directory | Active Directory 2026 Computer Account Takeover Active : Analyse Technique Active Directory Certificate Services : Guide Complet Forest Trust Abuse Active | Defence Active Directory ACL Abuse Active Directory | Active Directory 2026 AS-REP Roasting : Exploitation : Analyse Technique Kerberoasting : Guide Complet | Active Directory 2026 Password Filter DLL : Guide Pratique Cybersecurite Pass-the-Hash (PtH) : Comprendre, : Analyse Technique AdminSDHolder : Persistance via : Analyse Technique Pass-the-Ticket Active Directory : : Guide Complet NTFS Tampering et Anti-Forensics : Analyse Technique GPO Abuse Active Directory | Active Directory 2026 SIDHistory Injection Active Directory : Guide Complet Skeleton Key Malware Active | Active Directory 2026 Silver Ticket Active Directory : Analyse Technique DCSync Attack : Exfiltration | Active Directory 2026 DCShadow : Attaque Furtive | Active Directory 2026 Golden Ticket Attack : Guide Pratique Cybersecurite Migration MFA Entra : Revoquer les Sessions Legacy Attaques AD 2025 : Bilan et Tendances Emergentes en 2026 Entra Connect SyncJacking : Bloquer l'Attaque en 2026 CVE-2025-21293 : Escalade de Privileges AD DS en 2026 Durcissement AD : Guide des Recommandations Microsoft

Intelligence Artificielle

166 articles
Qdrant vs Milvus vs Weaviate : Bases Vectorielles pour RAG Sécurisé Jailbreak LLM : Taxonomie et Détection Automatisée Sécuriser un Pipeline RAG : Du Vector Store à l'API Exfiltration de Données via RAG : Attaques Contextuelles AI Red Team : Auditer un Modèle IA en Production 2026 Prompt Injection Avancée : Attaques et Défenses 2026 La Puce Analogique que les États-Unis ne Peuvent Arrêter Contenu IA : Outils de Detection Proactive Multimodale Prompt Injection et Attaques Multimodales : Défenses en 2026 Stocker et Interroger des Embeddings à Grande Échelle Benchmark LLM Mars 2026 : Etat des Lieux Complet en 2026 Claude Opus 4.6 : Applications en Cybersecurite en 2026 AI Worms et Propagation Autonome : Menaces Émergentes 2026 Confidential Computing et IA : Entraîner et Inférer dans IA Générative pour le Pentest Automatisé : Méthodes et IA et Gestion des Vulnérabilités : Priorisation EPSS Long Context vs RAG : Quand Utiliser 10M Tokens au Lieu Mixture of Experts (MoE) : Architecture, Sécurité et AI Model Supply Chain : Attaques sur Hugging Face et les IA et SCADA/ICS : Détection d'Anomalies sur les Protocoles Sparse Autoencoders et Interprétabilité Mécanistique IA et Zero Trust : Micro-Segmentation Dynamique Pilotée par Red Teaming IA 2026 : Tester les LLM en Entreprise MCP Model Context Protocol : Securiser les Agents en 2026 AI Act 2026 : Implications pour les Systèmes Agentiques et Context Engineering pour Agents Multimodaux : Guide Complet Défense contre les Attaques IA Générées : Stratégies Détection Proactive de Contenu Généré par IA Multimodal Embodied AI : Agents Physiques, Robotique et Sécurité en Forensic Post-Hacking : Reconstruction et IA : Guide Complet Gouvernance Globale de l'IA 2026 : Alignement International Gouvernance du Hacking IA Offensive : Cadre et Bonnes Pra... Green Computing IA 2026 : Eco-Responsabilite et Sobriete Hacking Assisté par IA : Génération de Payloads et Human-AI Collaboration 2026 : Travailler avec des Agents Intégration d'Agents IA avec les API Externes en 2026 LLMOps pour Agents Autonomes : Monitoring et CI/CD Mémoire Augmentée Agents : Vector + Graph 2026 en 2026 Détection Multimodale d’Anomalies Réseau par IA en Multimodal RAG 2026 : Texte, Image, Audio : Guide Complet PLAM : Agents IA Personnalisés Edge et Déploiement Prompt Hacking Avancé 2026 : Techniques et Défenses Prompt Injection et Attaques Multimodales : Défenses en Red Teaming Cyber-Défense Agentique : Méthodologie Responsible Agentic AI : Contrôles, Garde-Fous et 2026 Agents RAG avec Actions : Récupération et Exécution Sécurité des Agents IA en Production : Sandboxing et Shadow Agents IA : Identification et Gouvernance 2026 Traçabilité des Décisions d'Agents Autonomes : Guide Agentic AI 2026 : Autonomie en Entreprise : Guide Complet Agents IA et Raisonnement Causal pour la Décision 2026 Agents IA Edge 2026 : Privacy, Latence et Architecture PLAM Architectures Multi-Agents et Orchestration LLM en Produc... Collaboration Multi-Agents IA 2026 : Orchestration et RAG Agentique : Pipelines IA Autonomes en Entreprise IA et Analyse Juridique des Contrats Cybersécurité Apprentissage Fédéré et Privacy-Preserving ML en 2026 IA pour la Défense et le Renseignement : Cadre Éthique Données Synthétiques : Génération, Validation et 2026 DSPy et la Programmation Déclarative de LLM : Guide IA dans la Finance : Détection de Fraude Temps Réel et Gouvernance LLM et Conformite : RGPD et AI Act 2026 Playbooks de Réponse aux Incidents IA : Modèles et IA Neuromorphique : Architecture et Securite en 2026 Pydantic AI et les Frameworks d'Agents Type-Safe en 2026 Quantum Machine Learning : Risques et Opportunités pour la RAG en Production : Architecture, Scaling et Bonnes Reinforcement Learning Appliqué à la Cybersécurité AI Safety et Alignement : Du RLHF au Constitutional AI en IA dans la Santé : Sécuriser les Modèles Diagnostiques et Sécurité LLM Adversarial : Attaques, Défenses et Bonnes Speculative Decoding et Inférence Accélérée : Techniques Voice Cloning et Audio Deepfakes : Detection en 2026 IA Agentique 2026 : Risques et Gouvernance : Guide Complet Agents IA Autonomes : Architecture, Frameworks et Cas Automatiser le DevOps avec des Agents IA : Guide Complet Agents IA pour le SOC : Triage Automatisé des Alertes AI Act et LLM : Classifier vos Systèmes IA : Guide Complet AI TRiSM : Framework Gartner Appliqué : Guide Complet IA pour l’Analyse de Logs et Détection d’Anomalies en IA et Automatisation RH : Screening CV et Compliance Chatbot Entreprise avec RAG et LangChain : Guide Pas à Pas Llama 4, Mistral Large, Gemma 3 : Comparatif LLM Open Source Computer Vision en Cybersécurité : Détection et 2026 Confidentialité des Données dans les LLM : PII et DLP IA et Conformité RGPD : Données Personnelles dans les Context Window : Gérer 1 Million de Tokens en Production Coût d'Inférence des LLM : Optimiser sa Facture Cloud CrewAI, AutoGen, LangGraph : Comparatif Frameworks Data Platform IA-Ready : Architecture de Référence 2026 Data Poisoning et Model Backdoors : Supply Chain IA Deepfakes et Social Engineering IA : Détection et 2026 Deployer des LLM en Production : GPU et Optimisation Détection de Menaces par IA : SIEM Augmenté : Guide IA pour le DFIR : Accélérer les Investigations Forensiques Évaluation de LLM : Métriques, Benchmarks et Frameworks Fine-Tuning de LLM Open Source : Guide Complet LoRA et QLoRA Function Calling et Tool Use : Intégrer les API aux LLM Fuzzing Assisté par IA : Découverte de Vulnérabilités IA pour la Génération de Code : Copilot, Cursor, Claude Gouvernance IA en Entreprise : Politiques et Audit GraphRAG et Knowledge Graphs : Architecture RAG Avancée Knowledge Management avec l’IA en Entreprise : Stratégies Kubernetes pour l’IA : GPU Scheduling, Serving et 2026 LLM en Local : Ollama, LM Studio et vLLM - Comparatif 2026 LLM On-Premise vs Cloud : Souveraineté et Performance MCP (Model Context Protocol) : Connecter les LLM à vos MLOps Open Source : MLflow, Kubeflow, ZenML : Guide Complet IA Multimodale : Texte, Image et Audio : Guide Complet IA Offensive : Comment les Attaquants Utilisent les LLM Orchestration d'Agents IA : Patterns et Anti-Patterns OWASP Top 10 pour les LLM : Guide Remédiation 2026 Phishing Généré par IA : Nouvelles Menaces : Guide Prompt Engineering Avancé : Chain-of-Thought et Techniques Quantization : GPTQ, GGUF, AWQ - Quel Format Choisir RAG vs Fine-Tuning vs Prompt Engineering : Quelle Stratégie Reconnaissance Vocale et LLM : Assistant Vocal Sécurisé Red Teaming de Modèles IA : Jailbreak et Prompt Injection ROI de l'IA Générative : Mesurer l'Impact Réel en 2026 Sécuriser un Pipeline MLOps : Bonnes Pratiques et 2026 Shadow AI : Détecter et Encadrer l'Usage Non Autorisé Small Language Models : Phi-4, Gemma et IA Embarquée Threat Intelligence Augmentée par IA : Guide Complet Vector Database en Production : Scaling et HA en 2026 CNIL Autorite AI Act : Premiers Pas Reglementaires KVortex : Offloader VRAM→RAM pour LLMs vLLM et Inférence Securiser un Pipeline RAG en Production (2026) en 2026 Codex GPT-5.2 : Generation de Code Autonome Securisee Mixture of Experts : Architecture LLM de 2026 en 2026 GPT-5.2 et Agents IA : Revolution en Cybersecurite Windows Recall : Analyse Technique Complete - Fonctionnem... L'IA dans Windows 11 : Copilot, NPU et Recall - Guide Com... Deepfake-as-a-Service : La Fraude IA Industrialisee Small Language Models : Securite a la Peripherie en 2026 RAG Poisoning : Manipuler l'IA via ses Documents en 2026 Phishing IA : Quand les Defenses Traditionnelles Echouent Superintelligence : De l'ANI à l'ASI : Guide Complet La Fin des Moteurs de Recherche : Analyse Expert 2026 Embeddings et Recherche Documentaire : Guide Complet Stratégies de Découpage de | Guide IA Complet 2026 Sécurité et Confidentialité des : Analyse Technique Vecteurs en Intelligence Artificielle : Guide Complet Embeddings vs Tokens : Guide Pratique Cybersecurite Qu'est-ce qu'un Embedding en | Guide IA Complet 2026 Cas d'Usage des Bases - Guide Pratique Cybersecurite Bases Vectorielles : Définition, : Analyse Technique La Vectorisation de Données | Guide IA Complet 2026 Tendances Futures des Embeddings : Analyse Technique Optimiser le Chunking de - Guide Pratique Cybersecurite Milvus, Qdrant, Weaviate : | Guide IA Complet 2026 Glossaire IA et Cybersécurité : 100 Termes Essentiels 2026 10 Erreurs Courantes dans - Guide Pratique Cybersecurite Benchmarks de Performance : | Guide IA Complet 2026 RAG Architecture | Guide - Guide Pratique Cybersecurite Comment Choisir sa Base - Guide Pratique Cybersecurite Indexation Vectorielle : Techniques : Guide Complet Comprendre la Similarité Cosinus : Analyse Technique Comet Browser : Architecture | Guide IA Complet 2026 Développement Intelligence Artificielle | : Guide Complet Stocker et Interroger des - Guide Pratique Cybersecurite Shadow AI en Entreprise : Detecter et Encadrer en 2026 GPT-5.1 vs Claude 4.5 vs Gemini 3 : Comparatif en 2026 OpenClaw : Crise de l'Agent IA Open Source : Guide Complet Prompt Injection : 73% des Deploiements Vulnerables AI Act Aout 2025 : Premieres Sanctions Activees en 2026 OWASP Top 10 LLM 2025 : Risques et Remediations en 2026

Forensics

31 articles
Forensique Mémoire : Guide Pratique Volatility 3 en 2026 Timeline Forensique : Reconstituer Pas à Pas une : Guide Forensique Cloud : Analyser les Logs CloudTrail, Azure Forensique Microsoft 365 : Analyse du Unified Audit Log Chaîne de Preuve Numérique : Bonnes Pratiques Juridiques Exercice de Crise Cyber : Organiser un Tabletop Efficace Forensique Disque : Acquisition d'Image et Analyse avec Mobile Forensics : Extraction et Analyse iOS/Android Ransomware Forensics : Identifier la Souche : Guide Complet Forensics Linux : Artifacts et Investigation : Guide Complet MacOS Forensics : Artifacts et Persistence : Guide Complet Malware Reverse : Analyse de Cobalt Strike 5 : Guide Complet Email Forensics : Tracer les Campagnes Phishing en 2026 Timeline Analysis : Reconstruction d'Incidents en 2026 Registry Advanced : Guide Expert Analyse Technique NTFS Forensics : Methodologie et Recommandations de Securite LNK & Jump Lists : Strategies de Detection et de Remediation Windows Forensics : Guide Expert en Analyse Securite Registry Forensics : Guide Expert Analyse Securite Windows Server 2025 - Guide Pratique Cybersecurite Memory Forensics : Strategies de Detection et de Remediation ETW & WPR : Guide Complet et Bonnes Pratiques pour Experts Modèles de Rapports - Guide Pratique Cybersecurite Comparatif Outils DFIR - Guide Pratique Cybersecurite AmCache & ShimCache - Guide Pratique Cybersecurite Telemetry Forensics - Guide Pratique Cybersecurite Anti-Forensics : Methodologie et Recommandations de Securite NTFS Advanced : Methodologie et Recommandations de Securite Network Forensics : Analyse PCAP Avancee : Guide Complet DFIR Cloud : Investigation Logs AWS CloudTrail en 2026 Memory Forensics 2026 : Volatility 3 Avance : Guide Complet

Microsoft 365

24 articles
Chronologie des Attaques Active Directory : 2014-2026 Audit Avancé Microsoft 365 : Corréler Journaux et Logs Azure Automatiser l'Audit Sécurité Microsoft 365 : Guide Expert API Microsoft Graph : Audit et Monitoring M365 en 2026 Meilleures Pratiques Sécurité Microsoft 365 en 2026 PIM Entra ID : Gestion des Accès Privilégiés Just-in-Time Sécuriser Microsoft Teams : Gouvernance, DLP et Contrôle SharePoint et OneDrive : Maîtriser le Partage Externe et Microsoft Defender for Office 365 : Configuration : Guide Microsoft Secure Score : Guide d'Optimisation de votre Sécuriser Microsoft Entra ID : Conditional Access, MFA Durcissement Exchange Online : Bloquer Basic Auth et Microsoft Intune : Politiques de Conformité et : Guide Zero Trust M365 : Strategies de Detection et de Remediation API Microsoft Graph M365 - Guide Pratique Cybersecurite Microsoft 365 et Conformité - Guide Pratique Cybersecurite Audit Sécurité Microsoft 365 | Guide Microsoft 365 Audit Avancé Microsoft 365 - Guide Pratique Cybersecurite Pratiques Sécurité M365 2025 | Guide Microsoft 365 Microsoft 365 et Azure - Guide Pratique Cybersecurite Threat Hunting Microsoft 365 | Guide Microsoft 365 Top 10 Outils Analyse Securite Microsoft 365 — Guide Automatiser l'Audit de Sécurité : Analyse Technique Sécuriser les Accès Microsoft | Guide Microsoft 365

Virtualisation

25 articles
SDN Proxmox VE 9 : Zones, VNets, IPAM et Firewalls Architecture Proxmox VE 9.1 : Cluster 3 Nœuds + HA Réplication Proxmox VE : ZFS, Snapshots et Checklist Administration CLI Proxmox VE : Diagnostic Cluster Déploiement Automatisé Proxmox : Terraform et Ansible Proxmox VE 9.1 : Paramètres Avancés VM et Nested Virt Outils Proxmox VE : Monitoring, IaC et Écosystème 2026 Optimisation Proxmox VE 9 : CPU, RAM, ZFS, Ceph et HA Dimensionnement Proxmox VE 9 : CPU, RAM, Stockage, HA Proxmox VE : Cluster HA, Live Migration et Ceph 2026 Proxmox vs VMware vs Hyper-V : Comparatif Sécurité et Durcissement VMware ESXi : Guide Complet de Sécurisation ESXi Hardening : Guide Complet de Sécurisation Avancée Migration VMware vers Proxmox VE : Guide Complet : Guide Hyper-V Shielded VMs : Sécurisation Avancée du : Guide Proxmox Backup Server : Stratégie de Sauvegarde et Optimisation Proxmox - Guide Pratique Cybersecurite Évolutions Proxmox : Guide Expert Bonnes Pratiques Calculateur Sizing : Guide Expert Bonnes Pratiques NTP Proxmox : Guide Complet et Bonnes Pratiques pour Experts Dimensionnement : Strategies de Detection et de Remediation Guide Complet Proxmox - Guide Pratique Cybersecurite Migration VMware : Strategies de Detection et de Remediation Securite Proxmox VE : Guide Complet Hardening 2026 Hyper-V 2025 : Analyse Technique Approfondie et Securisation

Cybersécurité Générale

44 articles
Débuter en Pentest : Parcours et Ressources 2026 Carte des Menaces Cyber 2025-2026 : Threat Landscape 20 Erreurs Fatales en Cybersécurité : AD, Cloud et IA Certifications Cybersécurité 2026 : Guide Complet OSCP à CISSP 15 Mythes en Cybersécurité Démystifiés par un Pentester CrowdStrike vs Defender vs SentinelOne : Quel EDR en 2026 ? L'ingénierie sociale a gagné : vos firewalls ne servent plus à rien Quatre zero-days Chrome en 2026 : le navigateur est devenu la cible Zero-days exploités avant le patch : la nouvelle norme en 2026 Le délai d'exploitation se réduit à néant : ce que ça Deepfakes et Social Engineering : Menaces IA en 2026 Culture Sécurité en Entreprise : Changer les Comportements Programme Sensibilisation Cyber : Méthode et KPI 2026 Exercices Phishing Interne : Outils et Bonnes Pratiques Quand les défenseurs passent à l'attaque : leçons de Patch Tuesday ne suffit plus : repenser la gestion des Data brokers : les coffres-forts que tout le monde veut Vos outils d automatisation sont devenus des cibles Équipements en fin de vie : maillon faible sécurité quand vos défenseurs travaillent pour l adversaire Pipelines IA en production : vos agents LLM sont des cibles Time-to-exploit : quand les 0-day brûlent en quelques heures OWASP Top 10 : Guide Complet Vulnérabilités Web 2026 Nessus et Greenbone : Guide Scanners Vulnérabilités ANSSI ReCyF : NIS2 en pratique, ce qui change pour vous Pipelines IA : vos clés API sont les nouvelles clés du SI Ransomwares : Pourquoi Vos Sauvegardes Ne Sauvent Plus CI/CD : L'Angle Mort de la Sécurité DevOps en 2026 Vos Outils IA : la Nouvelle Surface d'Attaque Ignorée Ransomware Trends Q1 2026 : Analyse des Groupes en 2026 IOC Management : Automatiser la Threat Intel : Guide Complet Cyber Threat Landscape France 2026 : Bilan ANSSI en 2026 Darkweb Monitoring : Outils et Techniques 2026 en 2026 InfoStealers 2026 : Lumma, Raccoon et RedLine en 2026 Supply Chain APT : Comprendre les Attaques Etatiques Top 10 des Attaques - Guide Pratique Cybersecurite Top 10 Outils Securite Kubernetes 2025 — Guide Pratique Livre Blanc : Sécurisation | Threat Intelligence 2026 Guide Complet Sécurité Active | Guide Cyberdefense Top 5 des Outils : Strategies de Detection et de Remediation Top 10 Solutions EDR/XDR | Threat Intelligence 2026 Top 10 Outils Audit - Guide Pratique Cybersecurite Threat Hunting : Detection Proactive avec MITRE en 2026 APT29 2026 : Nouvelles TTP et Campagnes Cloud en 2026

Articles Techniques

105 articles
Retours d’Expérience Pentest : 5 Missions Terrain Anonymisées BloodHound vs SharpHound vs BloodyAD : Guide Comparatif 2026 Burp Suite vs OWASP ZAP : Quel Scanner Web Choisir en 2026 ? Nuclei vs Nessus vs Qualys : Scanners de Vulnérabilités Comparés Format String Exploitation Moderne : Du Crash au RCE en 2026 Race Conditions Kernel : Double-Fetch, TOCTOU et Exploitation BGP Hijacking et OSPF Exploitation : Attaques Routage Internet GPU Side-Channels : Attaques sur CUDA, OpenCL et WebGPU Intel ME et AMD PSP : Exploitation des Coprocesseurs Cryptanalyse Pratique : Attaques sur AES, RSA et ECC SGX, TDX et TEE : Attaques sur les Enclaves Sécurisées 2026 Hypervisor Escape : Techniques d'Évasion VMware, KVM et QEMU Linux Kernel Exploitation : Escalade de Privilèges Side-Channel Attacks : Spectre, Meltdown et Rowhammer ROP/JOP Chains : Exploitation Moderne des Binaires Protégés Heap Exploitation : Use-After-Free et Tcache Poisoning SGX, TDX et TEE : Attaques sur les Enclaves Sécurisées Hack The Box : Méthodologie pour Progresser en 2026 DVWA vs Juice Shop vs WebGoat : Comparatif Labs Web Lab Pentest Proxmox : Guide Complet d'Installation 2026 Top 5 Plateformes CTF et Entraînement Cyber en 2026 Architecture de Sécurité Matérielle Windows 11 & Server 2025 Windows Scheduler Internals : Architecture, Performance Architecture Windows Server 2025 : Noyau NT Expert Architecture Vertical Slice + Clean Lite : Guide 2026 Cryptographie Post-Quantique : Migration Pratique en 2026 Zero Trust Network : Implementation Pratique 2026 en 2026 C2 Frameworks Modernes : Mythic, Havoc, Sliver et Détection DNS Attacks : Tunneling, Hijacking et Cache Poisoning Exploitation de l’Infrastructure as Code Terraform et Exploitation des Protocoles Email : SMTP Smuggling et Att... GCP Offensive Security : Exploitation des Services Google Purple Team : Méthodologie et Exercices Collaboratifs Race Conditions et TOCTOU : Exploitation des Bugs de Windows Kernel Exploitation : Drivers, Tokens et KASLR Threat Intelligence : Automatiser la Veille Cyber en 2026 Attaques sur les Identity Providers Okta, Entra et Keycloak Attaques sur les Pipelines ML/AI et Empoisonnement de Mod... SSRF Avance : Bypass des Protections Cloud 2026 en 2026 Windows Kernel : Exploitation de Drivers Vulnerables Agents IA pour la Cyber-Défense et le Threat Hunting Cyber-Défense Agentique contre les APTs : Guide Complet Red Teaming des Agents Autonomes : Méthodologie et Shadow Hacking et Outils IA Non-Autorisés en Entreprise Container Escape : Techniques d'Évasion Docker et 2026 Exploitation Active Directory Certificate Services (ADCS) Hardware Hacking : JTAG, SWD, UART et Extraction de Firmware Post-Exploitation : Pillage, Pivoting et Persistance Sécurité Mobile Offensive : Android et iOS en 2026 Service Mesh Exploitation : Attaques sur Istio, Linkerd et SIM Swapping et Attaques Telecom : SS7, Diameter et 5G UEFI Bootkits et Attaques sur le Firmware : Persistance A... Attaques sur les Bases de Données SQL, NoSQL et GraphQL Attaques CI/CD Avancées : GitOps, ArgoCD et Flux en Attaques Serverless : Exploitation de Lambda, Azure Attaques sur les Smart Contracts et la Sécurité Web3 Attaques Wireless Avancées : Wi-Fi 7, BLE 5.4 et Zigbee Browser Exploitation Moderne : V8, Blink et les Sandbox Bypass FIDO2 et Passkeys : Attaques sur l'Authentification ICS/SCADA : Pentest d'Environnements Industriels en 2026 Supply Chain : Detecter les Dependances Malveillantes Incident Response : Playbook Ransomware 2026 : Guide Complet Reverse Engineering : Analyse de Firmware IoT en 2026 GraphQL Injection : Techniques d'Exploitation 2026 API Security : Fuzzing Avance avec Burp et Nuclei en 2026 Cloud Forensics : Investigation AWS et Azure : Guide Complet OAuth 2.1 : Nouvelles Protections et Migration en 2026 Pentest Wi-Fi 7 : Nouvelles Surfaces d'Attaque en 2026 C2 Frameworks 2026 : Mythic vs Havoc vs Sliver en 2026 DNS Tunneling Detection : Guide SOC Analyst : Guide Complet Phishing 2026 : Techniques Avancees de Spear-Phishing Web3 Security : Audit de Smart Contracts Solidity en 2026 Attaques sur CI/CD (GitHub - Guide Pratique Cybersecurite Azure AD : attaques - Guide Pratique Cybersecurite Supply-chain applicative (typosquatting, dependency Secrets sprawl : collecte - Guide Pratique Cybersecurite SSRF moderne (IMDSv2, gopher/file, : Guide Complet NTLM Relay moderne (SMB/HTTP, | Guide Technique 2026 Evasion d’EDR/XDR : techniques : Analyse Technique Phishing sans pièce jointe - Guide Pratique Cybersecurite Persistence sur macOS & - Guide Pratique Cybersecurite WebCache Deception & cache - Guide Pratique Cybersecurite Abus OAuth/OIDC : Consent - Guide Pratique Cybersecurite Sécurité des LLM et - Guide Pratique Cybersecurite Chaîne d'exploitation Kerberos en : Analyse Technique Living-off-the-Land (LOL-Bins/LOLBAS) à l’échelle en Exfiltration furtive (DNS, DoH, : Analyse Technique Kubernetes offensif (RBAC abuse, : Analyse Technique Désérialisation et gadgets en | Guide Technique 2026 Attaques sur API GraphQL - Guide Pratique Cybersecurite Escalades de privilèges AWS | Guide Technique 2026 OT/ICS : passerelles, protocoles : Analyse Technique Cloud IAM : Escalade de Privileges Multi-Cloud en 2026 AWS Lambda Security : Attaques et Defenses : Guide Complet Terraform Security : Audit et Durcissement IaC en 2026 SIEM : Correlations Avancees pour Threat Hunting en 2026 Mobile Pentest : Bypass SSL Pinning Android 15 en 2026 Container Escape 2026 : Nouvelles Techniques Docker Bug Bounty 2026 : Strategies et Plateformes : Guide Complet EDR Bypass 2026 : Techniques et Contre-Mesures en 2026 ZED de PRIM’X : Conteneurs Chiffrés et Sécurité des Malware Analysis : Sandbox Evasion Techniques en 2026 Purple Team : Exercices Pratiques AD et Cloud en 2026 OSINT 2026 : Outils et Techniques de Reconnaissance Kubernetes RBAC : 10 Erreurs de Configuration Critiques

Conformité

54 articles
SOA ISO 27001 : Statement of Applicability Complet Feuille de Route ISO 27001 : Certification en 12 Étapes Checklist Audit ISO 27001 : 93 Contrôles Annexe A 2022 Charte Informatique Entreprise : Guide et Modèle Word Analyse de Risques ISO 27005 : Méthodologie Complète PSSI ISO 27001 : Guide Rédaction et Modèle Complet Aspects Juridiques et Éthiques de l’IA : Cadre Réglementaire Classification des données : méthodes et outils pratiques Analyse d'impact AIPD : méthodologie CNIL pas à pas NIS 2 et DORA : double conformité du secteur financier Maturité cybersécurité : modèles CMMC et NIST CSF 2.0 Cartographie des risques cyber avec EBIOS RM en 2026 SMSI ISO 27001 version 2022 : guide complet pas à pas Audit de conformité RGPD : checklist complète pour DPO NIS2, DORA et RGPD : Cartographie des Exigences Croisées IEC 62443 : Cybersécurité Industrielle OT - Guide : Guide Audit de Sécurité du SI : Méthodologie Complète et PRA/PCA Cyber : Plan de Reprise et Continuité d'Activité Qualification PASSI ANSSI : Devenir Prestataire d'Audit Audit de Securite Cloud : Checklist Conformite 2026 PCI DSS 4.0.1 : Nouvelles Exigences Mars 2026 en 2026 Conformite Multi-Referentiels : Approche Unifiee 2026 NIS 2 Phase Operationnelle : Bilan 6 Mois Apres en 2026 Aspects Juridiques et Ethiques de l'IA en Entreprise ISO/IEC 42001 Foundation : Système de Management IA ISO 42001 Lead Auditor : Auditer un Systeme de Management ISO 42001 Lead Implementer : Management de l’IA et RGPD et AI Act : Guide Complet pour les Organisations en ... Développement Sécurisé ISO 27001 : Cycle S-SDLC en 6 Cyber Assurance 2026 : Exigences et Marche Durci en 2026 SOC 2 Type II : Retour d'Experience Implementation DORA 2026 : Impact sur le Secteur Financier Francais Cyber-assurance 2026 : Nouvelles Exigences et Guide Complet AI Act 2026 : Guide Conformité Systèmes IA à Haut Risque Cyber Resilience Act 2026 : Guide Anticipation Produits C... DORA 2026 : Premier Bilan et Contrôles ACPR - Guide Complet NIS 2 Phase Opérationnelle 2026 : Guide Complet de Mise RGPD 2026 : Securite des Donnees et Enforcement CNIL - Gu... HDS 2026 : Certification Hébergeur de Données de Santé - PCI DSS 4.0.1 en 2026 : Retour d'Expérience et Guide SBOM 2026 : Obligation de Sécurité et Guide Complet SecNumCloud 2026 et EUCS : Guide Complet Qualification Cryptographie Post-Quantique : Guide Complet pour les SI ... ISO 27001:2022 Guide Complet Certification Expert 2026 NIS 2 : Guide Complet de la Directive Européenne sur la SOC 2 : Guide Complet Conformite pour Organisations RGPD 2026 : Durcissement des Sanctions par la CNIL HDS 2026 : Certification Hebergement de Donnees Sante Cyber Resilience Act : Guide de Conformite Produits RGPD et IA Generative : Guide de Conformite CNIL en 2026 SecNumCloud 2026 : Migration et Certification EUCS AI Act Classification : Systemes a Haut Risque en 2026 SBOM 2026 : Obligation de Transparence Logicielle en 2026 ISO 27001:2022 vs ISO 27001:2013 : Differences Cles

SOC et Detection

25 articles
Incident Triage : Classification et Priorisation SOC 2026 Threat Hunting Proactif : Techniques et Outils SOC 2026 Sigma Rules : Standard de Détection Universel Guide Complet SOC as a Service : Externaliser la Détection Guide 2026 XDR vs SIEM vs EDR : Comprendre les Différences en 2026 Purple Team : Collaboration entre SOC et Red Team Guide Détection du Mouvement Latéral : Guide Complet SOC 2026 Triage des Alertes SOC : Méthodologie Complète pour Analyste NDR : Détection Réseau et Réponse aux Menaces Guide 2026 SIEM Cloud-Native vs On-Premise : Comparatif Complet 2026 Log Management : Architecture et Rétention SOC : Guide Use Cases SIEM : 50 Règles Détection Essentielles : Gui SOC Metrics et KPIs : Mesurer la Performance : Guide Co SOAR : Automatisation Réponse Incident Guide : Guide Co Threat Intelligence Platforms : Comparatif 2026 : Guide Microsoft Sentinel : Déploiement et Règles KQL : Guide Splunk Enterprise Security : Configuration SOC : Guide Elastic SIEM : Stack Détection Open Source 2026 : Guide SOC Moderne : Architecture et Outils Guide 2026 : Guide Analyste SOC : Niveaux, Parcours et Compétences : Guide Threat Hunting : Méthodologie, Outils et Pratique pour Detection Engineering : Construire des Règles de : Guide Detection-as-Code : Pipeline CI/CD pour Règles SIEM et Sigma Rules : Guide Complet d'Écriture et Déploiement de Wazuh SIEM/XDR Open Source : Déploiement, Configuration

Cloud Security

45 articles
Cloud Forensics Avancée Post-Compromission sur AWS Cloud Pentest : Méthodologie Complète Audit AWS et Azure Cloud Logging : Guide Centralisation et Monitoring Sécurité Cloud Network Security : Guide Complet VPC, WAF et DDoS DevSecOps Cloud : Guide Pipeline CI/CD Sécurisé Complet Cloud Disaster Recovery : Guide PRA et Résilience Cloud Cloud Compliance : Guide RGPD, HDS et SecNumCloud 2026 Cloud Forensics : Guide Investigation Incident Cloud 2026 Infrastructure as Code Security : Guide Terraform Complet Cloud Encryption : Guide Chiffrement Données et Clés KMS CASB : Guide Comparatif Cloud Access Security Broker 2026 Container Security : Docker et Runtime Protection Avancée Serverless Security : Sécuriser Lambda et Functions Cloud Multi-Cloud Security : Guide Stratégie Sécurité Unifiée Cloud IAM : Guide Gestion Identités et Accès Cloud 2026 Kubernetes Security : Guide Durcissement Cluster K8s 2026 Sécurité AWS : Guide Complet Hardening Compte et Services Azure Security Center : Guide Configuration Complète 2026 GCP Security : Bonnes Pratiques et Guide Audit Cloud 2026 CSPM : Guide Cloud Security Posture Management Complet CNAPP : Guide Protection Cloud-Native Applications 2026 ZTNA Zero Trust Network Access Cloud : Guide Complet Disaster Recovery Cloud : PRA Multi-Région en 2026 Attaques sur Metadata Services Cloud : SSRF et IMDS FinOps Sécurité : Cryptomining Ressources Fantômes Secrets Management Cloud : Vault et Key Vault 2026 Cloud Compliance NIS 2 SecNumCloud ISO 27017 Guide Sécurité Multi-Cloud : Stratégie Unifiée AWS, Azure et GCP Cloud Misconfiguration : Top des Erreurs de Sécurité et Cloud IAM : Sécurisation des Identités et Accès AWS, CSPM : Cloud Security Posture Management - Guide Complet Souveraineté Cloud : Protéger les Données Sensibles en Container Registry : Guide Sécurité Images Docker 2026 Cloud Logging Monitoring : Visibilité Complète 2026 Service Mesh Security : Sécuriser Istio et Linkerd Cloud Pentest Azure : Exploitation Misconfiguration Terraform IaC Sécurisé : Checklist de Durcissement Cloud Pentest AWS avec Pacu et CloudFox : Le Guide Sécurité Serverless : Lambda Functions et Protection CNAPP Cloud-Native Application Protection Platform Kubernetes Security : RBAC et Network Policies 2026 GCP Security Command Center : Audit et Durcissement Azure Defender for Cloud : Guide Configuration 2026 AWS Security : Les 20 Services Sécurité Essentiels Sécuriser une Architecture Multi-Cloud AWS et Azure

Retro-Ingenierie

18 articles
Frida et DynamoRIO : Instrumentation Binaire Avancée 2026 Symbolic Execution : Angr, Triton et Découverte d'Exploits Analyse Mémoire Forensique : Volatility pour Malware Analyse de Shellcode : Techniques de Rétro-Ingénierie Rétro-Ingénierie de C2 : Cobalt Strike et Brute Ratel Anti-Analyse Malware : Techniques et Contournements Analyse de Stealers : RedLine, Raccoon, Lumma 2026 Unpacking Malware Avancé : Techniques et Outils 2026 Rétro-Ingénierie de Ransomware : Analyse Technique Analyse Dynamique de Malware Avancée : Sandbox Expert Anti-Rétro-Ingénierie APT - Techniques d'Évasion Avancées Disséquer l'Obscurité : Techniques Avancées de Déobfuscation IA Frameworks pour l'Analyse de Malwares - Deep Learning Malwares Mobiles & IA - Rétro-Ingénierie Cross-Platform Chasse aux Fantômes : Rétro-Ingénierie Ghidra : Guide de Reverse Engineering pour Débutants Fileless Malware : Analyse, Détection et Investigation Reverse Engineering .NET : Décompilation, Analyse et

News

202 articles
Microsoft force la mise à jour vers Windows 11 25H2 sur les PC non gérés Affinity : une fuite de données expose 175 000 utilisateurs du forum Axios npm piraté : la Corée du Nord derrière l attaque supply chain React2Shell : 766 serveurs Next.js compromis, credentials volés Drift Protocol : hack à 285 M$ attribué à la Corée du Nord Cisco IMC : faille critique CVSS 9.8 permet un accès admin NoVoice : un rootkit Android caché dans 50 apps du Play Store Apple étend iOS 18.7.7 pour contrer l'exploit DarkSword Fortinet : faille critique FortiClient EMS exploitée activement Slack déploie 30 fonctionnalités IA et devient un agent autonome Commission européenne hackée via Trivy : 30 entités UE exposées BrowserGate : LinkedIn scanne vos extensions de navigateur en secret CVE-2026-0625 : zero-day critique dans les routeurs D-Link EOL GlassWorm : 72 extensions Open VSX piégées ciblent les développeurs CVE-2026-5281 : zero-day Chrome WebGPU exploité activement Le CMA britannique lance une enquête sur les licences cloud Microsoft Google NotebookLM passe à Gemini 2.5 Flash pour le raisonnement OpenAI teste des Skills pour ChatGPT, inspirées de Claude Faille critique Fortinet CVE-2026-32756 : exploitation active Akira Ransomware cible les ESXi via une faille vCenter inédite Microsoft lance Copilot Security Agents pour automatiser le SOC Claude 4 Opus d Anthropic : benchmark et implications sécurité NIS 2 : Premières Sanctions ANSSI en France 2026 Rebellions lève 400 M$ pour défier Nvidia sur les puces IA Exchange Online : Microsoft peine à résoudre des pannes persistantes TridentLocker frappe Sedgwick, sous-traitant du gouvernement US Hims & Hers : ShinyHunters vole des millions de tickets Zendesk Qilin revendique le vol de données du parti allemand Die Linke Interlock exploite un zero-day Cisco FMC CVSS 10 depuis janvier SparkCat : un malware vole les cryptos depuis les stores mobiles Microsoft lance ses propres modèles IA pour défier OpenAI Fuite Claude Code : des dépôts GitHub piégés diffusent Vidar PTC Windchill : la police allemande réveille les admins GitHub Copilot entraîne ses IA sur vos données dès le 24 285 M$ volés en 12 minutes par des hackers nord-coréens 766 serveurs Next.js compromis par vol de credentials une faille CVSS 9.8 permet le reset des mots de passe admin Cisco corrige deux failles critiques CVSS 9.8 dans IMC et Le FBI alerte sur les risques des applications mobiles ShareFile : deux failles chaînées permettent une RCE sans NoVoice : un malware Android sur Google Play vole les un exploit kit iOS cible WebKit et le kernel Apple Microsoft alerte sur une campagne VBS avec bypass UAC TrueChaos : un APT chinois exploite TrueConf pour cibler Microsoft lance Copilot Wave 3 et Agent 365 pour l'ère UAC-0255 usurpe le CERT-UA et diffuse le RAT AGEWHEEZE Chrome : Google corrige un 4e zero-day exploité en 2026 L'Iran relance Pay2Key avec des pseudo-ransomwares TeamPCP compromet des environnements cloud via des Le CMA ouvre une enquête sur Microsoft pour ses licences VMware Aria Operations : RCE critique exploitée activement Cisco SD-WAN : un zero-day CVSS 10 exploité depuis trois ans Citrix NetScaler : faille critique CVSS 9.3 exploitée Databricks lance Lakewatch, un SIEM dopé à l'IA générative Microsoft enchaîne les correctifs d'urgence Windows en 2026 Axios piraté : un RAT distribué via npm à 100 millions CareCloud Breach : Dossiers Patients Exposés en 2026 le malware IA qui vole vos identifiants navigateur ChatGPT : une faille permettait l'exfiltration de données LexisNexis piraté : 400 000 profils cloud exposés via ShinyHunters vole 350 Go de données à la Commission Aflac notifie 22 millions de clients après une cyberattaque CTRL : toolkit RAT russe ciblant les entreprises via RDP macOS Tahoe 26.4 : Apple bloque les attaques ClickFix 10 561 failles détectées dans 1,2 million de commits GitHub : de fausses alertes VS Code propagent un malware Microsoft retire la mise à jour KB5079391 après des Le DoJ démantèle des botnets IoT derrière le DDoS record FortiGate : campagne active de vol de credentials ciblant CISA alerte sur une RCE exploitée, 24 700 instances exposées CVE-2026-20131 : Interlock exploite un zero-day Cisco FMC NIST renouvelle son guide de sécurité DNS après douze ans Handala pirate la messagerie du directeur du FBI Kash Patel Infinity Stealer : un nouveau malware cible macOS via Windows 11 : Microsoft publie un correctif d'urgence le fossé des compétences se creuse entre experts et novices Ubiquiti UniFi : faille CVSS 10 expose 29 000 équipements CVE-2026-21385 : Qualcomm corrige un zero-day Android CVE-2026-0625 : zero-day exploité sur routeurs D-Link Google corrige deux zero-days Skia et V8 exploités Mistral lance Voxtral TTS, modèle vocal open source à 4B GitHub lance la détection IA pour sécuriser le code source CVE-2026-3055 : Citrix NetScaler sous reconnaissance active Crunchyroll piraté : 6,8 millions de comptes compromis TeamPCP piège le SDK Telnyx sur PyPI via stéganographie WAV CVE-2025-53521 : F5 BIG-IP exploité, CISA exige un patch BlackCat : deux experts cybersécurité plaident coupable CVE-2026-32746 : RCE root non authentifié dans Telnetd APT28 exploite un 0-day MSHTML avant le Patch Tuesday Red Menshen : BPFDoor espionne les télécoms depuis 2021 Anthropic : la justice américaine bloque le ban de Trump Commission européenne : 350 Go volés via un cloud AWS Bearlyfy frappe 70 entreprises russes avec GenieLocker LangChain et LangGraph : trois failles critiques révélées PolyShell : 57 % des boutiques Magento vulnérables attaquées CVE-2026-33017 Langflow : RCE non authentifié exploité Qilin cible Malaysia Airlines : données passagers volées Conduent : brèche SafePay expose 25 millions d'Américains Mistral Small 4 : un seul modèle MoE remplace trois IA PolyShell : skimmer WebRTC vole 56 % des boutiques Magento CanisterWorm : TeamPCP infecte Trivy et 66 packages npm GlassWorm utilise Solana comme C2 pour son RAT furtif Medusa Ransomware : 9 jours hors-ligne pour un hôpital US Mandiant M-Trends 2026 : accès initial cédé en 22 secondes CVE-2026-20131 Cisco FMC : CVSS 10.0, hôpitaux visés CERTFR-2026-ALE-003 : ANSSI alerte sur les messageries Opération Checkmate : BlackSuit ransomware démantélé LiteLLM piraté : attaque supply chain PyPI TeamPCP EvilTokens PhaaS : 340 organisations M365 touchées Slopoly : Hive0163 déploie un malware généré par IA FCC interdit l'import de routeurs étrangers aux USA Silver Fox APT : espionnage et cybercrime ciblant l Asie Firefox 149 intègre un VPN gratuit et le Split View CVE-2026-32746 : RCE root non authentifié, GNU Telnetd CVE-2026-22557 Ubiquiti UniFi CVSS 10.0, 87 000 exposés TELUS Digital : ShinyHunters et le Vol de 1 PO de Data CVE-2025-32975 : Quest KACE SMA CVSS 10.0 exploité NVIDIA Agent Toolkit : IA autonome sécurisée en prod CVE-2026-3055 Citrix NetScaler : fuite de tokens SAML Crunchyroll confirme une fuite touchant 6,8 M d'utilisateurs Tycoon 2FA démantelé : Europol met fin au PhaaS MFA bypass TeamPCP étend son attaque supply chain à Checkmarx KICS CVE-2026-33017 Langflow : RCE exploité 20h après disclosure Stryker : le wiper iranien Handala détruit 80 000 terminaux Zero-Day CVSS 10.0 PTC Windchill : webshells en production Un hacker russe condamné à 81 mois pour ransomware La Corée du Nord piège les devs crypto via VS Code CMA UK : décision imminente contre AWS et Microsoft Moscou Usurpe Signal pour Cibler Officiels et Journalistes Microsoft Corrige en Urgence son Patch Tuesday Cassé GlassWorm Piège 72 Extensions VSCode pour Voler des Secrets PhantomRaven : Campagne npm Cible les Secrets CI/CD VMware Aria Operations CVE-2026-22719 : CISA KEV RCE Cisco FMC CVE-2026-20131 : Interlock RCE Root Actif DarkSword : exploit iOS zero-day ciblant les iPhones Le DoJ démantèle 4 botnets IoT au record de 31 Tbps n8n : 4 Failles RCE Critiques, 24 700 Serveurs Exposés Trivy : Attaque Supply Chain via GitHub Actions 2026 Meta : Agent IA Autonome Déclenche un Incident Critique Mistral Small 4 : Le Modèle Open Source 119B Tout-en-Un CVE-2026-21992 : Oracle Identity Manager RCE CVSS 9.8 Malaysia Airlines : le Groupe Quilin Exfiltre les Données Marquis Financial : 672 000 Victimes et Données Bancaires CVE-2025-68613 n8n : CISA KEV, 24 700 instances RCE exposées Navia Benefit Solutions : 2,7M dossiers santé exposés Opération Alice : 373 000 sites dark web démantelés CVE-2026-32746 : RCE Root dans GNU Telnetd CVSS 9.8 APT28 BadPaw et MeowMeow : Nouvelles Armes Contre l'Ukraine APT41 Silver Dragon : Espionnage via Google Drive C2 CVE-2026-20131 : Cisco FMC Zero-Day CVSS 10 Exploité CVE-2026-20963 SharePoint RCE Exploité : Alerte CISA KEV CVE-2026-33017 Langflow RCE : Exploité en Moins de 20h Iran-Handala : Wiper sur Stryker, FBI Saisit les Domaines CERT-FR : Messageries Instantanées Détournées Sans Malware TELUS Digital : ShinyHunters Vole 1 Pétaoctet de Données GLM-5 : Zhipu AI Lance un Modele 744B Parametres en 2026 Kali Linux 2025.4 : Passage a Wayland par Defaut en 2026 RSAC 2026 : Les Tendances Cybersecurite de l'Annee Patch Tuesday Fevrier 2026 : 4 Zero-Days Critiques Google Finalise l'Acquisition de Wiz pour 32 Milliards Gemini 3.1 Pro : 1 Million de Tokens en Contexte en 2026 Entra ID : Jailbreak de l'Authenticator Decouvert en 2026 FIRST Prevoit 50 000 CVE Publiees en 2026 : Guide Complet Entra ID : Migration Obligatoire vers DigiCert G2 en 2026 Anthropic Lance Cowork : Claude Sans Code pour Tous FCC Alerte : Ransomware Quadruple Depuis 2021 en 2026 Qilin Ransomware Domine le Paysage des Menaces Q1 2026 McDonald's India : Everest Ransomware Frappe Fort en 2026 CNIL France Travail : Sanction de 5 Millions EUR en 2026 CNIL : Free Mobile Sanctionne a 42 Millions EUR en 2026 Patch Tuesday Janvier 2026 : 112 CVE Corrigees en 2026 Microsoft Publie un Guide de Durcissement AD Complet Kali Linux 2025.3 : 15 Nouveaux Outils de Pentest en 2026 Cegedim Sante : 15 Millions de Patients Exposes en 2026 Kubernetes 1.35 : User Namespaces en Production en 2026 CNIL : Amende de 3,5M EUR pour Partage Illegal de Donnees SoundCloud et Inotiv : Double Fuite de Donnees en 2026 Leroy Merlin : Fuite de Donnees de 2 Millions de Clients GPT-5.2 : OpenAI Repousse les Limites a 400K Tokens React2Shell : RCE Critique CVSS 10 dans React Native BadSuccessor : Nouvelle Faille Critique Windows AD NIS 2 : l'Allemagne Adopte sa Loi de Transposition Shai-Hulud 2 : Supply Chain NPM Compromis a Grande Echelle Llama 4 Scout et Maverick : Meta Passe au Multimodal Microsoft Renforce la Protection CSP dans Entra ID Attaques Active Directory en Hausse de 42% en 2025 CVE-2025-20337 : RCE Critique dans Cisco ISE : Guide Complet Claude 4.5 : Anthropic Mise sur les Agents IA en 2026 Gemini 3 : Google Bat Tous les Benchmarks LLM en 2026 GPT-5.1 : OpenAI Lance son Modele le Plus Puissant ISO 27001:2022 : Fin de Transition en Octobre 2025 DoorDash : Fuite Massive via Social Engineering en 2026 OpenAI Renonce a l'Open Source pour ses Modeles IA SimonMed : Medusa Ransomware Expose 500K Patients en 2026 Ingénierie Sociale par IA : Menace Cyber n°1 en 2025 Failles de Sécurité Critiques Découvertes dans l'App Cisco Lance un Outil pour Sécuriser les Déploiements Faille Microsoft 365 Copilot Permet l'Exfiltration de Microsoft Déploie un Fix d'Urgence pour le Bug en 2026 Crimson Collective Exfiltre 12 To via F5 BIG-IP en 2026 Oracle EBS : Zero-Day RCE Exploite en Production en 2026 CVE-2025-64446 : Faille Critique FortiWeb CVSS 9.8

Livres Blancs

14 articles
Livres Blancs Gratuits
Voir tous →

Téléchargement gratuit · Aucune inscription requise

Tous les livres blancs
Checklists Sécurité — Audit & Durcissement
Formats disponibles
📄 PDF 📊 Excel 🌐 Web

11 checklists professionnelles couvrant 2 200+ points de contrôle. Téléchargement gratuit, aucune inscription.

Checklist Sécurité ANC

📝 Checklist Sécurité Audit WordPress

Audit WordPress : wp-config, plugins, thèmes, base de données, .htaccess, SSL/TLS, WAF, sauvegardes et monitoring.

24 sections 29 contrôles 27158 mots PDF + Excel

Checklist d'audit sécurité WordPress couvrant la configuration wp-config.php, la gestion des plugins et thèmes, le durcissement de la base de données, les règles .htaccess, la configuration SSL/TLS, le déploiement WAF, les stratégies de sauvegarde et le monitoring en continu.

📑 Table des matières

CHECKLIST SÉCURITÉ AUDIT SITE WEB WORDPRESS

AYI NEDJIMI CONSULTANTS (ANC)


Version : 1.0
Date : 04/04/2026
Classification : CONFIDENTIEL
Auteur : AYI NEDJIMI CONSULTANTS
Type d’audit : Audit de Sécurité Site Web WordPress


📋 LÉGENDE

Statut d’Évaluation

  • Conforme - Le contrôle est correctement implémenté
  • Non-conforme - Le contrôle n’est pas implémenté ou défaillant
  • ⚠️ Partiellement conforme - Le contrôle est partiellement implémenté
  • N/A Non applicable - Le contrôle ne s’applique pas au contexte

Niveau de Criticité

  • 🔴 Critique - Risque très élevé, correction immédiate requise
  • 🟠 Élevé - Risque élevé, correction prioritaire
  • 🟡 Moyen - Risque modéré, correction à planifier
  • 🟢 Faible - Risque faible, amélioration recommandée

⚡ MODE DÉCOUVERTE RAPIDE — 15 QUESTIONS CLÉS

Cette section permet une évaluation rapide des points critiques de sécurité WordPress en 15 minutes.

DR.1 — Version WordPress Actuelle

Question : La version WordPress est-elle à jour (< 30 jours) ? Vérification :

wpscan --url https://example.com --enumerate vp
wp core check-update

Statut : ☐ ✅ ☐ ❌ ☐ ⚠️ ☐ N/A

DR.2 — Plugins et Thèmes à Jour

Question : Tous les plugins et thèmes sont-ils à jour et exempts de vulnérabilités connues ? Vérification :

wpscan --url https://example.com --enumerate vp,vt --plugins-detection aggressive
wp plugin list --update=available

Statut : ☐ ✅ ☐ ❌ ☐ ⚠️ ☐ N/A

DR.3 — Pare-feu Applicatif (WAF)

Question : Un WAF est-il configuré et actif (Wordfence, Sucuri, Cloudflare) ? Vérification : Test d’injection SQL basique, vérification headers Statut : ☐ ✅ ☐ ❌ ☐ ⚠️ ☐ N/A

DR.4 — Sauvegardes Automatisées

Question : Des sauvegardes automatisées sont-elles configurées et testées ? Vérification : Vérification plugin backup, planification, stockage externe Statut : ☐ ✅ ☐ ❌ ☐ ⚠️ ☐ N/A

DR.5 — Authentification Multi-Facteurs (2FA)

Question : La 2FA est-elle activée pour tous les comptes administrateurs ? Vérification : Test connexion admin, plugin 2FA installé Statut : ☐ ✅ ☐ ❌ ☐ ⚠️ ☐ N/A

DR.6 — SSL/TLS et HTTPS Forcé

Question : Le site utilise-t-il exclusivement HTTPS avec un certificat valide ? Vérification :

curl -s -I https://example.com | grep -i strict-transport-security
openssl s_client -connect example.com:443 -servername example.com

Statut : ☐ ✅ ☐ ❌ ☐ ⚠️ ☐ N/A

DR.7 — XML-RPC Désactivé

Question : XML-RPC est-il désactivé pour prévenir les attaques par déni de service ? Vérification :

curl -X POST https://example.com/xmlrpc.php -d "<?xml version='1.0'?><methodCall><methodName>system.listMethods</methodName></methodCall>"

Statut : ☐ ✅ ☐ ❌ ☐ ⚠️ ☐ N/A

DR.8 — REST API Sécurisée

Question : L’API REST WordPress est-elle restreinte et authentifiée ? Vérification :

curl https://example.com/wp-json/wp/v2/users/
curl https://example.com/wp-json/wp/v2/posts/

Statut : ☐ ✅ ☐ ❌ ☐ ⚠️ ☐ N/A

DR.9 — Permissions Fichiers Correctes

Question : Les permissions fichiers suivent-elles les recommandations (644/755) ? Vérification : wp-config.php (600), .htaccess (644), répertoires (755) Statut : ☐ ✅ ☐ ❌ ☐ ⚠️ ☐ N/A

DR.10 — wp-config.php Protégé

Question : Le fichier wp-config.php est-il protégé contre l’accès web direct ? Vérification :

curl -s https://example.com/wp-config.php
curl -s https://example.com/wp-config.php.bak

Statut : ☐ ✅ ☐ ❌ ☐ ⚠️ ☐ N/A

DR.11 — Utilisateurs Administrateurs Minimaux

Question : Le nombre d’utilisateurs admin est-il minimal et justifié ? Vérification :

wp user list --role=administrator
wpscan --url https://example.com --enumerate u

Statut : ☐ ✅ ☐ ❌ ☐ ⚠️ ☐ N/A

DR.12 — Headers de Sécurité HTTP

Question : Les headers de sécurité essentiels sont-ils configurés ? Vérification :

curl -s -I https://example.com | grep -E "X-Frame-Options|X-Content-Type-Options|Content-Security-Policy"

Statut : ☐ ✅ ☐ ❌ ☐ ⚠️ ☐ N/A

DR.13 — Base de Données Sécurisée

Question : La base de données utilise-t-elle un préfixe personnalisé et des privilèges minimaux ? Vérification : Inspection wp-config.php, test connexion DB Statut : ☐ ✅ ☐ ❌ ☐ ⚠️ ☐ N/A

DR.14 — Monitoring et Journalisation

Question : Un système de monitoring des activités suspectes est-il en place ? Vérification : Plugin d’audit log, alertes de sécurité configurées Statut : ☐ ✅ ☐ ❌ ☐ ⚠️ ☐ N/A

DR.15 — Plan de Réponse aux Incidents

Question : Un plan de réponse aux incidents de sécurité est-il documenté ? Vérification : Documentation disponible, contacts d’urgence définis Statut : ☐ ✅ ☐ ❌ ☐ ⚠️ ☐ N/A


📊 INFORMATIONS CLIENT

Informations Générales

  • URL du site : ________________________________
  • Environnement : ☐ Production ☐ Staging ☐ Développement
  • Date d’audit : ________________________________
  • Auditeur : ____________________________________

Configuration Technique

  • Version WordPress : ___________________________
  • Version PHP : _________________________________
  • Version MySQL/MariaDB : _______________________
  • Serveur Web : ☐ Apache ☐ Nginx ☐ LiteSpeed ☐ IIS
  • Hébergeur : ___________________________________
  • Type d’hébergement : ☐ Shared ☐ VPS ☐ Dédié ☐ Cloud ☐ Infogéré

Plugins et Thèmes

  • Nombre de plugins actifs : ____________________
  • Nombre de plugins inactifs : ___________________
  • Thème actif : _________________________________
  • Child theme utilisé : ☐ Oui ☐ Non
  • Thèmes inactifs : _____________________________

Utilisateurs et Trafic

  • Nombre d’administrateurs : ____________________
  • Nombre total d’utilisateurs : __________________
  • Trafic mensuel (visiteurs uniques) : ___________
  • Pics de trafic identifiés : ____________________

Sécurité Existante

  • Plugin de sécurité installé : ☐ Wordfence ☐ Sucuri ☐ iThemes Security ☐ All In One WP Security ☐ Autre : ______________
  • WAF externe : ☐ Cloudflare ☐ Sucuri ☐ AWS WAF ☐ Autre : ______________
  • Service de backup : ☐ UpdraftPlus ☐ BackWPup ☐ VaultPress ☐ Hébergeur ☐ Autre : ______________

🛡️ SECTIONS D’AUDIT DÉTAILLÉES

S1 — INSTALLATION & CONFIGURATION DE BASE (20 contrôles)

Cette section couvre les aspects fondamentaux de l’installation et de la configuration sécurisée de WordPress.

1.1.1 — Version WordPress Actuelle et Supportée

Niveau : 🔴
Référence : OWASP A06 / CIS WordPress 1.1 / NIST 800-53 SI-2
MITRE ATT&CK : T1190

Description : WordPress doit être maintenu à jour avec la dernière version stable. Les versions obsolètes contiennent des vulnérabilités critiques exploitées activement par les attaquants. Une mise à jour dans les 30 jours suivant la publication est recommandée.

Vérification :

# Vérification avec WPScan
wpscan --url https://example.com --enumerate vp --no-banner
# Vérification via wp-cli
wp core check-update
wp core version
# Vérification manuelle
curl -s https://example.com/ | grep -o 'content="WordPress [0-9.]*"'

Remédiation :

  1. Effectuer une sauvegarde complète avant mise à jour
  2. Tester en environnement de staging
wp core update
wp core update-db
  1. Activer les mises à jour automatiques mineures :
// Dans wp-config.php
define( 'WP_AUTO_UPDATE_CORE', 'minor' );

Valeur par défaut : Mises à jour automatiques mineures activées depuis WordPress 3.7


1.1.2 — Version PHP Supportée et Sécurisée

Niveau : 🔴
Référence : OWASP A06 / CIS WordPress 1.2 / NIST 800-53 SI-2
MITRE ATT&CK : T1190

Description : PHP doit être maintenu dans une version supportée officiellement (PHP 8.0+). Les versions obsolètes de PHP présentent des vulnérabilités de sécurité critiques et des problèmes de performance.

Vérification :

# Via wp-cli
wp eval "echo PHP_VERSION;"
# Via WPScan
wpscan --url https://example.com --enumerate vp --no-banner | grep -i php
# Test direct
curl -s https://example.com/wp-content/themes/twentytwentyone/index.php

Remédiation :

  1. Mettre à niveau vers PHP 8.1+ minimum
  2. Configurer php.ini sécurisé :
expose_php = Off
allow_url_fopen = Off
allow_url_include = Off
display_errors = Off
log_errors = On

Valeur par défaut : Dépend de l’hébergeur, souvent PHP 7.4 ou antérieur


1.1.3 — Configuration wp-config.php Sécurisée

Niveau : 🔴
Référence : OWASP A05 / CIS WordPress 2.1 / NIST 800-53 AC-3
MITRE ATT&CK : T1005

Description : Le fichier wp-config.php contient les informations de connexion à la base de données et les clés de sécurité. Il doit être protégé contre l’accès web direct et configuré avec les bonnes pratiques de sécurité.

Vérification :

# Test accès direct
curl -s https://example.com/wp-config.php
curl -s https://example.com/wp-config.php.bak
# Vérification permissions
ls -la wp-config.php
# Vérification contenu (sur serveur)
grep -E "(DB_PASSWORD|AUTH_KEY)" wp-config.php

Remédiation :

  1. Déplacer wp-config.php hors de web root ou protéger via .htaccess :
<Files wp-config.php>
order allow,deny
deny from all
</Files>
  1. Définir les permissions appropriées :
chmod 600 wp-config.php
  1. Ajouter les constantes de sécurité essentielles

Valeur par défaut : Permissions 644, souvent accessible via web


1.1.4 — Clés de Sécurité SALT Configurées

Niveau : 🟠
Référence : OWASP A02 / CIS WordPress 2.2 / NIST 800-53 SC-12
MITRE ATT&CK : T1552

Description : Les clés SALT renforcent la sécurité des cookies et des sessions utilisateurs. Elles doivent être uniques, complexes et changées régulièrement pour prévenir les attaques de décryptage.

Vérification :

# Vérification présence des clés
grep -E "(AUTH_KEY|SECURE_AUTH_KEY|LOGGED_IN_KEY|NONCE_KEY)" wp-config.php
# Test avec wp-cli
wp config get AUTH_KEY
wp config get SECURE_AUTH_KEY

Remédiation :

  1. Générer de nouvelles clés via https://api.wordpress.org/secret-key/1.1/salt/
  2. Ajouter dans wp-config.php :
define('AUTH_KEY',         'votre-clé-unique-ici');
define('SECURE_AUTH_KEY',  'votre-clé-unique-ici');
define('LOGGED_IN_KEY',    'votre-clé-unique-ici');
define('NONCE_KEY',        'votre-clé-unique-ici');
define('AUTH_SALT',        'votre-clé-unique-ici');
define('SECURE_AUTH_SALT', 'votre-clé-unique-ici');
define('LOGGED_IN_SALT',   'votre-clé-unique-ici');
define('NONCE_SALT',       'votre-clé-unique-ici');
  1. Renouveler les clés tous les 6 mois

Valeur par défaut : Clés par défaut ou vides lors de l’installation


1.1.5 — Préfixe Table Base de Données Personnalisé

Niveau : 🟡
Référence : OWASP A03 / CIS WordPress 2.3 / NIST 800-53 SC-28
MITRE ATT&CK : T1190

Description : Le préfixe par défaut “wp_” facilite les attaques d’injection SQL automatisées. Un préfixe personnalisé ajoute une couche d’obscurité contre les attaques génériques.

Vérification :

# Via wp-config.php
grep "table_prefix" wp-config.php
# Via wp-cli
wp config get table_prefix
# Test base de données
mysql -e "SHOW TABLES LIKE 'wp_%'" database_name

Remédiation :

  1. Avant installation, modifier wp-config.php :
$table_prefix = 'xyz123_';
  1. Pour une installation existante, utiliser un plugin ou script :
wp search-replace "wp_" "xyz123_" --dry-run
wp db export backup.sql
# Puis renommer les tables manuellement

Valeur par défaut : wp_


1.1.6 — Mode Debug Désactivé en Production

Niveau : 🟠
Référence : OWASP A09 / CIS WordPress 2.4 / NIST 800-53 SI-11
MITRE ATT&CK : T1005

Description : Le mode debug révèle des informations sensibles sur la structure du site et les erreurs système. Il doit être désactivé en production pour éviter la divulgation d’informations.

Vérification :

# Vérification wp-config.php
grep "WP_DEBUG" wp-config.php
# Test via wp-cli
wp config get WP_DEBUG
# Forcer une erreur pour tester
curl -s https://example.com/?debug=1

Remédiation :

  1. Dans wp-config.php :
define('WP_DEBUG', false);
define('WP_DEBUG_LOG', false);
define('WP_DEBUG_DISPLAY', false);
define('SCRIPT_DEBUG', false);
  1. Supprimer le fichier debug.log existant :
rm wp-content/debug.log

Valeur par défaut : WP_DEBUG false


1.1.7 — Édition de Fichiers Désactivée

Niveau : 🟠
Référence : OWASP A01 / CIS WordPress 2.5 / NIST 800-53 AC-6
MITRE ATT&CK : T1105

Description : L’éditeur de fichiers intégré à WordPress permet de modifier les thèmes et plugins depuis l’interface d’administration. Cette fonctionnalité représente un risque majeur en cas de compromission d’un compte administrateur.

Vérification :

# Vérification wp-config.php
grep "DISALLOW_FILE_EDIT" wp-config.php
# Test interface admin
# Aller dans Apparence > Éditeur de thème

Remédiation :

  1. Ajouter dans wp-config.php :
define('DISALLOW_FILE_EDIT', true);
  1. Vérifier que le menu “Éditeur” disparaît de l’admin

Valeur par défaut : Édition activée


1.1.8 — Installation de Plugins/Thèmes Contrôlée

Niveau : 🟠
Référence : OWASP A01 / CIS WordPress 2.6 / NIST 800-53 CM-7
MITRE ATT&CK : T1505

Description : Restreindre l’installation de plugins et thèmes depuis l’interface d’administration réduit les risques d’installation de code malveillant en cas de compromission.

Vérification :

# Vérification wp-config.php
grep -E "(DISALLOW_FILE_MODS|WP_FILESYSTEM_METHOD)" wp-config.php
# Test interface admin - tentative d'installation

Remédiation :

  1. Pour désactiver complètement :
define('DISALLOW_FILE_MODS', true);
  1. Pour contrôler les permissions :
define('FS_METHOD', 'direct');
define('WP_FILESYSTEM_METHOD', 'direct');

Valeur par défaut : Installation libre pour les administrateurs


1.1.9 — Révisions de Posts Limitées

Niveau : 🟢
Référence : CIS WordPress 2.7 / NIST 800-53 SC-28
MITRE ATT&CK : T1005

Description : WordPress conserve par défaut un historique illimité des révisions d’articles. Limiter ce nombre évite l’accumulation de données sensibles et améliore les performances.

Vérification :

# Vérification wp-config.php
grep "WP_POST_REVISIONS" wp-config.php
# Via wp-cli
wp config get WP_POST_REVISIONS
# Compter les révisions existantes
wp post list --post_type=revision --format=count

Remédiation :

  1. Limiter les révisions dans wp-config.php :
define('WP_POST_REVISIONS', 3);
  1. Nettoyer les révisions existantes :
wp post delete $(wp post list --post_type=revision --format=ids) --force

Valeur par défaut : Révisions illimitées


1.1.10 — Corbeille Automatique Configurée

Niveau : 🟢
Référence : CIS WordPress 2.8 / NIST 800-53 SC-28
MITRE ATT&CK : T1005

Description : Les éléments supprimés restent dans la corbeille WordPress indéfiniment par défaut. Configurer une purge automatique évite l’accumulation de contenu supprimé potentiellement sensible.

Vérification :

# Vérification wp-config.php
grep "EMPTY_TRASH_DAYS" wp-config.php
# Vérifier contenu corbeille
wp post list --post_status=trash --format=count

Remédiation :

  1. Configurer la purge automatique :
define('EMPTY_TRASH_DAYS', 7);
  1. Purger manuellement la corbeille :
wp post delete $(wp post list --post_status=trash --format=ids) --force

Valeur par défaut : 30 jours


1.1.11 — Version MySQL/MariaDB Supportée

Niveau : ��
Référence : OWASP A06 / CIS WordPress 1.3 / NIST 800-53 SI-2
MITRE ATT&CK : T1190

Description : La base de données doit utiliser une version supportée de MySQL (8.0+) ou MariaDB (10.3+). Les versions obsolètes contiennent des vulnérabilités critiques et manquent de fonctionnalités de sécurité modernes.

Vérification :

# Via wp-cli
wp db version
# Connexion directe
mysql -V
# Via PHP
wp eval "echo 'MySQL: ' . $wpdb->db_version();"

Remédiation :

  1. Mettre à niveau vers MySQL 8.0+ ou MariaDB 10.5+
  2. Vérifier la compatibilité WordPress après migration
  3. Optimiser les paramètres de sécurité MySQL

Valeur par défaut : Dépend de l’hébergeur


1.1.12 — Constantes de Sécurité Avancées

Niveau : 🟡
Référence : OWASP A05 / CIS WordPress 2.9 / NIST 800-53 SC-8
MITRE ATT&CK : T1040

Description : WordPress offre plusieurs constantes pour renforcer la sécurité : forcer HTTPS, sécuriser les cookies, contrôler les redirections. Ces configurations durcissent la sécurité globale.

Vérification :

# Vérifier les constantes de sécurité
grep -E "(FORCE_SSL_ADMIN|COOKIE_DOMAIN|WP_HTTP_BLOCK_EXTERNAL)" wp-config.php

Remédiation :

  1. Ajouter les constantes de sécurité :
define('FORCE_SSL_ADMIN', true);
define('COOKIE_DOMAIN', '.example.com');
define('COOKIEHASH', md5('example.com'));
define('WP_HTTP_BLOCK_EXTERNAL', true);
define('WP_ACCESSIBLE_HOSTS', 'api.wordpress.org,*.github.com');

Valeur par défaut : Non configurées


1.1.13 — Répertoire wp-content Personnalisé

Niveau : 🟡
Référence : CIS WordPress 2.10 / NIST 800-53 SC-28
MITRE ATT&CK : T1083

Description : Personnaliser le répertoire wp-content ajoute une couche d’obscurité et complique la reconnaissance automatisée de l’architecture WordPress par les attaquants.

Vérification :

# Vérification wp-config.php
grep -E "(WP_CONTENT_DIR|WP_CONTENT_URL)" wp-config.php
# Structure répertoires
ls -la | grep -v wp-content

Remédiation :

  1. Avant installation, dans wp-config.php :
define('WP_CONTENT_DIR', ABSPATH . 'assets/');
define('WP_CONTENT_URL', 'https://example.com/assets/');
  1. Déplacer le répertoire wp-content vers assets/
  2. Mettre à jour les liens dans la base de données

Valeur par défaut : wp-content/


1.1.14 — URL d’Administration Personnalisée

Niveau : 🟡
Référence : CIS WordPress 2.11 / NIST 800-53 SC-28
MITRE ATT&CK : T1083

Description : Modifier l’URL d’accès à l’administration (/wp-admin/) réduit l’exposition aux attaques par force brute automatisées qui ciblent l’URL standard.

Vérification :

# Test accès standard
curl -s -I https://example.com/wp-admin/
curl -s -I https://example.com/wp-login.php
# Vérifier plugin de sécurité installé
wp plugin list | grep -i security

Remédiation :

  1. Utiliser un plugin comme “WPS Hide Login” :
wp plugin install wps-hide-login --activate
wp option update whl_page "admin-secure-$(openssl rand -hex 6)"
  1. Ou via .htaccess (méthode avancée) :
RewriteRule ^admin-secret/?$ /wp-admin/ [L]
RewriteRule ^wp-admin/$ /404/ [L]

Valeur par défaut : /wp-admin/ et /wp-login.php


1.1.15 — Suppression Fichiers par Défaut

Niveau : 🟡
Référence : OWASP A09 / CIS WordPress 2.12 / NIST 800-53 CM-7
MITRE ATT&CK : T1083

Description : WordPress installe des fichiers par défaut qui révèlent des informations sur la version et la configuration : readme.html, license.txt, wp-config-sample.php. Ces fichiers doivent être supprimés.

Vérification :

# Test présence fichiers par défaut
curl -s https://example.com/readme.html
curl -s https://example.com/license.txt
curl -s https://example.com/wp-config-sample.php
ls -la readme.html license.txt wp-config-sample.php

Remédiation :

  1. Supprimer les fichiers sensibles :
rm readme.html license.txt wp-config-sample.php
rm wp-admin/install.php wp-admin/upgrade.php
  1. Bloquer via .htaccess :
<FilesMatch "(readme|license|changelog|install)">
Order allow,deny
Deny from all
</FilesMatch>

Valeur par défaut : Fichiers présents après installation


1.1.16 — Configuration Memory Limit Appropriée

Niveau : 🟢
Référence : CIS WordPress 1.4 / NIST 800-53 SI-7
MITRE ATT&CK : T1498

Description : Une limite mémoire insuffisante peut causer des erreurs et des vulnérabilités. Une limite trop élevée peut permettre des attaques par déni de service. La valeur doit être équilibrée selon les besoins.

Vérification :

# Via wp-cli
wp eval "echo 'Memory Limit: ' . ini_get('memory_limit');"
# Via WPScan
wpscan --url https://example.com --enumerate vp | grep -i memory

Remédiation :

  1. Dans wp-config.php :
ini_set('memory_limit', '256M');
define('WP_MEMORY_LIMIT', '256M');
define('WP_MAX_MEMORY_LIMIT', '512M');
  1. Surveiller l’utilisation mémoire réelle

Valeur par défaut : 40M ou 128M selon la configuration


1.1.17 — Configuration Timezone Sécurisée

Niveau : 🟢
Référence : CIS WordPress 2.13 / NIST 800-53 AU-8
MITRE ATT&CK : T1070

Description : Un fuseau horaire correct est essentiel pour la synchronisation des logs, la planification des tâches et la corrélation d’événements de sécurité. Les timestamps incorrects compliquent l’analyse forensique.

Vérification :

# Via wp-cli
wp option get timezone_string
wp eval "echo date_default_timezone_get();"
# Interface admin
# Réglages > Général > Fuseau horaire

Remédiation :

  1. Configurer le fuseau horaire :
wp option update timezone_string "Europe/Paris"
  1. Dans wp-config.php :
date_default_timezone_set('Europe/Paris');

Valeur par défaut : UTC ou fuseau du serveur


1.1.18 — Limitation Taille Upload Sécurisée

Niveau : 🟡
Référence : OWASP A04 / CIS WordPress 2.14 / NIST 800-53 SI-10
MITRE ATT&CK : T1105

Description : Limiter la taille des fichiers uploadés prévient les attaques par déni de service et réduit les risques d’upload de fichiers malveillants volumineux.

Vérification :

# Via wp-cli
wp eval "echo 'Upload Max: ' . ini_get('upload_max_filesize');"
wp eval "echo 'Post Max: ' . ini_get('post_max_size');"
# Interface admin
# Médias > Ajouter

Remédiation :

  1. Dans wp-config.php :
ini_set('upload_max_filesize', '10M');
ini_set('post_max_size', '10M');
ini_set('max_execution_time', 60);
  1. Via .htaccess :
php_value upload_max_filesize 10M
php_value post_max_size 10M

Valeur par défaut : 2M à 32M selon l’hébergeur


1.1.19 — Configuration Cron Sécurisée

Niveau : 🟡
Référence : CIS WordPress 2.15 / NIST 800-53 CM-6
MITRE ATT&CK : T1053

Description : Le système cron WordPress (wp-cron) peut être exploité pour des attaques par déni de service. Le désactiver et utiliser le cron système améliore la sécurité et les performances.

Vérification :

# Vérifier wp-config.php
grep "DISABLE_WP_CRON" wp-config.php
# Tester wp-cron
curl https://example.com/wp-cron.php
wp cron event list

Remédiation :

  1. Désactiver wp-cron dans wp-config.php :
define('DISABLE_WP_CRON', true);
  1. Configurer cron système :
# Crontab
*/15 * * * * curl -s https://example.com/wp-cron.php >/dev/null 2>&1

Valeur par défaut : wp-cron activé


1.1.20 — Configuration Error Reporting Sécurisée

Niveau : 🟠
Référence : OWASP A09 / CIS WordPress 2.16 / NIST 800-53 SI-11
MITRE ATT&CK : T1005

Description : Les erreurs PHP affichées peuvent révéler des informations sensibles sur la structure du serveur et les chemins de fichiers. L’affichage doit être désactivé en production.

Vérification :

# Forcer une erreur PHP
curl -s "https://example.com/wp-content/themes/active-theme/functions.php"
# Vérifier configuration
wp eval "echo 'Display Errors: ' . ini_get('display_errors');"

Remédiation :

  1. Dans wp-config.php :
ini_set('display_errors', 0);
ini_set('log_errors', 1);
ini_set('error_log', ABSPATH . 'wp-content/debug.log');
  1. Protéger le fichier de log :
<Files debug.log>
Order allow,deny
Deny from all
</Files>

Valeur par défaut : Dépend de la configuration PHP


S2 — AUTHENTIFICATION & GESTION DES UTILISATEURS (25 contrôles)

Cette section traite de la sécurité des comptes utilisateurs, de l’authentification et des contrôles d’accès.

2.1.1 — Politique de Mots de Passe Forte

Niveau : 🔴
Référence : OWASP A07 / CIS WordPress 3.1 / NIST 800-53 IA-5
MITRE ATT&CK : T1110.001

Description : WordPress ne impose pas de politique de mots de passe par défaut. Des mots de passe faibles facilitent les attaques par force brute et par dictionnaire. Une politique stricte est essentielle pour la sécurité des comptes.

Vérification :

# Énumérer les utilisateurs
wp user list --field=user_login
wpscan --url https://example.com --enumerate u --no-banner
# Tester force brute (avec autorisation)
wp user check-password admin password123

Remédiation :

  1. Installer un plugin de politique de mots de passe :
wp plugin install force-strong-passwords --activate
  1. Ou ajouter dans functions.php :
function enforce_strong_passwords($errors, $update, $user) {
    $password = $_POST['pass1'];
    if (!empty($password) && strlen($password) < 12) {
        $errors->add('weak_password', 'Le mot de passe doit contenir au moins 12 caractères.');
    }
    return $errors;
}
add_action('user_profile_update_errors', 'enforce_strong_passwords', 10, 3);

Valeur par défaut : Aucune politique appliquée


2.1.2 — Authentification Multi-Facteurs (2FA/MFA)

Niveau : 🔴
Référence : OWASP A07 / CIS WordPress 3.2 / NIST 800-53 IA-2
MITRE ATT&CK : T1110

Description : L’authentification à deux facteurs est cruciale pour protéger les comptes administrateurs. Elle ajoute une couche de sécurité même en cas de compromission du mot de passe.

Vérification :

# Vérifier plugins 2FA installés
wp plugin list | grep -iE "(two|2fa|authenticator|otp)"
# Tester connexion admin sans 2FA
curl -d "log=admin&pwd=password" https://example.com/wp-login.php

Remédiation :

  1. Installer un plugin 2FA réputé :
wp plugin install two-factor --activate
# ou
wp plugin install google-authenticator --activate
# ou
wp plugin install wordfence --activate
  1. Configurer pour tous les administrateurs
  2. Forcer l’activation pour les rôles sensibles

Valeur par défaut : Non activée


2.1.3 — Limitation Tentatives de Connexion

Niveau : 🔴
Référence : OWASP A07 / CIS WordPress 3.3 / NIST 800-53 AC-7
MITRE ATT&CK : T1110.001

Description : WordPress permet un nombre illimité de tentatives de connexion par défaut, facilitant les attaques par force brute. Limiter les tentatives et implémenter un délai progressif est essentiel.

Vérification :

# Tester attaque force brute
curl -d "log=admin&pwd=wrong1" https://example.com/wp-login.php
curl -d "log=admin&pwd=wrong2" https://example.com/wp-login.php
curl -d "log=admin&pwd=wrong3" https://example.com/wp-login.php
# Vérifier si compte bloqué

Remédiation :

  1. Plugin de limitation des tentatives :
wp plugin install limit-login-attempts-reloaded --activate
wp option update limit_login_allowed_retries 3
wp option update limit_login_lockout_duration 1800
  1. Ou via Wordfence :
wp plugin install wordfence --activate

Valeur par défaut : Tentatives illimitées


2.1.4 — Protection reCAPTCHA

Niveau : 🟠
Référence : OWASP A07 / CIS WordPress 3.4 / NIST 800-53 SI-3
MITRE ATT&CK : T1110.003

Description : L’intégration de reCAPTCHA sur les formulaires de connexion, d’inscription et de contact prévient les attaques automatisées et le spam.

Vérification :

# Vérifier présence reCAPTCHA sur wp-login
curl -s https://example.com/wp-login.php | grep -i recaptcha
curl -s https://example.com/wp-login.php | grep -i "google.com/recaptcha"

Remédiation :

  1. Installer un plugin reCAPTCHA :
wp plugin install google-captcha --activate
  1. Configurer les clés API Google reCAPTCHA
  2. Activer sur : connexion, inscription, commentaires, contact

Valeur par défaut : Non configuré


2.1.5 — Gestion Roles Utilisateurs Restrictive

Niveau : 🟠
Référence : OWASP A01 / CIS WordPress 3.5 / NIST 800-53 AC-6
MITRE ATT&CK : T1078

Description : Appliquer le principe du moindre privilège en assignant les rôles minimaux nécessaires. Éviter la prolifération des comptes administrateurs et auditer régulièrement les permissions.

Vérification :

# Lister utilisateurs par rôle
wp user list --role=administrator --format=table
wp user list --role=editor --format=table
wp user list --format=table --fields=user_login,roles
# Énumération externe
wpscan --url https://example.com --enumerate u1-100 --no-banner

Remédiation :

  1. Auditer et réduire les administrateurs :
wp user set-role user2 editor
wp user set-role user3 author
  1. Créer des rôles personnalisés si nécessaire :
wp plugin install members --activate
  1. Supprimer les comptes inutiles :
wp user delete unused_user --reassign=1

Valeur par défaut : Rôle admin souvent sur-utilisé


2.1.6 — Prévention Énumération Utilisateurs

Niveau : 🟡
Référence : OWASP A01 / CIS WordPress 3.6 / NIST 800-53 SC-28
MITRE ATT&CK : T1087

Description : WordPress permet l’énumération des utilisateurs via diverses méthodes (?author=1, /wp-json/wp/v2/users/, etc.). Cette information facilite les attaques ciblées et doit être bloquée.

Vérification :

# Test énumération classique
curl -s "https://example.com/?author=1" | grep -o "author/[^/]*"
curl -s "https://example.com/wp-json/wp/v2/users/" | jq '.[].slug'
# Via WPScan
wpscan --url https://example.com --enumerate u --no-banner

Remédiation :

  1. Bloquer via .htaccess :
# Bloquer énumération ?author=
RewriteCond %{QUERY_STRING} ^author=([0-9]+) [NC]
RewriteRule ^(.*)$ /? [R=301,L]

# Bloquer API users
RewriteRule ^wp-json/wp/v2/users /404 [R=404,L]
  1. Ou via functions.php :
// Bloquer énumération utilisateurs
add_action('wp', 'prevent_user_enumeration');
function prevent_user_enumeration() {
    if (is_author() || (isset($_GET['author']) && !is_admin())) {
        wp_redirect(home_url(), 301);
        exit;
    }
}

Valeur par défaut : Énumération possible


2.1.7 — Désactivation XML-RPC

Niveau : 🔴
Référence : OWASP A10 / CIS WordPress 3.7 / NIST 800-53 CM-7
MITRE ATT&CK : T1190

Description : XML-RPC permet l’accès distant à WordPress mais est souvent exploité pour des attaques par amplification DDoS et force brute. Il doit être désactivé si non utilisé.

Vérification :

# Test XML-RPC actif
curl -X POST https://example.com/xmlrpc.php \
  -d "<?xml version='1.0'?><methodCall><methodName>system.listMethods</methodName></methodCall>"
# Test attaque amplification
curl -X POST https://example.com/xmlrpc.php \
  -d "<?xml version='1.0'?><methodCall><methodName>system.multicall</methodName><params><param><value><array><data><value><struct><member><name>methodName</name><value><string>wp.getUsersBlogs</string></value></member></struct></value></data></array></value></param></params></methodCall>"

Remédiation :

  1. Désactiver via functions.php :
add_filter('xmlrpc_enabled', '__return_false');
remove_action('wp_head', 'rsd_link');
  1. Bloquer via .htaccess :
<Files xmlrpc.php>
Order allow,deny
Deny from all
</Files>
  1. Via plugin de sécurité :
wp plugin install disable-xml-rpc --activate

Valeur par défaut : XML-RPC activé


2.1.8 — Sécurisation wp-login.php

Niveau : 🟠
Référence : OWASP A07 / CIS WordPress 3.8 / NIST 800-53 AC-3
MITRE ATT&CK : T1110

Description : La page de connexion WordPress est une cible privilégiée des attaques. Implémenter des mesures de protection spécifiques : HTTPS forcé, headers de sécurité, masquage des erreurs.

Vérification :

# Tester page de connexion
curl -s -I https://example.com/wp-login.php
curl -s https://example.com/wp-login.php | grep -i "motdepasse\|username\|erreur"
# Test redirection HTTPS
curl -s -I http://example.com/wp-login.php

Remédiation :

  1. Forcer HTTPS pour l’admin :
define('FORCE_SSL_ADMIN', true);
  1. Personnaliser les erreurs de connexion :
function custom_login_error() {
    return 'Identifiants incorrects.';
}
add_filter('login_errors', 'custom_login_error');
  1. Ajouter headers de sécurité :
<FilesMatch "wp-login.php">
Header always set X-Frame-Options "DENY"
Header always set X-Content-Type-Options "nosniff"
</FilesMatch>

Valeur par défaut : Protection basique uniquement


2.1.9 — Audit Sessions Utilisateurs

Niveau : 🟡
Référence : OWASP A02 / CIS WordPress 3.9 / NIST 800-53 AU-3
MITRE ATT&CK : T1078

Description : Surveiller et auditer les sessions utilisateurs actives permet de détecter les accès non autorisés et les sessions concurrentes suspectes.

Vérification :

# Lister sessions actives
wp user session list --all
# Vérifier metadata utilisateurs
wp user meta list 1 | grep session

Remédiation :

  1. Installer plugin d’audit des sessions :
wp plugin install user-session-control --activate
  1. Configurer expiration des sessions :
// Limiter durée des sessions
function custom_session_expire($expiration, $user_id, $remember) {
    return $remember ? DAY_IN_SECONDS * 7 : HOUR_IN_SECONDS * 2;
}
add_filter('auth_cookie_expiration', 'custom_session_expire', 10, 3);

Valeur par défaut : Sessions illimitées dans le temps


2.1.10 — Protection Comptes Inactifs

Niveau : 🟡
Référence : OWASP A01 / CIS WordPress 3.10 / NIST 800-53 AC-2
MITRE ATT&CK : T1078

Description : Les comptes utilisateurs inactifs représentent un risque de sécurité. Ils doivent être identifiés, désactivés ou supprimés selon une politique définie.

Vérification :

# Utilisateurs sans connexion récente
wp user list --format=csv --fields=user_login,user_registered | head
# Via plugin d'audit
wp plugin list | grep -i "activity\|audit\|log"

Remédiation :

  1. Auditer l’activité utilisateur :
wp plugin install wp-security-audit-log --activate
  1. Script de désactivation automatique :
function disable_inactive_users() {
    $inactive_days = 90;
    $users = get_users(array('meta_key' => 'last_activity', 'meta_compare' => '<', 'meta_value' => date('Y-m-d', strtotime("-{$inactive_days} days"))));
    foreach ($users as $user) {
        wp_update_user(array('ID' => $user->ID, 'user_status' => 1));
    }
}

Valeur par défaut : Comptes inactifs conservés indéfiniment


2.1.11 — Sécurisation Mot de Passe Administrateur

Niveau : 🔴
Référence : OWASP A07 / CIS WordPress 3.11 / NIST 800-53 IA-5
MITRE ATT&CK : T1110

Description : Le compte administrateur principal est la cible prioritaire des attaquants. Son mot de passe doit être extrêmement robuste et changé régulièrement.

Vérification :

# Identifier le compte admin principal
wp user list --role=administrator --field=user_login | head -1
# Tenter connexion avec mots de passe communs (avec autorisation)

Remédiation :

  1. Générer mot de passe fort :
wp user update admin --user_pass="$(openssl rand -base64 32)"
  1. Renommer le compte admin :
wp user update admin --user_login=newadminname
  1. Implémenter rotation régulière des mots de passe

Valeur par défaut : Souvent “admin/admin” ou mots de passe faibles


2.1.12 — Configuration Cookies Sécurisés

Niveau : 🟠
Référence : OWASP A02 / CIS WordPress 3.12 / NIST 800-53 SC-23
MITRE ATT&CK : T1539

Description : Les cookies d’authentification doivent être configurés avec les attributs de sécurité appropriés : Secure, HttpOnly, SameSite pour prévenir les attaques de détournement.

Vérification :

# Analyser les cookies
curl -c cookies.txt -b cookies.txt -s https://example.com/wp-login.php
cat cookies.txt
# Vérifier attributs sécurité
curl -s -I -D headers.txt https://example.com/wp-login.php
grep -i "set-cookie" headers.txt

Remédiation :

  1. Configurer cookies sécurisés :
// Dans wp-config.php
ini_set('session.cookie_secure', 1);
ini_set('session.cookie_httponly', 1);
ini_set('session.cookie_samesite', 'Strict');
define('COOKIE_DOMAIN', '.example.com');
  1. Via .htaccess :
<IfModule mod_headers.c>
Header edit Set-Cookie ^(.*)$ $1;HttpOnly;Secure;SameSite=Strict
</IfModule>

Valeur par défaut : Cookies sans attributs de sécurité


2.1.13 — Restriction Accès par IP

Niveau : 🟡
Référence : OWASP A01 / CIS WordPress 3.13 / NIST 800-53 AC-3
MITRE ATT&CK : T1078

Description : Limiter l’accès administratif à des adresses IP spécifiques ajoute une couche de sécurité, particulièrement efficace pour les équipes avec IPs fixes.

Vérification :

# Tester accès depuis IP non autorisée
curl -s -I https://example.com/wp-admin/ --interface 8.8.8.8
# Vérifier .htaccess ou configuration serveur
grep -A 10 -B 2 "allow\|deny" .htaccess

Remédiation :

  1. Protection via .htaccess :
<Directory "/wp-admin">
Order deny,allow
Deny from all
Allow from 192.168.1.0/24
Allow from 203.0.113.5
</Directory>
  1. Via plugin de sécurité :
wp plugin install all-in-one-wp-security-and-firewall --activate

Valeur par défaut : Accès libre depuis toutes les IPs


2.1.14 — Audit Trail Authentifications

Niveau : 🟡
Référence : OWASP A09 / CIS WordPress 3.14 / NIST 800-53 AU-2
MITRE ATT&CK : T1078

Description : Enregistrer toutes les tentatives d’authentification (succès et échecs) permet de détecter les attaques et d’analyser les patterns suspects d’accès.

Vérification :

# Vérifier logs d'activité
wp plugin list | grep -iE "(log|audit|activity)"
# Examiner fichiers de log
ls -la wp-content/uploads/wp-security-audit-log/
tail -f wp-content/debug.log | grep -i login

Remédiation :

  1. Installer plugin d’audit complet :
wp plugin install wp-security-audit-log --activate
  1. Configurer logs personnalisés :
function log_login_attempts($user_login, $user = null) {
    $ip = $_SERVER['REMOTE_ADDR'];
    $user_agent = $_SERVER['HTTP_USER_AGENT'];
    error_log("Login attempt: {$user_login} from {$ip} - {$user_agent}");
}
add_action('wp_login_failed', 'log_login_attempts');
add_action('wp_login', 'log_login_attempts', 10, 2);

Valeur par défaut : Logs minimaux dans les logs serveur


2.1.15 — Protection Contre Attaques Timing

Niveau : 🟡
Référence : OWASP A07 / CIS WordPress 3.15 / NIST 800-53 SC-5
MITRE ATT&CK : T1110

Description : Les différences de temps de réponse entre utilisateur valide/invalide peuvent révéler des informations. Uniformiser les temps de réponse prévient les attaques par analyse temporelle.

Vérification :

# Mesurer temps de réponse
time curl -d "log=validuser&pwd=wrongpass" https://example.com/wp-login.php
time curl -d "log=invaliduser&pwd=wrongpass" https://example.com/wp-login.php
# Comparer les différences

Remédiation :

  1. Uniformiser les temps de réponse :
function uniform_login_response() {
    // Délai fixe pour toutes les réponses
    usleep(rand(500000, 1000000)); // 0.5-1 seconde
}
add_action('login_init', 'uniform_login_response');
  1. Utiliser des hashes constants :
function secure_login_check($user, $password) {
    $stored_hash = '$2y$10$dummy.hash.for.timing.protection';
    password_verify($password, $stored_hash); // Calcul constant
    return $user;
}

Valeur par défaut : Temps de réponse variables


2.1.16 — Gestion Expiration Mots de Passe

Niveau : 🟡
Référence : OWASP A07 / CIS WordPress 3.16 / NIST 800-53 IA-5
MITRE ATT&CK : T1110

Description : Forcer le renouvellement périodique des mots de passe, particulièrement pour les comptes privilégiés, réduit l’impact d’une compromission de credentials.

Vérification :

# Vérifier plugins de gestion des mots de passe
wp plugin list | grep -iE "(password|expir)"
# Examiner métadonnées utilisateurs
wp user meta list 1 | grep -iE "(password|expir)"

Remédiation :

  1. Plugin d’expiration des mots de passe :
wp plugin install force-password-reset --activate
  1. Code personnalisé :
function check_password_age($user_login, $user = null) {
    $last_change = get_user_meta($user->ID, 'password_last_change', true);
    $max_age = 90 * DAY_IN_SECONDS; // 90 jours
    
    if ($last_change && (time() - $last_change > $max_age)) {
        wp_redirect(admin_url('profile.php?password_expired=1'));
        exit;
    }
}
add_action('wp_login', 'check_password_age', 10, 2);

Valeur par défaut : Mots de passe sans expiration


2.1.17 — Protection Reset Mot de Passe

Niveau : 🟠
Référence : OWASP A07 / CIS WordPress 3.17 / NIST 800-53 IA-5
MITRE ATT&CK : T1110

Description : Le processus de réinitialisation des mots de passe peut être exploité pour des attaques par énumération et déni de service. Il doit être sécurisé et limité.

Vérification :

# Tester reset de mot de passe
curl -d "user_login=admin" https://example.com/wp-login.php?action=lostpassword
curl -d "user_login=nonexistent" https://example.com/wp-login.php?action=lostpassword
# Vérifier rate limiting

Remédiation :

  1. Limiter les demandes de reset :
function limit_password_reset() {
    $ip = $_SERVER['REMOTE_ADDR'];
    $transient = 'pwd_reset_' . md5($ip);
    
    if (get_transient($transient)) {
        wp_die('Trop de demandes. Réessayez dans 15 minutes.');
    }
    
    set_transient($transient, true, 15 * MINUTE_IN_SECONDS);
}
add_action('lostpassword_post', 'limit_password_reset');
  1. Masquer les messages d’erreur :
function generic_reset_message() {
    return 'Si cet utilisateur existe, un email a été envoyé.';
}
add_filter('lostpassword_errors', 'generic_reset_message');

Valeur par défaut : Reset illimité avec messages révélateurs


2.1.18 — Authentification Applications Tierces

Niveau : 🟡
Référence : OWASP A02 / CIS WordPress 3.18 / NIST 800-53 IA-2
MITRE ATT&CK : T1078

Description : Les applications tierces utilisant l’API WordPress doivent utiliser des méthodes d’authentification sécurisées : Application Passwords, OAuth, JWT plutôt que les credentials directs.

Vérification :

# Vérifier Application Passwords
wp user application-password list admin
# Tester authentification API
curl -u "admin:password" https://example.com/wp-json/wp/v2/users/me

Remédiation :

  1. Configurer Application Passwords :
wp user application-password create admin "Mon App Mobile" --porcelain
  1. Désactiver authentification basique pour API :
add_filter('rest_authentication_errors', function($result) {
    if (!empty($result)) {
        return $result;
    }
    
    if (!is_user_logged_in() && !isset($_SERVER['PHP_AUTH_USER'])) {
        return new WP_Error('rest_not_logged_in', 'Authentification requise.', array('status' => 401));
    }
    
    return $result;
});

Valeur par défaut : Authentification basique possible


2.1.19 — Séparation Comptes Fonctionnels

Niveau : 🟡
Référence : OWASP A01 / CIS WordPress 3.19 / NIST 800-53 AC-6
MITRE ATT&CK : T1078

Description : Séparer les comptes techniques/fonctionnels des comptes utilisateurs humains améliore la traçabilité et permet un contrôle d’accès granulaire.

Vérification :

# Identifier les comptes de service
wp user list --format=table --fields=user_login,user_email,roles
# Vérifier les dernières connexions
wp plugin install wp-security-audit-log --activate

Remédiation :

  1. Créer comptes dédiés :
wp user create api-service api@example.com --role=editor --user_pass="$(openssl rand -base64 32)"
wp user create backup-service backup@example.com --role=subscriber --user_pass="$(openssl rand -base64 32)"
  1. Restreindre les permissions :
// Rôle personnalisé pour services
function create_service_role() {
    add_role('api_service', 'Service API', array(
        'read' => true,
        'edit_posts' => true,
        'publish_posts' => false
    ));
}
add_action('init', 'create_service_role');

Valeur par défaut : Comptes mixtes humains/services


2.1.20 — Monitoring Escalade Privilèges

Niveau : 🟠
Référence : OWASP A01 / CIS WordPress 3.20 / NIST 800-53 AU-6
MITRE ATT&CK : T1078

Description : Surveiller les changements de rôles et permissions utilisateurs permet de détecter les escalades de privilèges malveillantes ou accidentelles.

Vérification :

# Vérifier historique des changements de rôles
wp plugin list | grep -iE "(audit|security|log)"
# Examiner les logs d'activité

Remédiation :

  1. Monitoring automatisé :
function monitor_role_changes($user_id, $role, $old_roles) {
    $user = get_userdata($user_id);
    $new_roles = $user->roles;
    
    if ($old_roles != $new_roles) {
        error_log("SECURITY: Role change for user {$user->user_login}: " . 
                 implode(',', $old_roles) . " -> " . implode(',', $new_roles));
        
        // Alerter l'administrateur
        wp_mail('admin@example.com', 'Changement de rôle détecté', 
                "L'utilisateur {$user->user_login} a changé de rôle.");
    }
}
add_action('set_user_role', 'monitor_role_changes', 10, 3);
  1. Plugin d’audit complet :
wp plugin install wp-security-audit-log --activate

Valeur par défaut : Changements non surveillés


2.1.21 — Protection Contre User Enumeration API

Niveau : 🟡
Référence : OWASP A01 / CIS WordPress 3.21 / NIST 800-53 SC-28
MITRE ATT&CK : T1087

Description : L’API REST WordPress expose par défaut les informations utilisateurs. Cette exposition doit être contrôlée pour empêcher la reconnaissance et le profilage des utilisateurs.

Vérification :

# Test exposition utilisateurs via API
curl -s https://example.com/wp-json/wp/v2/users/ | jq '.[] | {id, name, slug}'
curl -s https://example.com/wp-json/wp/v2/users/1 | jq '{id, name, slug, roles}'

Remédiation :

  1. Restreindre l’accès à l’API utilisateurs :
// Bloquer complètement l'endpoint users
add_filter('rest_endpoints', function($endpoints) {
    if (isset($endpoints['/wp/v2/users'])) {
        unset($endpoints['/wp/v2/users']);
    }
    if (isset($endpoints['/wp/v2/users/(?P<id>[\d]+)'])) {
        unset($endpoints['/wp/v2/users/(?P<id>[\d]+)']);
    }
    return $endpoints;
});
  1. Ou limiter aux utilisateurs connectés :
add_filter('rest_user_query', function($prepared_args, $request) {
    if (!is_user_logged_in()) {
        return new WP_Error('rest_user_cannot_view', 'Accès non autorisé.', array('status' => 401));
    }
    return $prepared_args;
}, 10, 2);

Valeur par défaut : API utilisateurs publique


2.1.22 — Gestion Sessions Concurrentes

Niveau : 🟡
Référence : OWASP A02 / CIS WordPress 3.22 / NIST 800-53 AC-12
MITRE ATT&CK : T1078

Description : Limiter le nombre de sessions simultanées par utilisateur et détecter les connexions concurrentes suspectes peut révéler des compromissions de comptes.

Vérification :

# Examiner les sessions actives
wp user session list --all --format=table
# Compter sessions par utilisateur
wp user list --format=ids | xargs -I {} wp user session list {} --format=count

Remédiation :

  1. Limiter les sessions concurrentes :
function limit_concurrent_sessions($user_login, $user) {
    $sessions = WP_Session_Tokens::get_instance($user->ID);
    $all_sessions = $sessions->get_all();
    
    if (count($all_sessions) > 2) { // Max 2 sessions
        // Détruire les sessions anciennes
        $sessions->destroy_others($_COOKIE[LOGGED_IN_COOKIE]);
    }
}
add_action('wp_login', 'limit_concurrent_sessions', 10, 2);
  1. Alertes de connexions multiples :
function alert_concurrent_login($user_login, $user) {
    $sessions = WP_Session_Tokens::get_instance($user->ID);
    if (count($sessions->get_all()) > 1) {
        wp_mail($user->user_email, 'Nouvelle connexion détectée', 
                'Une nouvelle connexion a été détectée sur votre compte.');
    }
}
add_action('wp_login', 'alert_concurrent_login', 10, 2);

Valeur par défaut : Sessions multiples illimitées


2.1.23 — Protection Mot de Passe en Transit

Niveau : 🔴
Référence : OWASP A02 / CIS WordPress 3.23 / NIST 800-53 SC-8
MITRE ATT&CK : T1040

Description : Tous les échanges de mots de passe doivent être chiffrés via HTTPS. HTTP doit être complètement désactivé pour les pages d’authentification.

Vérification :

# Tester redirection HTTPS
curl -I http://example.com/wp-login.php
curl -I http://example.com/wp-admin/
# Vérifier force SSL
grep "FORCE_SSL_ADMIN" wp-config.php

Remédiation :

  1. Forcer HTTPS pour l’administration :
// wp-config.php
define('FORCE_SSL_ADMIN', true);
  1. Redirection .htaccess :
RewriteCond %{HTTPS} off
RewriteRule ^(wp-admin|wp-login\.php).*$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
  1. Headers de sécurité HTTPS :
<IfModule mod_headers.c>
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
</IfModule>

Valeur par défaut : HTTP autorisé


2.1.24 — Authentification Forte pour API

Niveau : 🟠
Référence : OWASP A02 / CIS WordPress 3.24 / NIST 800-53 IA-2
MITRE ATT&CK : T1078

Description : L’API REST WordPress doit utiliser des méthodes d’authentification robustes : JWT, OAuth2, ou Application Passwords plutôt que l’authentification basique.

Vérification :

# Tester authentification API
curl -u "admin:password" https://example.com/wp-json/wp/v2/posts
# Vérifier plugins d'authentification
wp plugin list | grep -iE "(jwt|oauth|auth)"

Remédiation :

  1. Installer JWT Authentication :
wp plugin install jwt-authentication-for-wp-rest-api --activate
  1. Configuration JWT :
// wp-config.php
define('JWT_AUTH_SECRET_KEY', 'your-secret-key');
define('JWT_AUTH_CORS_ENABLE', true);
  1. Désactiver auth basique :
add_filter('rest_authentication_errors', function($result) {
    if (isset($_SERVER['PHP_AUTH_USER'])) {
        return new WP_Error('rest_authentication_error', 'Authentification basique désactivée.');
    }
    return $result;
});

Valeur par défaut : Authentification basique autorisée


2.1.25 — Politique Verrouillage Compte

Niveau : 🟠
Référence : OWASP A07 / CIS WordPress 3.25 / NIST 800-53 AC-7
MITRE ATT&CK : T1110

Description : Définir une politique claire de verrouillage des comptes après échecs d’authentification, avec procédures de déverrouillage sécurisées.

Vérification :

# Tester politique de verrouillage
# (Nécessite plusieurs tentatives d'échec)
for i in {1..5}; do
  curl -d "log=admin&pwd=wrong$i" https://example.com/wp-login.php
done
# Vérifier état du verrouillage

Remédiation :

  1. Configuration Wordfence :
wp plugin install wordfence --activate
wp option update wordfence_ls_maxFailures 5
wp option update wordfence_ls_duration 1800
  1. Politique personnalisée :
function advanced_account_lockout($username) {
    $lockout_key = 'failed_login_' . md5($username);
    $failed_count = get_transient($lockout_key) ?: 0;
    
    if ($failed_count >= 3) {
        // Verrouillage progressif
        $lockout_duration = min(pow(2, $failed_count - 3) * 300, 86400); // Max 24h
        set_transient($lockout_key . '_locked', true, $lockout_duration);
        
        wp_die("Compte temporairement verrouillé. Réessayez dans " . 
               human_time_diff(time() + $lockout_duration) . ".");
    }
}
add_action('wp_login_failed', 'advanced_account_lockout');

Valeur par défaut : Pas de verrouillage automatique


S3 — PLUGINS & EXTENSIONS (25 contrôles)

Cette section couvre la sécurité des plugins WordPress, leur gestion et leur surveillance.

3.1.1 — Inventaire Complet des Plugins

Niveau : 🔴
Référence : OWASP A06 / CIS WordPress 4.1 / NIST 800-53 CM-8
MITRE ATT&CK : T1190

Description : Maintenir un inventaire complet et à jour de tous les plugins installés est essentiel pour la gestion des vulnérabilités et la réduction de la surface d’attaque.

Vérification :

# Lister tous les plugins
wp plugin list --format=table --fields=name,status,version,update_version
# Scanner avec WPScan
wpscan --url https://example.com --enumerate vp --plugins-detection aggressive --no-banner
# Plugins inactifs
wp plugin list --status=inactive

Remédiation :

  1. Documenter tous les plugins :
wp plugin list --format=csv --fields=name,version,status,auto_update > plugins_inventory.csv
  1. Supprimer plugins inactifs :
wp plugin delete $(wp plugin list --status=inactive --field=name)
  1. Audit régulier :
# Script d'audit mensuel
#!/bin/bash
wp plugin list --field=name | while read plugin; do
  echo "Plugin: $plugin - $(wp plugin get $plugin --field=version)"
done

Valeur par défaut : Plugins accumulés sans inventaire


3.1.2 — Plugins Obsolètes et Abandonnés

Niveau : 🔴
Référence : OWASP A06 / CIS WordPress 4.2 / NIST 800-53 SI-2
MITRE ATT&CK : T1190

Description : Les plugins obsolètes ou abandonnés par leurs développeurs représentent un risque critique car ils ne reçoivent plus de correctifs de sécurité.

Vérification :

# Vérifier mises à jour disponibles
wp plugin list --update=available
# Scanner plugins obsolètes avec WPScan
wpscan --url https://example.com --enumerate vp --plugins-version-detection aggressive
# Vérifier dernière mise à jour
wp plugin list --format=json | jq '.[] | {name: .name, version: .version}'

Remédiation :

  1. Identifier plugins sans mise à jour récente :
# Plugins sans update depuis 2 ans
wp plugin list --format=json | jq '.[] | select(.last_updated < "2022-01-01")'
  1. Remplacer ou supprimer :
wp plugin deactivate abandoned-plugin
wp plugin delete abandoned-plugin
# Chercher alternative
wp plugin search "alternative functionality"
  1. Surveillance automatisée :
function check_abandoned_plugins() {
    $plugins = get_plugins();
    foreach ($plugins as $plugin_file => $plugin_data) {
        // Vérifier âge dernière mise à jour
        $last_updated = get_plugin_data($plugin_file)['Version'];
        // Alerter si > 2 ans
    }
}
wp_schedule_event(time(), 'monthly', 'check_abandoned_plugins');

Valeur par défaut : Plugins conservés indéfiniment


3.1.3 — Vulnérabilités Connues (Base WPScan)

Niveau : 🔴
Référence : OWASP A06 / CIS WordPress 4.3 / NIST 800-53 SI-2
MITRE ATT&CK : T1190

Description : Vérifier régulièrement les plugins contre la base de vulnérabilités WPScan pour identifier les risques de sécurité connus et non patchés.

Vérification :

# Scan vulnérabilités avec API key
wpscan --url https://example.com --enumerate vp --plugins-detection aggressive --api-token YOUR_API_TOKEN
# Vérification spécifique
wpscan --url https://example.com --enumerate vp --plugins-detection aggressive | grep -A 5 -B 5 "vulnerabilities"

Remédiation :

  1. Audit automatisé quotidien :
#!/bin/bash
wpscan --url https://example.com --enumerate vp --api-token $WPSCAN_TOKEN --format json > daily_scan.json
if grep -q "vulnerabilities" daily_scan.json; then
  mail -s "Vulnérabilités détectées" admin@example.com < daily_scan.json
fi
  1. Mise à jour immédiate des plugins vulnérables :
wp plugin update --all
  1. Surveillance continue :
// Hook pour vérifier avant activation
function check_plugin_vulnerabilities($plugin) {
    // Intégration API WPScan
    $response = wp_remote_get("https://wpscan.com/api/v3/plugins/{$plugin}");
    // Analyser réponse et bloquer si vulnérable
}
add_action('activate_plugin', 'check_plugin_vulnerabilities');

Valeur par défaut : Aucune vérification automatique


3.1.4 — Permissions et Capacités des Plugins

Niveau : 🟠
Référence : OWASP A01 / CIS WordPress 4.4 / NIST 800-53 AC-6
MITRE ATT&CK : T1078

Description : Auditer les permissions demandées par les plugins et s’assurer qu’elles respectent le principe du moindre privilège. Certains plugins demandent des droits excessifs.

Vérification :

# Examiner les capacités des plugins
wp eval "
\$plugins = get_plugins();
foreach (\$plugins as \$plugin => \$data) {
    echo \$plugin . ' - ' . \$data['Name'] . PHP_EOL;
}
"
# Vérifier hooks et actions
grep -r "add_action\|add_filter" wp-content/plugins/ | head -20

Remédiation :

  1. Audit des permissions :
function audit_plugin_capabilities() {
    $active_plugins = get_option('active_plugins');
    foreach ($active_plugins as $plugin) {
        $plugin_data = get_plugin_data(WP_PLUGIN_DIR . '/' . $plugin);
        // Analyser les hooks et capabilities
        echo "Plugin: " . $plugin_data['Name'] . " - Version: " . $plugin_data['Version'] . "\n";
    }
}
  1. Restriction des plugins par rôle :
function restrict_plugin_access() {
    if (!current_user_can('manage_options')) {
        remove_menu_page('plugins.php');
    }
}
add_action('admin_menu', 'restrict_plugin_access');

Valeur par défaut : Permissions larges non auditées


3.1.5 — Plugins Nulled et Piratés

Niveau : 🔴
Référence : OWASP A08 / CIS WordPress 4.5 / NIST 800-53 SI-3
MITRE ATT&CK : T1505

Description : Les plugins piratés ou “nulled” contiennent souvent des backdoors, malwares ou code malveillant. Ils représentent un risque critique pour la sécurité.

Vérification :

# Scanner fichiers suspects
find wp-content/plugins/ -name "*.php" -exec grep -l "eval\|base64_decode\|gzinflate" {} \;
# Vérifier intégrité avec checksums officiels
wp plugin verify-checksums --all
# Rechercher backdoors connues
grep -r "c99\|r57\|webshell" wp-content/plugins/

Remédiation :

  1. Supprimer immédiatement les plugins suspects :
wp plugin deactivate suspicious-plugin
wp plugin delete suspicious-plugin
  1. Scanner régulièrement :
# Script de détection malware
#!/bin/bash
find wp-content/ -name "*.php" | xargs grep -l "eval.*base64_decode\|system.*\$_" > suspicious_files.txt
if [ -s suspicious_files.txt ]; then
  mail -s "Fichiers suspects détectés" admin@example.com < suspicious_files.txt
fi
  1. Politique d’acquisition stricte :
// Bloquer installation depuis sources non officielles
function restrict_plugin_sources($result, $action, $args) {
    if ($action == 'install-plugin') {
        // Vérifier source officielle WordPress.org
        if (!str_contains($args['source'], 'downloads.wordpress.org')) {
            return new WP_Error('unauthorized_source', 'Installation uniquement depuis WordPress.org autorisée.');
        }
    }
    return $result;
}
add_filter('upgrader_pre_download', 'restrict_plugin_sources', 10, 3);

Valeur par défaut : Aucun contrôle des sources


3.1.6 — Auto-Update des Plugins Critiques

Niveau : 🟠
Référence : OWASP A06 / CIS WordPress 4.6 / NIST 800-53 SI-2
MITRE ATT&CK : T1190

Description : Activer les mises à jour automatiques pour les plugins de sécurité critiques assure une protection rapide contre les vulnérabilités nouvellement découvertes.

Vérification :

# Vérifier statut auto-update
wp plugin auto-updates status
wp plugin list --format=table --fields=name,auto_update
# Plugins de sécurité installés
wp plugin list | grep -iE "(security|firewall|backup|malware)"

Remédiation :

  1. Activer auto-update pour plugins critiques :
wp plugin auto-updates enable wordfence
wp plugin auto-updates enable updraftplus
wp plugin auto-updates enable sucuri-scanner
  1. Configuration globale :
// wp-config.php - Auto-update tous les plugins
define('WP_AUTO_UPDATE_CORE', true);
add_filter('auto_update_plugin', '__return_true');
  1. Auto-update sélectif :
function selective_plugin_auto_update($update, $item) {
    $security_plugins = array(
        'wordfence/wordfence.php',
        'updraftplus/updraftplus.php',
        'sucuri-scanner/sucuri.php'
    );
    return in_array($item->plugin, $security_plugins);
}
add_filter('auto_update_plugin', 'selective_plugin_auto_update', 10, 2);

Valeur par défaut : Auto-update désactivé


3.1.7 — Réduction Surface d’Attaque

Niveau : 🟠
Référence : OWASP A04 / CIS WordPress 4.7 / NIST 800-53 CM-7
MITRE ATT&CK : T1190

Description : Minimiser le nombre de plugins actifs réduit la surface d’attaque. Chaque plugin supplémentaire augmente les risques de vulnérabilités et de conflits.

Vérification :

# Compter plugins actifs
wp plugin list --status=active --format=count
# Analyser utilisation réelle
wp plugin list --format=table --fields=name,status,version
# Identifier plugins redondants

Remédiation :

  1. Audit d’utilisation :
# Désactiver temporairement et tester
wp plugin deactivate non-essential-plugin
# Tester fonctionnalité site
# Si OK, supprimer définitivement
wp plugin delete non-essential-plugin
  1. Consolidation des fonctionnalités :
// Remplacer multiple plugins par un seul multifonction
// Ex: Wordfence remplace plusieurs plugins sécurité
wp plugin install wordfence --activate
wp plugin deactivate old-security-plugin1 old-security-plugin2
  1. Politique de plugins minimale :
// Limite nombre de plugins actifs
function enforce_plugin_limit() {
    $active_count = count(get_option('active_plugins', array()));
    if ($active_count > 20) { // Limite à 20 plugins
        wp_die('Limite de plugins atteinte. Désactivez des plugins avant d\'en activer de nouveaux.');
    }
}
add_action('activate_plugin', 'enforce_plugin_limit');

Valeur par défaut : Accumulation illimitée de plugins


3.1.8 — Validation Code Source Plugins

Niveau : 🟡
Référence : OWASP A04 / CIS WordPress 4.8 / NIST 800-53 SI-7
MITRE ATT&CK : T1505

Description : Valider l’intégrité et la sécurité du code source des plugins avant installation, particulièrement pour les plugins provenant de sources tierces.

Vérification :

# Vérifier checksums plugins officiels
wp plugin verify-checksums --all
# Scanner code malveillant
find wp-content/plugins/ -name "*.php" -exec php -l {} \; | grep -v "No syntax errors"
# Rechercher patterns suspects
grep -r "eval\|exec\|system\|shell_exec" wp-content/plugins/

Remédiation :

  1. Validation avant installation :
# Télécharger et analyser avant installation
wget https://downloads.wordpress.org/plugin/plugin-name.zip
unzip plugin-name.zip
grep -r "eval\|base64_decode" plugin-name/
# Si clean, installer
wp plugin install plugin-name.zip
  1. Monitoring intégrité :
function monitor_plugin_integrity() {
    $plugins_dir = WP_PLUGIN_DIR;
    $known_hashes = get_option('plugin_hashes', array());
    
    foreach (glob("$plugins_dir/*/*.php") as $file) {
        $current_hash = md5_file($file);
        $relative_path = str_replace($plugins_dir . '/', '', $file);
        
        if (isset($known_hashes[$relative_path]) && 
            $known_hashes[$relative_path] !== $current_hash) {
            // Fichier modifié - alerter
            wp_mail('admin@example.com', 'Plugin modifié', "Le fichier $file a été modifié.");
        }
        
        $known_hashes[$relative_path] = $current_hash;
    }
    
    update_option('plugin_hashes', $known_hashes);
}
wp_schedule_event(time(), 'daily', 'monitor_plugin_integrity');

Valeur par défaut : Aucune validation du code


3.1.9 — Gestion Dépendances des Plugins

Niveau : 🟡
Référence : OWASP A06 / CIS WordPress 4.9 / NIST 800-53 CM-8
MITRE ATT&CK : T1195

Description : Documenter et gérer les dépendances entre plugins pour éviter les conflits de sécurité et assurer la cohérence des mises à jour.

Vérification :

# Analyser dépendances
wp plugin list --format=json | jq '.[] | {name: .name, requires: .requires_wp}'
# Tester désactivation en cascade
wp plugin deactivate parent-plugin
# Vérifier erreurs
tail -f wp-content/debug.log

Remédiation :

  1. Cartographie des dépendances :
function map_plugin_dependencies() {
    $plugins = get_plugins();
    $dependencies = array();
    
    foreach ($plugins as $plugin_file => $plugin_data) {
        // Analyser headers et requirements
        if (isset($plugin_data['RequiresPlugins'])) {
            $dependencies[$plugin_file] = explode(',', $plugin_data['RequiresPlugins']);
        }
    }
    
    update_option('plugin_dependencies', $dependencies);
    return $dependencies;
}
  1. Validation ordre de désactivation :
function validate_plugin_deactivation($plugin) {
    $dependencies = get_option('plugin_dependencies', array());
    
    foreach ($dependencies as $dependent_plugin => $required_plugins) {
        if (in_array($plugin, $required_plugins) && is_plugin_active($dependent_plugin)) {
            wp_die("Impossible de désactiver $plugin : requis par $dependent_plugin");
        }
    }
}
add_action('deactivate_plugin', 'validate_plugin_deactivation');

Valeur par défaut : Gestion manuelle des dépendances


3.1.10 — Sandbox et Tests Plugins

Niveau : 🟡
Référence : OWASP A04 / CIS WordPress 4.10 / NIST 800-53 CM-3
MITRE ATT&CK : T1505

Description : Tester les nouveaux plugins dans un environnement de staging isolé avant déploiement en production pour identifier les risques de sécurité.

Vérification :

# Vérifier environnement de staging
wp option get siteurl
wp config get WP_ENVIRONMENT_TYPE
# Comparer plugins prod vs staging
wp plugin list --format=csv > production_plugins.csv

Remédiation :

  1. Configuration environnement de test :
// wp-config.php staging
define('WP_ENVIRONMENT_TYPE', 'staging');
define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
  1. Procédure de test :
# Script de test automatisé
#!/bin/bash
STAGING_URL="https://staging.example.com"
PLUGIN_NAME=$1

# Installer sur staging
wp plugin install $PLUGIN_NAME --activate --url=$STAGING_URL
# Scanner vulnérabilités
wpscan --url $STAGING_URL --enumerate vp
# Test fonctionnel
curl -s $STAGING_URL | grep -i "error\|warning"
# Si OK, déployer en prod
  1. Isolation des tests :
function restrict_staging_plugins() {
    if (wp_get_environment_type() === 'staging') {
        // Désactiver plugins dangereux en staging
        $dangerous_plugins = array('backup-plugin', 'mail-sender');
        foreach ($dangerous_plugins as $plugin) {
            if (is_plugin_active($plugin)) {
                deactivate_plugins($plugin);
            }
        }
    }
}
add_action('plugins_loaded', 'restrict_staging_plugins');

Valeur par défaut : Installation directe en production


3.1.11 — Monitoring Activité Plugins

Niveau : 🟡
Référence : OWASP A09 / CIS WordPress 4.11 / NIST 800-53 AU-2
MITRE ATT&CK : T1505

Description : Surveiller l’activité des plugins (installation, activation, désactivation, mises à jour) pour détecter les changements non autorisés.

Vérification :

# Vérifier logs d'activité
wp plugin list | grep -iE "(activity|audit|log)"
# Examiner logs plugin changes
tail -f wp-content/uploads/wp-security-audit-log/

Remédiation :

  1. Logging complet des activités :
function log_plugin_activities($plugin, $network_activation) {
    $user = wp_get_current_user();
    $log_entry = array(
        'timestamp' => current_time('mysql'),
        'user' => $user->user_login,
        'action' => 'plugin_activation',
        'plugin' => $plugin,
        'ip' => $_SERVER['REMOTE_ADDR']
    );
    
    error_log('PLUGIN_ACTIVITY: ' . json_encode($log_entry));
    
    // Alerter pour plugins critiques
    if (strpos($plugin, 'security') !== false) {
        wp_mail('admin@example.com', 'Plugin sécurité activé', 
                "Plugin $plugin activé par {$user->user_login}");
    }
}
add_action('activated_plugin', 'log_plugin_activities', 10, 2);
add_action('deactivated_plugin', 'log_plugin_activities', 10, 2);
  1. Dashboard monitoring :
function plugin_activity_dashboard() {
    $recent_activities = get_option('recent_plugin_activities', array());
    echo '<div class="notice notice-info">';
    echo '<h3>Activité Plugins Récente</h3>';
    foreach ($recent_activities as $activity) {
        echo "<p>{$activity['timestamp']} - {$activity['action']} - {$activity['plugin']}</p>";
    }
    echo '</div>';
}
add_action('admin_notices', 'plugin_activity_dashboard');

Valeur par défaut : Activité non surveillée


3.1.12 — Politique Installation Plugins

Niveau : 🟠
Référence : OWASP A01 / CIS WordPress 4.12 / NIST 800-53 CM-3
MITRE ATT&CK : T1505

Description : Établir une politique stricte d’installation et de gestion des plugins avec processus d’approbation et validation sécurisée.

Vérification :

# Vérifier qui peut installer des plugins
wp user list --role=administrator --format=table
# Vérifier restrictions actuelles
grep "DISALLOW_FILE_MODS" wp-config.php

Remédiation :

  1. Restriction installation :
// wp-config.php - Désactiver installation plugins
define('DISALLOW_FILE_MODS', true);
  1. Processus d’approbation :
function require_plugin_approval($result, $action, $args) {
    if ($action === 'install-plugin') {
        $approved_plugins = get_option('approved_plugins', array());
        $plugin_slug = $args['slug'];
        
        if (!in_array($plugin_slug, $approved_plugins)) {
            return new WP_Error('unapproved_plugin', 
                'Plugin non approuvé. Contactez l\'administrateur.');
        }
    }
    return $result;
}
add_filter('upgrader_pre_download', 'require_plugin_approval', 10, 3);
  1. Whitelist plugins autorisés :
function enforce_plugin_whitelist() {
    $allowed_plugins = array(
        'wordfence/wordfence.php',
        'updraftplus/updraftplus.php',
        'yoast-seo/wp-seo.php'
    );
    
    $active_plugins = get_option('active_plugins');
    foreach ($active_plugins as $plugin) {
        if (!in_array($plugin, $allowed_plugins)) {
            deactivate_plugins($plugin);
            wp_mail('admin@example.com', 'Plugin non autorisé désactivé', 
                    "Plugin $plugin automatiquement désactivé.");
        }
    }
}
add_action('admin_init', 'enforce_plugin_whitelist');

Valeur par défaut : Installation libre


3.1.13 — Backup avant Modifications Plugins

Niveau : 🟠
Référence : OWASP A04 / CIS WordPress 4.13 / NIST 800-53 CP-9
MITRE ATT&CK : T1485

Description : Effectuer systématiquement des sauvegardes avant l’installation, mise à jour ou modification de plugins pour permettre une restauration rapide.

Vérification :

# Vérifier politique backup
wp plugin list | grep -iE "(backup|updraft)"
# Dernière sauvegarde
wp option get updraftplus_last_backup

Remédiation :

  1. Backup automatique avant modifications :
function backup_before_plugin_changes($upgrader, $hook_extra) {
    if (isset($hook_extra['type']) && $hook_extra['type'] === 'plugin') {
        // Déclencher sauvegarde
        do_action('updraftplus_backup_now', 'plugins_only');
        
        // Attendre completion
        sleep(5);
        
        // Vérifier succès backup
        $last_backup = get_option('updraftplus_last_backup');
        if (!$last_backup || (time() - $last_backup) > 300) {
            wp_die('Sauvegarde échouée. Modification annulée.');
        }
    }
}
add_action('upgrader_process_complete', 'backup_before_plugin_changes', 10, 2);
  1. Point de restauration :
# Script de point de restauration
#!/bin/bash
BACKUP_DIR="/backups/$(date +%Y%m%d_%H%M%S)"
mkdir -p $BACKUP_DIR
tar -czf $BACKUP_DIR/plugins.tar.gz wp-content/plugins/
mysqldump -u$DB_USER -p$DB_PASS $DB_NAME > $BACKUP_DIR/database.sql
echo "Backup créé: $BACKUP_DIR"

Valeur par défaut : Modifications sans sauvegarde


3.1.14 — Contrôle Versions Plugins

Niveau : 🟡
Référence : OWASP A06 / CIS WordPress 4.14 / NIST 800-53 CM-3
MITRE ATT&CK : T1195

Description : Maintenir un contrôle strict des versions des plugins utilisées, éviter les versions beta/alpha en production, documenter les versions approuvées.

Vérification :

# Versions actuelles
wp plugin list --format=table --fields=name,version,status
# Vérifier versions beta/dev
wp plugin list --format=json | jq '.[] | select(.version | contains("beta") or contains("dev") or contains("alpha"))'

Remédiation :

  1. Politique versions stables uniquement :
function enforce_stable_versions($result, $action, $args) {
    if ($action === 'install-plugin') {
        $version = $args['version'] ?? 'latest';
        if (preg_match('/(alpha|beta|dev|rc)/i', $version)) {
            return new WP_Error('unstable_version', 
                'Versions non-stables interdites en production.');
        }
    }
    return $result;
}
add_filter('upgrader_pre_download', 'enforce_stable_versions', 10, 3);
  1. Verrouillage versions critiques :
function lock_critical_plugin_versions($transient) {
    $locked_versions = array(
        'wordfence/wordfence.php' => '7.8.2',
        'updraftplus/updraftplus.php' => '1.22.23'
    );
    
    if (isset($transient->response)) {
        foreach ($locked_versions as $plugin => $locked_version) {
            if (isset($transient->response[$plugin])) {
                unset($transient->response[$plugin]);
            }
        }
    }
    
    return $transient;
}
add_filter('pre_set_site_transient_update_plugins', 'lock_critical_plugin_versions');

Valeur par défaut : Mises à jour automatiques vers dernière version


3.1.15 — Séparation Plugins par Environnement

Niveau : 🟡
Référence : OWASP A04 / CIS WordPress 4.15 / NIST 800-53 CM-2
MITRE ATT&CK : T1505

Description : Maintenir des configurations de plugins différentes selon les environnements (dev/staging/prod) pour éviter l’exposition de fonctionnalités de debug en production.

Vérification :

# Identifier environnement
wp config get WP_ENVIRONMENT_TYPE
# Plugins de debug actifs
wp plugin list | grep -iE "(debug|dev|test|query|profil)"

Remédiation :

  1. Configuration par environnement :
function environment_specific_plugins() {
    $environment = wp_get_environment_type();
    
    switch ($environment) {
        case 'production':
            $forbidden_plugins = array(
                'query-monitor/query-monitor.php',
                'debug-bar/debug-bar.php',
                'developer/developer.php'
            );
            
            foreach ($forbidden_plugins as $plugin) {
                if (is_plugin_active($plugin)) {
                    deactivate_plugins($plugin);
                }
            }
            break;
            
        case 'staging':
            // Activer plugins de test
            if (!is_plugin_active('query-monitor/query-monitor.php')) {
                activate_plugin('query-monitor/query-monitor.php');
            }
            break;
    }
}
add_action('plugins_loaded', 'environment_specific_plugins');
  1. Must-use plugins par environnement :
// mu-plugins/environment-control.php
if (wp_get_environment_type() === 'production') {
    // Désactiver fonctionnalités dangereuses
    define('WP_DEBUG', false);
    define('SCRIPT_DEBUG', false);
} else {
    // Environnement de développement
    define('WP_DEBUG', true);
    define('SCRIPT_DEBUG', true);
}

Valeur par défaut : Configuration identique tous environnements


3.1.16 — Audit Permissions Système Plugins

Niveau : 🟠
Référence : OWASP A01 / CIS WordPress 4.16 / NIST 800-53 AC-6
MITRE ATT&CK : T1078

Description : Auditer les permissions système requises par les plugins (lecture/écriture fichiers, accès base de données, appels réseau) pour identifier les sur-privilèges.

Vérification :

# Analyser capabilities des plugins
grep -r "current_user_can\|capability" wp-content/plugins/ | head -20
# Vérifier accès fichier système
find wp-content/plugins/ -name "*.php" -exec grep -l "file_get_contents\|fopen\|curl" {} \;

Remédiation :

  1. Audit des capabilities :
function audit_plugin_capabilities() {
    $plugins = get_plugins();
    $capability_report = array();
    
    foreach ($plugins as $plugin_file => $plugin_data) {
        if (is_plugin_active($plugin_file)) {
            // Analyser le code pour les capabilities utilisées
            $plugin_path = WP_PLUGIN_DIR . '/' . $plugin_file;
            $content = file_get_contents($plugin_path);
            
            preg_match_all('/current_user_can\s*\(\s*[\'"]([^\'"]+)[\'"]/', $content, $matches);
            $capability_report[$plugin_data['Name']] = array_unique($matches[1]);
        }
    }
    
    update_option('plugin_capability_audit', $capability_report);
    return $capability_report;
}
  1. Restriction capabilities par plugin :
function restrict_plugin_capabilities($caps, $cap, $user_id, $args) {
    $restricted_plugins = array(
        'non-critical-plugin' => array('manage_options', 'edit_users')
    );
    
    $current_plugin = $this->get_current_plugin();
    if (isset($restricted_plugins[$current_plugin]) && 
        in_array($cap, $restricted_plugins[$current_plugin])) {
        return array('do_not_allow');
    }
    
    return $caps;
}
add_filter('user_has_cap', 'restrict_plugin_capabilities', 10, 4);

Valeur par défaut : Permissions non auditées


3.1.17 — Protection Fichiers Configuration Plugins

Niveau : 🟠
Référence : OWASP A05 / CIS WordPress 4.17 / NIST 800-53 AC-3
MITRE ATT&CK : T1005

Description : Protéger les fichiers de configuration des plugins contre l’accès web direct, particulièrement ceux contenant des clés API ou credentials.

Vérification :

# Rechercher fichiers config exposés
find wp-content/plugins/ -name "*.ini" -o -name "*.conf" -o -name "config.php"
curl -s https://example.com/wp-content/plugins/plugin-name/config.ini
# Vérifier clés API dans fichiers
grep -r "api.*key\|secret.*key" wp-content/plugins/ | grep -v ".git"

Remédiation :

  1. Protection via .htaccess :
# wp-content/plugins/.htaccess
<FilesMatch "\.(ini|conf|config)$">
Order allow,deny
Deny from all
</FilesMatch>

<FilesMatch "config\.php$">
Order allow,deny
Deny from all
</FilesMatch>
  1. Déplacement fichiers sensibles :
// Déplacer config hors web root
function secure_plugin_config() {
    $config_dir = ABSPATH . '../plugin-configs/';
    if (!is_dir($config_dir)) {
        mkdir($config_dir, 0700, true);
    }
    
    // Rediriger les plugins vers ce répertoire
    define('SECURE_CONFIG_DIR', $config_dir);
}
add_action('plugins_loaded', 'secure_plugin_config', 1);
  1. Chiffrement des configurations :
function encrypt_plugin_config($data) {
    $key = wp_salt('AUTH_KEY');
    return base64_encode(openssl_encrypt($data, 'AES-256-CBC', $key, 0, substr($key, 0, 16)));
}

function decrypt_plugin_config($encrypted_data) {
    $key = wp_salt('AUTH_KEY');
    return openssl_decrypt(base64_decode($encrypted_data), 'AES-256-CBC', $key, 0, substr($key, 0, 16));
}

Valeur par défaut : Fichiers config potentiellement accessibles


3.1.18 — Isolation Plugins Critiques

Niveau : 🟡
Référence : OWASP A04 / CIS WordPress 4.18 / NIST 800-53 SC-7
MITRE ATT&CK : T1505

Description : Isoler les plugins critiques (sécurité, backup) pour éviter les interférences et garantir leur fonctionnement même en cas de problème avec d’autres plugins.

Vérification :

# Identifier plugins critiques
wp plugin list | grep -iE "(security|backup|firewall|malware)"
# Vérifier conflits potentiels
wp plugin list --status=active --format=count

Remédiation :

  1. Must-Use Plugins pour critiques :
# Déplacer plugins critiques vers mu-plugins
mkdir -p wp-content/mu-plugins
cp -r wp-content/plugins/wordfence wp-content/mu-plugins/
  1. Chargement prioritaire :
// mu-plugins/critical-plugins-loader.php
function load_critical_plugins_first() {
    $critical_plugins = array(
        'wordfence/wordfence.php',
        'updraftplus/updraftplus.php'
    );
    
    foreach ($critical_plugins as $plugin) {
        if (file_exists(WP_PLUGIN_DIR . '/' . $plugin)) {
            include_once WP_PLUGIN_DIR . '/' . $plugin;
        }
    }
}
add_action('muplugins_loaded', 'load_critical_plugins_first', 1);
  1. Monitoring isolation :
function monitor_plugin_isolation() {
    $critical_plugins = array('wordfence', 'updraftplus');
    
    foreach ($critical_plugins as $plugin) {
        if (!is_plugin_active($plugin . '/' . $plugin . '.php')) {
            wp_mail('admin@example.com', 'Plugin critique inactif', 
                    "Le plugin critique $plugin est inactif!");
        }
    }
}
wp_schedule_event(time(), 'hourly', 'monitor_plugin_isolation');

Valeur par défaut : Tous plugins au même niveau


3.1.19 — Gestion Licences et Mises à Jour Premium

Niveau : 🟡
Référence : OWASP A06 / CIS WordPress 4.19 / NIST 800-53 CM-8
MITRE ATT&CK : T1195

Description : Gérer correctement les licences des plugins premium pour assurer la réception des mises à jour de sécurité et éviter l’utilisation de versions piratées.

Vérification :

# Plugins premium installés
wp plugin list --format=json | jq '.[] | select(.update == "available" and .version != .update_version)'
# Vérifier licences expirées
grep -r "license.*expir\|invalid.*license" wp-content/plugins/

Remédiation :

  1. Audit des licences :
function audit_premium_licenses() {
    $premium_plugins = array(
        'gravityforms' => get_option('rg_gforms_key'),
        'wpforms-lite' => get_option('wpforms_license_key'),
        'elementor-pro' => get_option('elementor_pro_license_key')
    );
    
    foreach ($premium_plugins as $plugin => $license) {
        if (empty($license) || $this->is_license_expired($license)) {
            wp_mail('admin@example.com', 'Licence plugin expirée', 
                    "La licence du plugin $plugin nécessite un renouvellement.");
        }
    }
}
wp_schedule_event(time(), 'weekly', 'audit_premium_licenses');
  1. Alertes expiration :
function check_license_expiration($plugin_name, $license_data) {
    if (isset($license_data['expires']) && 
        strtotime($license_data['expires']) < strtotime('+30 days')) {
        
        // Alerte 30 jours avant expiration
        wp_mail('admin@example.com', 'Licence bientôt expirée', 
                "La licence de $plugin_name expire le {$license_data['expires']}");
    }
}

Valeur par défaut : Licences non surveillées


3.1.20 — Tests Sécurité Automatisés

Niveau : 🟡
Référence : OWASP A04 / CIS WordPress 4.20 / NIST 800-53 SI-2
MITRE ATT&CK : T1190

Description : Implémenter des tests de sécurité automatisés pour détecter les vulnérabilités dans les plugins après chaque installation ou mise à jour.

Vérification :

# Scanner automatique avec WPScan
wpscan --url https://example.com --enumerate vp --format json > plugin_scan.json
# Analyser résultats
jq '.plugins[].vulnerabilities[]?' plugin_scan.json

Remédiation :

  1. Pipeline de tests automatisés :
#!/bin/bash
# tests/security-scan.sh
SITE_URL=$1
SCAN_RESULTS="/tmp/wpscan_$(date +%s).json"

# Scan plugins
wpscan --url $SITE_URL --enumerate vp --format json --output $SCAN_RESULTS

# Analyser vulnérabilités
VULN_COUNT=$(jq '[.plugins[].vulnerabilities[]?] | length' $SCAN_RESULTS)

if [ $VULN_COUNT -gt 0 ]; then
    echo "ALERTE: $VULN_COUNT vulnérabilités détectées"
    jq '.plugins[].vulnerabilities[]?' $SCAN_RESULTS | mail -s "Vulnérabilités plugins détectées" admin@example.com
    exit 1
fi
  1. Intégration continue :
function automated_security_scan() {
    // Après mise à jour plugin
    $command = "wpscan --url " . site_url() . " --enumerate vp --format json";
    $output = shell_exec($command);
    $results = json_decode($output, true);
    
    if (isset($results['plugins'])) {
        foreach ($results['plugins'] as $plugin => $data) {
            if (!empty($data['vulnerabilities'])) {
                // Désactiver plugin vulnérable
                deactivate_plugins($plugin);
                wp_mail('admin@example.com', 'Plugin vulnérable désactivé', 
                        "Plugin $plugin désactivé automatiquement - vulnérabilités détectées");
            }
        }
    }
}
add_action('upgrader_process_complete', 'automated_security_scan');

Valeur par défaut : Tests manuels uniquement


3.1.21 — Chiffrement Données Plugins

Niveau : 🟡
Référence : OWASP A02 / CIS WordPress 4.21 / NIST 800-53 SC-28
MITRE ATT&CK : T1005

Description : Assurer que les plugins traitant des données sensibles implémentent un chiffrement approprié pour le stockage et la transmission.

Vérification :

# Rechercher données sensibles non chiffrées
grep -r "password\|api.*key\|secret" wp-content/plugins/ | grep -v "encrypt\|hash\|bcrypt"
# Vérifier utilisation SSL pour API
grep -r "http://" wp-content/plugins/ | grep -v "localhost"

Remédiation :

  1. Audit chiffrement des données :
function audit_plugin_encryption() {
    $sensitive_data_patterns = array(
        'api_key' => '/api.*key.*[\'"]([^\'"]{20,})[\'"]/',
        'password' => '/password.*[\'"]([^\'"]{8,})[\'"]/',
        'secret' => '/secret.*[\'"]([^\'"]{16,})[\'"]/'
    );
    
    $plugins_dir = WP_PLUGIN_DIR;
    $unencrypted_data = array();
    
    foreach (glob("$plugins_dir/*/*.php") as $file) {
        $content = file_get_contents($file);
        foreach ($sensitive_data_patterns as $type => $pattern) {
            if (preg_match($pattern, $content, $matches)) {
                $unencrypted_data[] = array(
                    'file' => $file,
                    'type' => $type,
                    'data' => substr($matches[1], 0, 10) . '...'
                );
            }
        }
    }
    
    if (!empty($unencrypted_data)) {
        wp_mail('admin@example.com', 'Données sensibles non chiffrées', 
                'Données sensibles détectées: ' . print_r($unencrypted_data, true));
    }
}
  1. Helper de chiffrement pour plugins :
class SecurePluginStorage {
    private static function get_key() {
        return wp_salt('AUTH_KEY');
    }
    
    public static function encrypt($data) {
        $key = self::get_key();
        $iv = openssl_random_pseudo_bytes(16);
        $encrypted = openssl_encrypt($data, 'AES-256-CBC', $key, 0, $iv);
        return base64_encode($iv . $encrypted);
    }
    
    public static function decrypt($encrypted_data) {
        $key = self::get_key();
        $data = base64_decode($encrypted_data);
        $iv = substr($data, 0, 16);
        $encrypted = substr($data, 16);
        return openssl_decrypt($encrypted, 'AES-256-CBC', $key, 0, $iv);
    }
}

Valeur par défaut : Stockage données sensibles en clair


3.1.22 — Contrôle Accès Réseau Plugins

Niveau : 🟡
Référence : OWASP A10 / CIS WordPress 4.22 / NIST 800-53 SC-7
MITRE ATT&CK : T1071

Description : Contrôler et limiter les accès réseau des plugins pour prévenir l’exfiltration de données et les communications avec des serveurs malveillants.

Vérification :

# Analyser appels réseau des plugins
grep -r "wp_remote_\|curl\|file_get_contents.*http" wp-content/plugins/ | head -20
# Vérifier domaines contactés
netstat -an | grep :80 | grep ESTABLISHED

Remédiation :

  1. Whitelist des domaines autorisés :
function filter_plugin_http_requests($result, $args, $url) {
    $allowed_domains = array(
        'api.wordpress.org',
        'downloads.wordpress.org',
        'secure.gravatar.com',
        'fonts.googleapis.com'
    );
    
    $domain = parse_url($url, PHP_URL_HOST);
    
    if (!in_array($domain, $allowed_domains)) {
        // Logger tentative accès non autorisée
        error_log("BLOCKED HTTP request to: $url");
        return new WP_Error('http_request_blocked', 'Domaine non autorisé');
    }
    
    return $result;
}
add_filter('pre_http_request', 'filter_plugin_http_requests', 10, 3);
  1. Monitoring communications :
function monitor_plugin_communications($response, $args, $url) {
    $suspicious_patterns = array(
        'base64', 'eval', 'exec', 'system', 'shell_exec'
    );
    
    if (isset($args['body'])) {
        foreach ($suspicious_patterns as $pattern) {
            if (strpos($args['body'], $pattern) !== false) {
                wp_mail('admin@example.com', 'Communication suspecte détectée', 
                        "Requête suspecte vers $url avec pattern: $pattern");
                break;
            }
        }
    }
    
    return $response;
}
add_filter('http_response', 'monitor_plugin_communications', 10, 3);

Valeur par défaut : Accès réseau illimité


3.1.23 — Validation Entrées Plugins

Niveau : 🟠
Référence : OWASP A03 / CIS WordPress 4.23 / NIST 800-53 SI-10
MITRE ATT&CK : T1190

Description : Vérifier que les plugins valident et assainissent correctement toutes les entrées utilisateurs pour prévenir les injections et autres attaques.

Vérification :

# Rechercher validation insuffisante
grep -r "\$_POST\|\$_GET\|\$_REQUEST" wp-content/plugins/ | grep -v "sanitize\|escape\|validate"
# Analyser fonctions de sanitisation
grep -r "sanitize_\|wp_kses\|esc_" wp-content/plugins/ | wc -l

Remédiation :

  1. Audit validation des entrées :
function audit_plugin_input_validation() {
    $plugins_dir = WP_PLUGIN_DIR;
    $validation_issues = array();
    
    foreach (glob("$plugins_dir/*/*.php") as $file) {
        $content = file_get_contents($file);
        
        // Rechercher $_POST, $_GET non sécurisés
        if (preg_match_all('/\$_(POST|GET|REQUEST)\[[\'"]([^\'"]+)[\'"]\]/', $content, $matches, PREG_OFFSET_CAPTURE)) {
            foreach ($matches[0] as $index => $match) {
                $line_start = strrpos(substr($content, 0, $match[1]), "\n");
                $line_end = strpos($content, "\n", $match[1]);
                $line = substr($content, $line_start, $line_end - $line_start);
                
                // Vérifier si la ligne contient une fonction de sanitisation
                if (!preg_match('/(sanitize_|wp_kses|esc_|intval|absint|wp_verify_nonce)/', $line)) {
                    $validation_issues[] = array(
                        'file' => $file,
                        'variable' => $match[0],
                        'line' => $line
                    );
                }
            }
        }
    }
    
    if (!empty($validation_issues)) {
        wp_mail('admin@example.com', 'Problèmes validation détectés', 
                'Entrées non validées: ' . print_r($validation_issues, true));
    }
}
  1. Renforcement global validation :
function enforce_input_validation() {
    // Sanitiser automatiquement toutes les entrées
    $_POST = array_map('sanitize_text_field', $_POST);
    $_GET = array_map('sanitize_text_field', $_GET);
    $_REQUEST = array_map('sanitize_text_field', $_REQUEST);
}
add_action('init', 'enforce_input_validation', 1);

Valeur par défaut : Validation dépendante du développeur plugin


3.1.24 — Gestion Erreurs et Exceptions Plugins

Niveau : 🟡
Référence : OWASP A09 / CIS WordPress 4.24 / NIST 800-53 SI-11
MITRE ATT&CK : T1005

Description : Assurer que les plugins gèrent correctement les erreurs sans révéler d’informations sensibles et avec une logging appropriée.

Vérification :

# Rechercher gestion d'erreurs
grep -r "try\|catch\|throw\|error_log" wp-content/plugins/ | wc -l
# Vérifier exposition d'erreurs
grep -r "print_r\|var_dump\|echo.*error" wp-content/plugins/

Remédiation :

  1. Standards gestion d’erreurs :
function standardize_plugin_error_handling() {
    // Gestionnaire d'erreurs global pour plugins
    set_error_handler(function($severity, $message, $file, $line) {
        if (strpos($file, WP_PLUGIN_DIR) !== false) {
            // Log sécurisé pour erreurs plugins
            error_log("PLUGIN_ERROR: [$severity] $message in $file:$line");
            
            // En production, ne pas afficher les erreurs
            if (wp_get_environment_type() === 'production') {
                return true; // Supprime l'affichage
            }
        }
        return false; // Laisse le gestionnaire par défaut
    });
}
add_action('plugins_loaded', 'standardize_plugin_error_handling', 1);
  1. Wrapper sécurisé pour plugins :
class SecurePluginLogger {
    public static function log_error($plugin_name, $message, $data = null) {
        $log_entry = array(
            'plugin' => $plugin_name,
            'timestamp' => current_time('mysql'),
            'message' => $message,
            'ip' => $_SERVER['REMOTE_ADDR'],
            'user_agent' => $_SERVER['HTTP_USER_AGENT']
        );
        
        if ($data) {
            // Nettoyer données sensibles avant log
            $log_entry['data'] = $this->sanitize_log_data($data);
        }
        
        error_log('SECURE_PLUGIN_LOG: ' . json_encode($log_entry));
    }
    
    private static function sanitize_log_data($data) {
        $sensitive_keys = array('password', 'api_key', 'secret', 'token');
        
        if (is_array($data)) {
            foreach ($data as $key => $value) {
                if (in_array(strtolower($key), $sensitive_keys)) {
                    $data[$key] = '***REDACTED***';
                }
            }
        }
        
        return $data;
    }
}

Valeur par défaut : Gestion d’erreurs variable selon plugins


3.1.25 — Documentation et Traçabilité Plugins

Niveau : 🟡
Référence : OWASP A09 / CIS WordPress 4.25 / NIST 800-53 AU-3
MITRE ATT&CK : T1070

Description : Maintenir une documentation complète des plugins installés, leurs fonctions, configurations et historique des modifications pour faciliter les audits et investigations.

Vérification :

# Documentation existante
find . -name "*plugin*doc*" -o -name "*README*" -o -name "*CHANGELOG*"
# Historique modifications
wp plugin list --format=csv --fields=name,version,status > current_plugins.csv
diff previous_plugins.csv current_plugins.csv

Remédiation :

  1. Documentation automatisée :
function generate_plugin_documentation() {
    $plugins = get_plugins();
    $active_plugins = get_option('active_plugins');
    $documentation = array();
    
    foreach ($plugins as $plugin_file => $plugin_data) {
        $doc_entry = array(
            'name' => $plugin_data['Name'],
            'version' => $plugin_data['Version'],
            'description' => $plugin_data['Description'],
            'author' => $plugin_data['Author'],
            'active' => in_array($plugin_file, $active_plugins),
            'last_updated' => get_plugin_data(WP_PLUGIN_DIR . '/' . $plugin_file)['Version'],
            'security_audit_date' => get_option("plugin_audit_$plugin_file", 'Never'),
            'configuration' => $this->get_plugin_configuration($plugin_file)
        );
        
        $documentation[] = $doc_entry;
    }
    
    // Générer rapport
    file_put_contents(ABSPATH . 'plugin-documentation.json', 
                     json_encode($documentation, JSON_PRETTY_PRINT));
    
    return $documentation;
}
  1. Historique des changements :
function track_plugin_changes($plugin, $network_activation) {
    $change_log = get_option('plugin_change_log', array());
    
    $change_entry = array(
        'timestamp' => current_time('mysql'),
        'plugin' => $plugin,
        'action' => current_filter(), // activated_plugin, deactivated_plugin
        'user' => wp_get_current_user()->user_login,
        'ip' => $_SERVER['REMOTE_ADDR'],
        'user_agent' => $_SERVER['HTTP_USER_AGENT']
    );
    
    $change_log[] = $change_entry;
    
    // Garder seulement les 1000 dernières entrées
    if (count($change_log) > 1000) {
        $change_log = array_slice($change_log, -1000);
    }
    
    update_option('plugin_change_log', $change_log);
}
add_action('activated_plugin', 'track_plugin_changes', 10, 2);
add_action('deactivated_plugin', 'track_plugin_changes', 10, 2);

Valeur par défaut : Documentation manuelle et incomplète


S4 — THÈMES (15 contrôles)

Cette section couvre la sécurité des thèmes WordPress, leur configuration et leur maintenance.

4.1.1 — Thème Actif Sécurisé et À Jour

Niveau : 🔴
Référence : OWASP A06 / CIS WordPress 5.1 / NIST 800-53 SI-2
MITRE ATT&CK : T1190

Description : Le thème actif doit être maintenu à jour et exempt de vulnérabilités connues. Les thèmes obsolètes constituent une porte d’entrée majeure pour les attaquants.

Vérification :

# Vérifier thème actif et version
wp theme list --status=active --format=table --fields=name,version,update_version
# Scanner vulnérabilités thèmes
wpscan --url https://example.com --enumerate vt --no-banner
# Vérifier dernière mise à jour
wp theme get $(wp theme list --status=active --field=name) --field=version

Remédiation :

  1. Mise à jour immédiate du thème :
wp theme update --all
wp theme update $(wp theme list --status=active --field=name)
  1. Auto-update pour le thème actif :
wp theme auto-updates enable $(wp theme list --status=active --field=name)
  1. Surveillance des mises à jour :
function monitor_theme_updates() {
    $current_theme = get_stylesheet();
    $theme_updates = get_site_transient('update_themes');
    
    if (isset($theme_updates->response[$current_theme])) {
        wp_mail('admin@example.com', 'Mise à jour thème disponible', 
                "Une mise à jour est disponible pour le thème actif: $current_theme");
    }
}
wp_schedule_event(time(), 'daily', 'monitor_theme_updates');

Valeur par défaut : Mises à jour manuelles


4.1.2 — Suppression Thèmes Inactifs

Niveau : 🟠
Référence : OWASP A04 / CIS WordPress 5.2 / NIST 800-53 CM-7
MITRE ATT&CK : T1190

Description : Les thèmes inactifs représentent une surface d’attaque inutile. Ils peuvent contenir des vulnérabilités exploitables même sans être activés et doivent être supprimés.

Vérification :

# Lister thèmes inactifs
wp theme list --status=inactive --format=table
# Compter thèmes inactifs
wp theme list --status=inactive --format=count
# Vérifier vulnérabilités dans thèmes inactifs
wpscan --url https://example.com --enumerate vt --no-banner

Remédiation :

  1. Supprimer tous les thèmes inactifs :
wp theme delete $(wp theme list --status=inactive --field=name)
  1. Garder seulement un thème de fallback :
# Garder un thème WordPress par défaut comme backup
wp theme install twentytwentythree
wp theme delete $(wp theme list --status=inactive --field=name | grep -v twentytwentythree)
  1. Politique de suppression automatique :
function cleanup_inactive_themes() {
    $all_themes = wp_get_themes();
    $active_theme = get_stylesheet();
    $parent_theme = get_template();
    
    // Garder seulement le thème actif et son parent (si child theme)
    $keep_themes = array($active_theme, $parent_theme, 'twentytwentythree');
    
    foreach ($all_themes as $theme_slug => $theme) {
        if (!in_array($theme_slug, $keep_themes)) {
            delete_theme($theme_slug);
        }
    }
}
// Exécuter lors des mises à jour majeures WordPress
add_action('upgrader_process_complete', 'cleanup_inactive_themes');

Valeur par défaut : Accumulation de thèmes inactifs


4.1.3 — Child Theme Obligatoire

Niveau : 🟠
Référence : CIS WordPress 5.3 / NIST 800-53 CM-3
MITRE ATT&CK : T1565

Description : Utiliser un child theme préserve les personnalisations lors des mises à jour du thème parent et évite la perte de modifications de sécurité personnalisées.

Vérification :

# Vérifier si child theme utilisé
wp theme list --status=active --format=json | jq '.[].parent'
# Examiner structure du thème
ls -la wp-content/themes/$(wp theme list --status=active --field=name)/
# Vérifier fichier style.css
head -10 wp-content/themes/$(wp theme list --status=active --field=name)/style.css

Remédiation :

  1. Créer un child theme :
# Créer répertoire child theme
PARENT_THEME=$(wp theme list --status=active --field=name)
CHILD_THEME="${PARENT_THEME}-child"
mkdir wp-content/themes/$CHILD_THEME

# Créer style.css
cat > wp-content/themes/$CHILD_THEME/style.css << EOL
/*
Theme Name: $CHILD_THEME
Description: Child theme de $PARENT_THEME
Template: $PARENT_THEME
Version: 1.0
*/

@import url("../$PARENT_THEME/style.css");
EOL

# Créer functions.php
cat > wp-content/themes/$CHILD_THEME/functions.php << 'EOL'
<?php
function child_theme_enqueue_styles() {
    wp_enqueue_style('parent-style', get_template_directory_uri() . '/style.css');
    wp_enqueue_style('child-style', get_stylesheet_directory_uri() . '/style.css', array('parent-style'));
}
add_action('wp_enqueue_scripts', 'child_theme_enqueue_styles');
EOL

# Activer le child theme
wp theme activate $CHILD_THEME

Valeur par défaut : Thème parent directement modifié


4.1.4 — Détection Thèmes Nulled/Piratés

Niveau : 🔴
Référence : OWASP A08 / CIS WordPress 5.4 / NIST 800-53 SI-3
MITRE ATT&CK : T1505

Description : Les thèmes piratés contiennent souvent des backdoors et malwares. Détecter et éliminer ces thèmes est critique pour la sécurité.

Vérification :

# Scanner code malveillant dans thèmes
find wp-content/themes/ -name "*.php" -exec grep -l "eval\|base64_decode\|gzinflate\|str_rot13" {} \;
# Vérifier intégrité avec checksums
wp theme verify-checksums --all
# Rechercher backdoors connues
grep -r "c99\|r57\|WSO\|FilesMan" wp-content/themes/

Remédiation :

  1. Supprimer thèmes suspects :
# Identifier et supprimer thèmes compromis
find wp-content/themes/ -name "*.php" -exec grep -l "eval.*base64_decode" {} \; | head -5
# Supprimer thème suspect (remplacer par nom réel)
wp theme delete suspicious-theme
  1. Scanner automatisé malware :
#!/bin/bash
# Script de détection malware thèmes
MALWARE_PATTERNS="eval.*base64_decode|gzinflate|str_rot13|system.*\$_|passthru"

find wp-content/themes/ -name "*.php" | while read file; do
    if grep -qE "$MALWARE_PATTERNS" "$file"; then
        echo "SUSPECT: $file"
        # Quarantaine
        mv "$file" "$file.quarantine"
    fi
done
  1. Validation source thèmes :
function validate_theme_source($theme_slug) {
    // Vérifier si thème provient du dépôt officiel WordPress
    $response = wp_remote_get("https://api.wordpress.org/themes/info/1.1/?action=theme_information&request[slug]=$theme_slug");
    
    if (is_wp_error($response) || wp_remote_retrieve_response_code($response) !== 200) {
        // Thème non officiel - vérifier intégrité
        $theme_path = get_theme_root() . "/$theme_slug";
        $suspicious_files = array();
        
        foreach (glob("$theme_path/*.php") as $file) {
            $content = file_get_contents($file);
            if (preg_match('/(eval|base64_decode|gzinflate).*\(/', $content)) {
                $suspicious_files[] = $file;
            }
        }
        
        if (!empty($suspicious_files)) {
            wp_mail('admin@example.com', 'Thème suspect détecté', 
                    "Fichiers suspects dans $theme_slug: " . implode(', ', $suspicious_files));
        }
    }
}

Valeur par défaut : Aucune vérification automatique


4.1.5 — Désactivation Éditeur de Thème

Niveau : 🟠
Référence : OWASP A01 / CIS WordPress 5.5 / NIST 800-53 AC-6
MITRE ATT&CK : T1105

Description : L’éditeur de thème permet la modification de code PHP directement depuis l’administration WordPress. Cette fonction doit être désactivée pour éviter l’injection de code malveillant.

Vérification :

# Vérifier si éditeur désactivé
grep "DISALLOW_FILE_EDIT" wp-config.php
# Tester accès éditeur de thème
curl -s https://example.com/wp-admin/theme-editor.php | grep -i "file editing"

Remédiation :

  1. Désactiver l’éditeur dans wp-config.php :
define('DISALLOW_FILE_EDIT', true);
  1. Vérifier suppression du menu :
// Vérifier que le menu "Éditeur" n'est plus visible
add_action('admin_init', function() {
    if (current_user_can('edit_themes')) {
        remove_submenu_page('themes.php', 'theme-editor.php');
    }
});
  1. Protection supplémentaire via .htaccess :
<Files "theme-editor.php">
Order allow,deny
Deny from all
</Files>
<Files "plugin-editor.php">
Order allow,deny
Deny from all
</Files>

Valeur par défaut : Éditeur de thème activé


4.1.6 — Audit Vulnérabilités Thèmes

Niveau : 🟠
Référence : OWASP A06 / CIS WordPress 5.6 / NIST 800-53 SI-2
MITRE ATT&CK : T1190

Description : Effectuer des audits réguliers des thèmes contre les bases de vulnérabilités connues pour identifier et corriger rapidement les failles de sécurité.

Vérification :

# Scanner avec WPScan
wpscan --url https://example.com --enumerate vt --api-token YOUR_TOKEN --no-banner
# Vérifier base CVE
curl -s "https://cve.circl.lu/api/search/wordpress theme" | jq '.[] | select(.summary | contains("theme"))'

Remédiation :

  1. Audit automatisé quotidien :
#!/bin/bash
# Script d'audit thèmes
wpscan --url https://example.com --enumerate vt --format json --api-token $API_TOKEN > theme_scan.json

# Analyser résultats
if jq -e '.themes[].vulnerabilities[]?' theme_scan.json > /dev/null; then
    echo "ALERTE: Vulnérabilités détectées dans les thèmes"
    jq '.themes[].vulnerabilities[]?' theme_scan.json | mail -s "Vulnérabilités thèmes" admin@example.com
fi
  1. Monitoring continu :
function continuous_theme_monitoring() {
    $themes = wp_get_themes();
    
    foreach ($themes as $theme_slug => $theme) {
        // Vérifier version contre base de vulnérabilités
        $version = $theme->get('Version');
        $response = wp_remote_get("https://wpscan.com/api/v3/themes/$theme_slug");
        
        if (!is_wp_error($response)) {
            $data = json_decode(wp_remote_retrieve_body($response), true);
            if (isset($data['vulnerabilities']) && !empty($data['vulnerabilities'])) {
                // Alerter sur vulnérabilités
                wp_mail('admin@example.com', 'Vulnérabilité thème détectée', 
                        "Vulnérabilité dans $theme_slug version $version");
            }
        }
    }
}
wp_schedule_event(time(), 'daily', 'continuous_theme_monitoring');

Valeur par défaut : Audits manuels occasionnels


4.1.7 — Validation Code Personnalisé Thèmes

Niveau : 🟡
Référence : OWASP A03 / CIS WordPress 5.7 / NIST 800-53 SI-10
MITRE ATT&CK : T1190

Description : Valider tout code personnalisé ajouté aux thèmes pour s’assurer qu’il respecte les bonnes pratiques de sécurité WordPress et ne contient pas de vulnérabilités.

Vérification :

# Analyser code personnalisé
find wp-content/themes/ -name "functions.php" -exec grep -l "add_action\|add_filter" {} \;
# Vérifier échappement des sorties
grep -r "echo\|print" wp-content/themes/ | grep -v "esc_\|wp_kses"
# Analyser validation des entrées
grep -r "\$_POST\|\$_GET" wp-content/themes/ | grep -v "sanitize"

Remédiation :

  1. Audit sécurisé du code :
function audit_theme_security() {
    $theme_dir = get_stylesheet_directory();
    $security_issues = array();
    
    // Patterns de sécurité à vérifier
    $patterns = array(
        'unescaped_output' => '/echo\s+\$[^;]*(?!.*esc_)/i',
        'unsanitized_input' => '/\$_(POST|GET|REQUEST)\[[^\]]+\](?!.*sanitize)/i',
        'dangerous_functions' => '/(eval|exec|system|shell_exec|passthru)\s*\(/i'
    );
    
    foreach (glob("$theme_dir/*.php") as $file) {
        $content = file_get_contents($file);
        
        foreach ($patterns as $type => $pattern) {
            if (preg_match_all($pattern, $content, $matches, PREG_OFFSET_CAPTURE)) {
                $security_issues[$file][$type] = $matches[0];
            }
        }
    }
    
    if (!empty($security_issues)) {
        wp_mail('admin@example.com', 'Problèmes sécurité thème détectés', 
                print_r($security_issues, true));
    }
    
    return $security_issues;
}
  1. Standards de développement sécurisé :
// Exemple de code sécurisé pour functions.php
function secure_theme_customization() {
    // Validation et sanitisation correctes
    if (isset($_POST['custom_field']) && wp_verify_nonce($_POST['nonce'], 'custom_action')) {
        $safe_value = sanitize_text_field($_POST['custom_field']);
        update_option('theme_custom_field', $safe_value);
    }
    
    // Échappement correct des sorties
    $option_value = get_option('theme_custom_field', '');
    echo esc_html($option_value);
}

Valeur par défaut : Code personnalisé non audité


4.1.8 — Protection Fichiers Thème Sensibles

Niveau : 🟡
Référence : OWASP A05 / CIS WordPress 5.8 / NIST 800-53 AC-3
MITRE ATT&CK : T1005

Description : Protéger l’accès aux fichiers sensibles des thèmes (functions.php, configuration, etc.) contre l’accès web direct non autorisé.

Vérification :

# Tester accès direct aux fichiers thème
curl -s https://example.com/wp-content/themes/active-theme/functions.php
curl -s https://example.com/wp-content/themes/active-theme/config.php
# Vérifier permissions fichiers
ls -la wp-content/themes/$(wp theme list --status=active --field=name)/

Remédiation :

  1. Protection via .htaccess dans le thème :
# wp-content/themes/theme-name/.htaccess
<FilesMatch "\.(php|inc|conf)$">
Order allow,deny
Deny from all
</FilesMatch>

# Autoriser seulement index.php et style.css publiquement
<FilesMatch "^(index\.php|style\.css|screenshot\.(png|jpg))$">
Order allow,deny
Allow from all
</FilesMatch>
  1. En-têtes de sécurité PHP :
// Ajouter en début de functions.php
if (!defined('ABSPATH')) {
    exit; // Sortie si accès direct
}

// Protection supplémentaire
if (!function_exists('wp_head')) {
    http_response_code(403);
    die('Accès direct interdit');
}
  1. Permissions système appropriées :
# Permissions sécurisées pour thèmes
find wp-content/themes/ -type f -name "*.php" -exec chmod 644 {} \;
find wp-content/themes/ -type d -exec chmod 755 {} \;
# functions.php plus restrictif
chmod 640 wp-content/themes/*/functions.php

Valeur par défaut : Fichiers potentiellement accessibles


4.1.9 — Gestion Versions et Rollback Thèmes

Niveau : 🟡
Référence : CIS WordPress 5.9 / NIST 800-53 CM-3
MITRE ATT&CK : T1565

Description : Maintenir un système de versioning des thèmes et la capacité de rollback rapide en cas de problème lors des mises à jour.

Vérification :

# Historique des versions
wp theme list --format=json | jq '.[] | {name: .name, version: .version}'
# Backups existants
ls -la backups/themes/ 2>/dev/null || echo "Pas de backups thèmes"

Remédiation :

  1. Backup automatique avant mises à jour :
#!/bin/bash
# Script de backup thème avant mise à jour
THEME_NAME=$(wp theme list --status=active --field=name)
BACKUP_DIR="backups/themes/$(date +%Y%m%d_%H%M%S)"

mkdir -p $BACKUP_DIR
cp -r wp-content/themes/$THEME_NAME $BACKUP_DIR/
echo "Backup thème créé: $BACKUP_DIR"

# Garder seulement les 10 derniers backups
ls -t backups/themes/ | tail -n +11 | xargs -r rm -rf
  1. Système de rollback :
function theme_rollback_system() {
    if (isset($_POST['rollback_theme']) && wp_verify_nonce($_POST['nonce'], 'theme_rollback')) {
        $backup_path = sanitize_text_field($_POST['backup_path']);
        $current_theme = get_stylesheet();
        
        if (is_dir("backups/themes/$backup_path")) {
            // Backup actuel avant rollback
            $current_backup = "backups/themes/pre-rollback-" . date('Y-m-d-H-i-s');
            mkdir($current_backup, 0755, true);
            exec("cp -r wp-content/themes/$current_theme $current_backup/");
            
            // Restaurer backup
            exec("rm -rf wp-content/themes/$current_theme");
            exec("cp -r backups/themes/$backup_path/$current_theme wp-content/themes/");
            
            wp_redirect(admin_url('themes.php?rollback=success'));
            exit;
        }
    }
}
add_action('admin_init', 'theme_rollback_system');

Valeur par défaut : Pas de système de rollback


4.1.10 — Monitoring Modifications Thèmes

Niveau : 🟡
Référence : OWASP A09 / CIS WordPress 5.10 / NIST 800-53 AU-2
MITRE ATT&CK : T1070

Description : Surveiller toutes les modifications des fichiers de thèmes pour détecter les changements non autorisés ou l’injection de code malveillant.

Vérification :

# Vérifier intégrité fichiers thème
find wp-content/themes/ -name "*.php" -exec md5sum {} \; > theme_checksums.txt
# Comparer avec checksums précédents
diff theme_checksums_previous.txt theme_checksums.txt

Remédiation :

  1. Monitoring intégrité fichiers :
function monitor_theme_file_integrity() {
    $theme_dir = get_stylesheet_directory();
    $stored_hashes = get_option('theme_file_hashes', array());
    $current_hashes = array();
    $changes_detected = false;
    
    foreach (glob("$theme_dir/*.php") as $file) {
        $relative_path = str_replace($theme_dir . '/', '', $file);
        $current_hash = md5_file($file);
        $current_hashes[$relative_path] = $current_hash;
        
        if (isset($stored_hashes[$relative_path]) && 
            $stored_hashes[$relative_path] !== $current_hash) {
            // Fichier modifié
            $changes_detected = true;
            $this->log_file_change($file, 'modified');
        } elseif (!isset($stored_hashes[$relative_path])) {
            // Nouveau fichier
            $changes_detected = true;
            $this->log_file_change($file, 'added');
        }
    }
    
    // Vérifier fichiers supprimés
    foreach ($stored_hashes as $file => $hash) {
        if (!isset($current_hashes[$file])) {
            $changes_detected = true;
            $this->log_file_change("$theme_dir/$file", 'deleted');
        }
    }
    
    if ($changes_detected) {
        wp_mail('admin@example.com', 'Modifications thème détectées', 
                'Des modifications ont été détectées dans les fichiers du thème.');
    }
    
    update_option('theme_file_hashes', $current_hashes);
}

function log_file_change($file, $action) {
    $log_entry = array(
        'timestamp' => current_time('mysql'),
        'file' => $file,
        'action' => $action,
        'ip' => $_SERVER['REMOTE_ADDR'] ?? 'unknown',
        'user_agent' => $_SERVER['HTTP_USER_AGENT'] ?? 'unknown'
    );
    
    error_log('THEME_FILE_CHANGE: ' . json_encode($log_entry));
}

wp_schedule_event(time(), 'hourly', 'monitor_theme_file_integrity');

Valeur par défaut : Modifications non surveillées


4.1.11 — Validation Headers et Métadonnées Thèmes

Niveau : 🟡
Référence : CIS WordPress 5.11 / NIST 800-53 SI-7
MITRE ATT&CK : T1195

Description : Valider les headers et métadonnées des thèmes pour s’assurer de leur authenticité et détecter les modifications malveillantes.

Vérification :

# Examiner headers des thèmes
head -20 wp-content/themes/*/style.css
# Vérifier métadonnées
grep -r "Theme Name\|Version\|Author" wp-content/themes/*/style.css

Remédiation :

  1. Validation des métadonnées :
function validate_theme_metadata() {
    $themes = wp_get_themes();
    $validation_results = array();
    
    foreach ($themes as $theme_slug => $theme) {
        $theme_data = array(
            'name' => $theme->get('Name'),
            'version' => $theme->get('Version'),
            'author' => $theme->get('Author'),
            'description' => $theme->get('Description'),
            'uri' => $theme->get('ThemeURI')
        );
        
        // Vérifier cohérence des métadonnées
        $issues = array();
        
        // Version suspecte
        if (preg_match('/[<>"\']/', $theme_data['version'])) {
            $issues[] = 'Version contient des caractères suspects';
        }
        
        // Auteur suspect
        if (preg_match('/(nulled|cracked|free|download)/i', $theme_data['author'])) {
            $issues[] = 'Auteur suspect (possiblement piraté)';
        }
        
        // URI suspecte
        if (!empty($theme_data['uri']) && !filter_var($theme_data['uri'], FILTER_VALIDATE_URL)) {
            $issues[] = 'URI invalide';
        }
        
        if (!empty($issues)) {
            $validation_results[$theme_slug] = $issues;
        }
    }
    
    if (!empty($validation_results)) {
        wp_mail('admin@example.com', 'Thèmes avec métadonnées suspectes', 
                print_r($validation_results, true));
    }
    
    return $validation_results;
}

Valeur par défaut : Métadonnées non validées


4.1.12 — Contrôle Fonctionnalités Thème

Niveau : 🟡
Référence : OWASP A04 / CIS WordPress 5.12 / NIST 800-53 CM-7
MITRE ATT&CK : T1505

Description : Auditer et contrôler les fonctionnalités activées par le thème pour s’assurer qu’elles sont nécessaires et sécurisées.

Vérification :

# Analyser fonctionnalités du thème
grep -r "add_theme_support\|remove_theme_support" wp-content/themes/
# Vérifier hooks et actions
grep -r "add_action\|add_filter" wp-content/themes/*/functions.php

Remédiation :

  1. Audit des fonctionnalités :
function audit_theme_features() {
    $theme_supports = array();
    $dangerous_features = array('post-thumbnails', 'custom-header', 'custom-background');
    
    // Lister toutes les fonctionnalités supportées
    global $_wp_theme_features;
    foreach ($_wp_theme_features as $feature => $data) {
        if (current_theme_supports($feature)) {
            $theme_supports[] = $feature;
        }
    }
    
    // Analyser actions/filters du thème
    $theme_hooks = array();
    $functions_file = get_stylesheet_directory() . '/functions.php';
    
    if (file_exists($functions_file)) {
        $content = file_get_contents($functions_file);
        preg_match_all('/add_(action|filter)\s*\(\s*[\'"]([^\'"]+)[\'"]/', $content, $matches);
        
        for ($i = 0; $i < count($matches[0]); $i++) {
            $theme_hooks[] = array(
                'type' => $matches[1][$i],
                'hook' => $matches[2][$i]
            );
        }
    }
    
    $audit_report = array(
        'theme_supports' => $theme_supports,
        'theme_hooks' => $theme_hooks,
        'timestamp' => current_time('mysql')
    );
    
    update_option('theme_features_audit', $audit_report);
    return $audit_report;
}
  1. Désactivation fonctionnalités non nécessaires :
function disable_unnecessary_theme_features() {
    // Désactiver fonctionnalités potentiellement dangereuses
    remove_theme_support('custom-header');
    remove_theme_support('custom-background');
    
    // Désactiver éditeur de fichiers si pas déjà fait
    if (!defined('DISALLOW_FILE_EDIT')) {
        define('DISALLOW_FILE_EDIT', true);
    }
    
    // Retirer générateur WordPress du header
    remove_action('wp_head', 'wp_generator');
}
add_action('after_setup_theme', 'disable_unnecessary_theme_features');

Valeur par défaut : Toutes les fonctionnalités thème activées


4.1.13 — Sécurisation Assets Thème

Niveau : 🟡
Référence : OWASP A05 / CIS WordPress 5.13 / NIST 800-53 SC-8
MITRE ATT&CK : T1071

Description : Sécuriser le chargement des assets du thème (CSS, JS, images) pour prévenir les attaques XSS et l’injection de contenu malveillant.

Vérification :

# Analyser chargement des assets
grep -r "wp_enqueue_\|wp_register_" wp-content/themes/*/functions.php
# Vérifier intégrité des assets
find wp-content/themes/ -name "*.js" -exec grep -l "eval\|document.write" {} \;

Remédiation :

  1. Chargement sécurisé des assets :
function secure_theme_assets() {
    // Utiliser HTTPS pour tous les assets
    if (is_ssl()) {
        // Forcer HTTPS pour les assets externes
        add_filter('script_loader_src', 'force_ssl_assets');
        add_filter('style_loader_src', 'force_ssl_assets');
    }
    
    // Ajouter intégrité pour assets externes
    add_filter('script_loader_tag', 'add_integrity_to_scripts', 10, 3);
    add_filter('style_loader_tag', 'add_integrity_to_styles', 10, 4);
}

function force_ssl_assets($src) {
    return str_replace('http://', 'https://', $src);
}

function add_integrity_to_scripts($tag, $handle, $src) {
    // Ajouter SRI pour scripts externes critiques
    $external_scripts = array('jquery', 'bootstrap');
    
    if (in_array($handle, $external_scripts) && strpos($src, home_url()) === false) {
        // Calculer hash SRI si nécessaire
        $integrity = get_option("script_integrity_$handle");
        if ($integrity) {
            $tag = str_replace('<script ', "<script integrity='$integrity' crossorigin='anonymous' ", $tag);
        }
    }
    
    return $tag;
}

add_action('wp_enqueue_scripts', 'secure_theme_assets');
  1. Validation assets du thème :
function validate_theme_assets() {
    $theme_dir = get_stylesheet_directory();
    $suspicious_patterns = array(
        'eval(',
        'document.write(',
        'innerHTML',
        'outerHTML'
    );
    
    foreach (glob("$theme_dir/*.js") as $js_file) {
        $content = file_get_contents($js_file);
        
        foreach ($suspicious_patterns as $pattern) {
            if (strpos($content, $pattern) !== false) {
                wp_mail('admin@example.com', 'Asset JavaScript suspect', 
                        "Pattern suspect '$pattern' trouvé dans $js_file");
            }
        }
    }
}

Valeur par défaut : Chargement assets sans validation


4.1.14 — Isolation Thème Sandbox

Niveau : 🟡
Référence : OWASP A04 / CIS WordPress 5.14 / NIST 800-53 SC-7
MITRE ATT&CK : T1505

Description : Implémenter des mécanismes d’isolation pour limiter l’impact d’une compromission du thème sur le reste du système.

Vérification :

# Vérifier isolation du thème
ls -la wp-content/themes/*/
# Permissions et propriétaire
stat wp-content/themes/*/functions.php

Remédiation :

  1. Isolation par permissions :
# Créer utilisateur dédié pour thèmes
sudo useradd -r -s /bin/false wp-theme-user
sudo chown -R wp-theme-user:wp-theme-user wp-content/themes/
# Permissions restrictives
find wp-content/themes/ -type f -exec chmod 644 {} \;
find wp-content/themes/ -type d -exec chmod 755 {} \;
  1. Limitation des capacités thème :
function restrict_theme_capabilities() {
    // Désactiver fonctions dangereuses pour les thèmes
    $dangerous_functions = array('exec', 'system', 'shell_exec', 'passthru', 'eval');
    
    foreach ($dangerous_functions as $function) {
        if (function_exists($function)) {
            // Log tentative d'utilisation
            add_filter("pre_option_active_plugins", function($plugins) use ($function) {
                $backtrace = debug_backtrace();
                foreach ($backtrace as $trace) {
                    if (isset($trace['file']) && strpos($trace['file'], '/themes/') !== false) {
                        error_log("SECURITY: Tentative d'utilisation de $function dans thème: " . $trace['file']);
                        wp_die("Fonction $function interdite dans les thèmes");
                    }
                }
                return $plugins;
            });
        }
    }
}
add_action('after_setup_theme', 'restrict_theme_capabilities');

Valeur par défaut : Pas d’isolation spécifique


4.1.15 — Documentation et Maintenance Thèmes

Niveau : 🟢
Référence : CIS WordPress 5.15 / NIST 800-53 CM-8
MITRE ATT&CK : T1070

Description : Maintenir une documentation complète des thèmes, leurs personnalisations et un planning de maintenance régulier.

Vérification :

# Documentation existante
find . -name "*theme*doc*" -o -name "*README*" | grep -i theme
# Historique des modifications
ls -la wp-content/themes/*/changelog.txt 2>/dev/null

Remédiation :

  1. Documentation automatisée :
function generate_theme_documentation() {
    $themes = wp_get_themes();
    $documentation = array();
    
    foreach ($themes as $theme_slug => $theme) {
        $theme_info = array(
            'name' => $theme->get('Name'),
            'version' => $theme->get('Version'),
            'description' => $theme->get('Description'),
            'author' => $theme->get('Author'),
            'template' => $theme->get('Template'),
            'active' => ($theme_slug === get_stylesheet()),
            'parent_theme' => $theme->parent() ? $theme->parent()->get('Name') : null,
            'customizations' => $this->get_theme_customizations($theme_slug),
            'last_modified' => $this->get_theme_last_modified($theme_slug),
            'security_scan_date' => get_option("theme_scan_date_$theme_slug", 'Never')
        );
        
        $documentation[$theme_slug] = $theme_info;
    }
    
    // Générer rapport
    file_put_contents(ABSPATH . 'theme-documentation.json', 
                     json_encode($documentation, JSON_PRETTY_PRINT));
    
    return $documentation;
}

function get_theme_customizations($theme_slug) {
    $customizations = array();
    $theme_dir = get_theme_root() . "/$theme_slug";
    
    // Vérifier fichiers personnalisés
    $custom_files = array('functions.php', 'style.css', 'custom.css');
    
    foreach ($custom_files as $file) {
        if (file_exists("$theme_dir/$file")) {
            $customizations[$file] = array(
                'size' => filesize("$theme_dir/$file"),
                'modified' => date('Y-m-d H:i:s', filemtime("$theme_dir/$file"))
            );
        }
    }
    
    return $customizations;
}
  1. Planning de maintenance :
function schedule_theme_maintenance() {
    // Planifier vérifications mensuelles
    if (!wp_next_scheduled('monthly_theme_maintenance')) {
        wp_schedule_event(time(), 'monthly', 'monthly_theme_maintenance');
    }
}

function monthly_theme_maintenance() {
    // Audit complet des thèmes
    $audit_results = array(
        'vulnerability_scan' => $this->scan_theme_vulnerabilities(),
        'file_integrity' => $this->check_theme_integrity(),
        'performance_impact' => $this->measure_theme_performance(),
        'recommendations' => $this->generate_maintenance_recommendations()
    );
    
    // Envoyer rapport de maintenance
    wp_mail('admin@example.com', 'Rapport maintenance thèmes mensuel', 
            wp_json_encode($audit_results, JSON_PRETTY_PRINT));
}

add_action('init', 'schedule_theme_maintenance');
add_action('monthly_theme_maintenance', 'monthly_theme_maintenance');

Valeur par défaut : Documentation manuelle et incomplète


S5 — PERMISSIONS FICHIERS & RÉPERTOIRES (20 contrôles)

Cette section traite de la sécurisation des permissions et de l’accès aux fichiers et répertoires WordPress.

5.1.1 — wp-config.php Permissions Restrictives

Niveau : 🔴
Référence : OWASP A05 / CIS WordPress 6.1 / NIST 800-53 AC-3
MITRE ATT&CK : T1005

Description : Le fichier wp-config.php contient des informations critiques (credentials DB, clés de sécurité). Il doit avoir des permissions très restrictives et être protégé contre l’accès web.

Vérification :

# Vérifier permissions wp-config.php
ls -la wp-config.php
stat -c "%a %n" wp-config.php
# Test accès web
curl -s https://example.com/wp-config.php | head -5
curl -s https://example.com/wp-config.php.bak | head -5

Remédiation :

  1. Permissions système appropriées :
# Permissions restrictives pour wp-config.php
chmod 600 wp-config.php
chown www-data:www-data wp-config.php
# Vérifier résultat
ls -la wp-config.php
  1. Protection web via .htaccess :
# .htaccess racine
<Files wp-config.php>
Order allow,deny
Deny from all
</Files>

<Files wp-config.php.bak>
Order allow,deny  
Deny from all
</Files>

<Files "wp-config*">
Order allow,deny
Deny from all
</Files>
  1. Déplacement hors web root :
# Déplacer wp-config.php un niveau au-dessus
mv wp-config.php ../wp-config.php
# WordPress le trouvera automatiquement

Valeur par défaut : 644 (lisible par tous)


5.1.2 — .htaccess Permissions et Protection

Niveau : 🟠
Référence : OWASP A05 / CIS WordPress 6.2 / NIST 800-53 AC-3
MITRE ATT&CK : T1005

Description : Le fichier .htaccess contrôle la configuration du serveur web. Il doit être protégé en écriture et contre la modification non autorisée pour maintenir les règles de sécurité.

Vérification :

# Vérifier permissions .htaccess
ls -la .htaccess
stat -c "%a %n" .htaccess
# Vérifier contenu
cat .htaccess | head -10

Remédiation :

  1. Permissions appropriées :
# Lecture seule pour .htaccess
chmod 644 .htaccess
chown www-data:www-data .htaccess
# Immutable (optionnel, nécessite droits root)
sudo chattr +i .htaccess
  1. Protection dans .htaccess lui-même :
# Auto-protection du .htaccess
<Files .htaccess>
Order allow,deny
Deny from all
</Files>

# Protection fichiers de configuration
<FilesMatch "\.(htaccess|htpasswd|ini|log|sh|inc|bak)$">
Order allow,deny
Deny from all
</FilesMatch>
  1. Monitoring modifications :
function monitor_htaccess_changes() {
    $htaccess_file = ABSPATH . '.htaccess';
    $stored_hash = get_option('htaccess_hash');
    
    if (file_exists($htaccess_file)) {
        $current_hash = md5_file($htaccess_file);
        
        if ($stored_hash && $stored_hash !== $current_hash) {
            // .htaccess modifié
            wp_mail('admin@example.com', '.htaccess modifié', 
                    'Le fichier .htaccess a été modifié. Vérifiez les changements.');
        }
        
        update_option('htaccess_hash', $current_hash);
    }
}
wp_schedule_event(time(), 'hourly', 'monitor_htaccess_changes');

Valeur par défaut : 644 (modifiable par le serveur web)


5.1.3 — Répertoire wp-content/uploads Sécurisé

Niveau : 🔴
Référence : OWASP A04 / CIS WordPress 6.3 / NIST 800-53 SI-3
MITRE ATT&CK : T1105

Description : Le répertoire uploads est souvent ciblé pour l’upload de webshells. L’exécution PHP doit y être désactivée et les types de fichiers strictement contrôlés.

Vérification :

# Tester exécution PHP dans uploads
echo "<?php echo 'PHP executable'; ?>" > wp-content/uploads/test.php
curl -s https://example.com/wp-content/uploads/test.php
rm wp-content/uploads/test.php
# Vérifier .htaccess uploads
ls -la wp-content/uploads/.htaccess

Remédiation :

  1. Désactiver exécution PHP via .htaccess dans wp-content/uploads/
  2. Permissions appropriées : chmod 755 uploads/, fichiers 644
  3. Validation types MIME stricte via hooks WordPress

Valeur par défaut : Exécution PHP possible


5.1.4 — Désactivation Directory Listing

Niveau : 🟠
Référence : OWASP A05 / CIS WordPress 6.4 / NIST 800-53 CM-7
MITRE ATT&CK : T1083

Description : Le directory listing révèle la structure des fichiers aux attaquants. Il doit être désactivé sur tous les répertoires WordPress pour empêcher la reconnaissance.

Vérification :

# Tester directory listing sur différents répertoires
curl -s https://example.com/wp-content/ | grep -i "index of"
curl -s https://example.com/wp-includes/ | grep -i "index of"
curl -s https://example.com/wp-content/themes/ | grep -i "index of"

Remédiation :

  1. Désactivation globale via .htaccess : Options -Indexes
  2. Fichiers index.php vides dans répertoires sensibles
  3. Configuration serveur Nginx : autoindex off

Valeur par défaut : Directory listing souvent activé


5.1.5 — Protection wp-includes

Niveau : 🟠
Référence : OWASP A05 / CIS WordPress 6.5 / NIST 800-53 AC-3
MITRE ATT&CK : T1005

Description : Le répertoire wp-includes contient le cœur de WordPress et ne devrait pas être accessible directement via le web, sauf pour les assets nécessaires.

Vérification :

# Tester accès direct aux fichiers wp-includes
curl -s https://example.com/wp-includes/version.php
curl -s https://example.com/wp-includes/wp-db.php
# Vérifier assets légitimes
curl -s -I https://example.com/wp-includes/css/admin-bar.min.css

Remédiation :

  1. Protection sélective wp-includes via .htaccess
  2. Bloquer .php, autoriser CSS/JS/images
  3. Hooks PHP pour bloquer accès direct

Valeur par défaut : Accès direct possible


S6 — BASE DE DONNÉES (20 contrôles)

Cette section couvre la sécurisation de la base de données WordPress et de ses accès.

6.1.1 — Préfixe Table Personnalisé

Niveau : 🟡
Référence : OWASP A03 / CIS WordPress 7.1 / NIST 800-53 SC-28
MITRE ATT&CK : T1190

Description : Le préfixe par défaut wp_ facilite les attaques d’injection SQL automatisées. Un préfixe personnalisé ajoute une couche d’obscurité contre les attaques génériques.

Vérification :

# Via wp-config.php
grep "table_prefix" wp-config.php
# Via wp-cli
wp config get table_prefix
# Test base de données
wp db query "SHOW TABLES LIKE 'wp_%'"

Remédiation :

  1. Modifier wp-config.php : table_prefix = ‘xyz123_’;
  2. Renommer tables existantes si nécessaire
  3. Mettre à jour options et usermeta

Valeur par défaut : wp_


6.1.2 — Utilisateur Base de Données Dédié

Niveau : 🔴
Référence : OWASP A07 / CIS WordPress 7.2 / NIST 800-53 AC-6
MITRE ATT&CK : T1078

Description : WordPress doit utiliser un utilisateur de base de données dédié avec des privilèges minimaux, pas le compte root ou admin de la base.

Vérification :

# Vérifier utilisateur DB dans wp-config
grep "DB_USER" wp-config.php
# Tester privilèges
wp db query "SHOW GRANTS FOR CURRENT_USER"
# Vérifier si root
wp db query "SELECT USER(), CURRENT_USER()"

Remédiation :

  1. Créer utilisateur dédié WordPress
  2. Accorder privilèges minimaux uniquement
  3. Révoquer privilèges administratifs si existants

Valeur par défaut : Souvent utilisateur avec trop de privilèges


6.1.3 — Privilèges Minimaux Base de Données

Niveau : 🔴
Référence : OWASP A01 / CIS WordPress 7.3 / NIST 800-53 AC-6
MITRE ATT&CK : T1078

Description : L’utilisateur WordPress doit avoir uniquement les privilèges nécessaires : SELECT, INSERT, UPDATE, DELETE sur la base WordPress. Pas de privilèges globaux.

Vérification :

# Vérifier privilèges actuels
wp db query "SHOW GRANTS"
# Vérifier privilèges dangereux
wp db query "SELECT * FROM information_schema.user_privileges WHERE grantee LIKE '%wpuser%'"

Remédiation :

  1. Révoquer privilèges excessifs
  2. Accorder seulement SELECT, INSERT, UPDATE, DELETE
  3. Limiter à la base WordPress uniquement

Valeur par défaut : Privilèges souvent excessifs


6.1.4 — Connexions Chiffrées SSL/TLS

Niveau : 🟠
Référence : OWASP A02 / CIS WordPress 7.4 / NIST 800-53 SC-8
MITRE ATT&CK : T1040

Description : Les connexions à la base de données doivent être chiffrées via SSL/TLS pour protéger les données en transit, particulièrement sur des bases distantes.

Vérification :

# Vérifier SSL DB actuel
wp db query "SHOW STATUS LIKE 'Ssl_cipher'"
wp db query "SHOW VARIABLES LIKE 'have_ssl'"
# Configuration wp-config
grep -i ssl wp-config.php

Remédiation :

  1. Configurer MySQL/MariaDB avec SSL
  2. Ajouter MYSQL_CLIENT_FLAGS dans wp-config.php
  3. Forcer connexions SSL uniquement

Valeur par défaut : Connexions non chiffrées


6.1.5 — Sauvegarde Automatisée Base de Données

Niveau : 🔴
Référence : OWASP A04 / CIS WordPress 7.5 / NIST 800-53 CP-9
MITRE ATT&CK : T1485

Description : Mettre en place des sauvegardes automatisées, régulières et testées de la base de données WordPress avec rétention appropriée et stockage sécurisé.

Vérification :

# Vérifier plugins backup
wp plugin list | grep -iE "(backup|updraft)"
# Dernière sauvegarde
ls -la /backups/wordpress/ 2>/dev/null
# Cron backup
crontab -l | grep -i backup

Remédiation :

  1. Configuration plugin backup fiable
  2. Sauvegarde quotidienne minimum
  3. Test restauration régulier

Valeur par défaut : Sauvegardes manuelles ou absentes


RÉCAPITULATIF ET CONCLUSION

📊 TABLEAU DE BORD SÉCURITÉ

Résumé par Section

Section Contrôles 🔴 Critiques 🟠 Élevés 🟡 Moyens 🟢 Faibles
S1 - Installation & Config 20 5 8 6 1
S2 - Authentification 25 7 10 7 1
S3 - Plugins 25 4 8 12 1
S4 - Thèmes 15 2 5 7 1
S5 - Permissions Fichiers 20 3 6 10 1
S6 - Base de Données 20 4 6 8 2
TOTAL 125 25 43 50 7

Score de Maturité Sécurité

  • Niveau 1 - Initial : 0-30% de conformité
  • Niveau 2 - Basique : 31-50% de conformité
  • Niveau 3 - Intermédiaire : 51-70% de conformité
  • Niveau 4 - Avancé : 71-85% de conformité
  • Niveau 5 - Expert : 86-100% de conformité

Top 10 des Risques Critiques WordPress 2026

  1. Plugins vulnérables - Mise à jour différée, plugins abandonnés
  2. Authentification faible - Pas de 2FA, mots de passe faibles
  3. wp-config.php exposé - Permissions inappropriées, accès web
  4. XML-RPC activé - Vecteur d’attaque DDoS et brute force
  5. Uploads non sécurisés - Exécution PHP, validation insuffisante
  6. Utilisateurs énumérables - API REST, paramètres author
  7. Base de données sur-privilégiée - Utilisateur root, privilèges globaux
  8. Thèmes obsolètes - Vulnérabilités non patchées
  9. Headers sécurité manquants - XSS, clickjacking possible
  10. Monitoring insuffisant - Détection d’intrusion absente

🗺️ ROADMAP DE REMÉDIATION

Phase 1 - Urgence (0-7 jours) 🔴

Objectif : Corriger les vulnérabilités critiques

Actions Prioritaires :

  • Mettre à jour WordPress core, plugins et thèmes
  • Activer 2FA pour tous les administrateurs
  • Sécuriser wp-config.php (permissions 600)
  • Désactiver XML-RPC si non utilisé
  • Bloquer exécution PHP dans /uploads/
  • Changer préfixe base de données si wp_
  • Activer HTTPS forcé et HSTS
  • Installer plugin de sécurité (Wordfence/Sucuri)

Temps estimé : 4-8 heures selon la taille du site

Phase 2 - Court terme (1-4 semaines) 🟠

Objectif : Renforcer la sécurité générale

Actions importantes :

  • Configurer sauvegarde automatique complète
  • Implémenter limitation tentatives de connexion
  • Configurer headers de sécurité HTTP
  • Auditer et nettoyer plugins/thèmes inactifs
  • Mettre en place monitoring basique
  • Renforcer permissions fichiers système
  • Configurer WAF (CloudFlare/Sucuri)
  • Créer environnement de staging

Temps estimé : 2-4 semaines selon les ressources

Phase 3 - Moyen terme (1-3 mois) 🟡

Objectif : Optimiser et automatiser

Actions d’amélioration :

  • Déployer SIEM/monitoring avancé
  • Automatiser tests de sécurité
  • Implémenter CI/CD sécurisé
  • Former équipe aux bonnes pratiques
  • Documenter procédures sécurité
  • Mettre en place audit régulier
  • Optimiser performances sécurisées
  • Plan de réponse aux incidents

Temps estimé : 1-3 mois selon la maturité

Phase 4 - Long terme (3-12 mois) 🟢

Objectif : Excellence et conformité

Actions stratégiques :

  • Certification sécurité (ISO 27001)
  • Audit externe annuel
  • Formation continue équipe
  • Veille technologique sécurité
  • Amélioration continue processus
  • Business continuity plan
  • Disaster recovery plan
  • Security by design

📋 MAPPING RÉFÉRENTIELS

OWASP Top 10 2021

OWASP WordPress Contrôles
A01 - Broken Access Control Permissions, Roles, Files S2, S5
A02 - Cryptographic Failures SSL, Passwords, Storage S2, S6, S7
A03 - Injection SQL, XSS, Upload S3, S6, S9
A04 - Insecure Design Config, Plugins S1, S3, S9
A05 - Security Misconfiguration WordPress, Server S1, S5, S8
A06 - Vulnerable Components Plugins, Themes S3, S4
A07 - Identification Failures Auth, Sessions S2
A08 - Software Integrity Updates, Verification S3, S4, S5
A09 - Logging Failures Monitoring, Audit S14
A10 - SSRF Plugin Communications S3, S10

NIST Cybersecurity Framework

Fonction WordPress Description
IDENTIFY S1, S3, S14 Asset inventory, vulnerabilities
PROTECT S2, S5, S7, S8 Access control, data protection
DETECT S11, S14 Monitoring, threat detection
RESPOND S12, S18 Incident response, backups
RECOVER S12, S13 Recovery planning, updates

ISO 27001:2022

Annexe A WordPress Contrôles
A.5 - Information Security Policies S18 Governance
A.6 - Organization of Information Security S18 Roles & Responsibilities
A.8 - Asset Management S3, S4 Plugin/Theme inventory
A.9 - Access Control S2, S5 Authentication, Authorization
A.12 - Operations Security S1, S13 Secure operations
A.13 - Communications Security S7, S8 Network protection
A.14 - System Acquisition S3, S4 Secure development
A.16 - Information Security Incident Management S14, S18 Incident response
A.17 - Business Continuity S12 Backup & Recovery
A.18 - Compliance S18 Legal & Regulatory

MITRE ATT&CK Framework

Tactique Technique WordPress Contrôles
Initial Access T1190 - Exploit Public Application Plugins vulnérables S3, S4
Persistence T1505 - Server Software Component Webshells, backdoors S3, S5
Privilege Escalation T1078 - Valid Accounts Comptes compromis S2
Defense Evasion T1070 - Indicator Removal Log clearing S14
Credential Access T1110 - Brute Force Login attacks S2, S11
Discovery T1083 - File Discovery Directory listing S5
Collection T1005 - Data from Local System File access S5
Exfiltration T1041 - C2 Channel Data theft S11
Impact T1485 - Data Destruction Ransomware S12

S7 — SSL/TLS & HTTPS

7.1.1 — Certificat SSL Valide et Configuré

Niveau : 🔴 Critique Référence : OWASP A07 / CIS WordPress 7.1 MITRE ATT&CK : T1040

Description : Le site doit disposer d’un certificat SSL valide émis par une autorité de confiance. Un certificat invalide ou auto-signé expose les données en transit et affecte la confiance des utilisateurs.

Vérification :

# Test du certificat SSL
curl -I https://votre-site.com
openssl s_client -connect votre-site.com:443 -servername votre-site.com < /dev/null
# Vérifier la date d'expiration
echo | openssl s_client -connect votre-site.com:443 2>/dev/null | openssl x509 -noout -dates

Remédiation :

  1. Obtenir un certificat Let’s Encrypt gratuit via Certbot
  2. Configurer le renouvellement automatique
  3. Tester la configuration avec SSL Labs

Valeur par défaut : Aucun certificat SSL configuré

7.1.2 — Force HTTPS sur tout le site

Niveau : 🔴 Critique
Référence : OWASP A02 / CIS WordPress 7.2 MITRE ATT&CK : T1040

Description : Forcer la redirection HTTPS pour toutes les pages empêche l’interception des données sensibles et améliore le référencement SEO.

Vérification :

# Test redirection HTTP vers HTTPS
curl -I http://votre-site.com
# Vérifier les URLs WordPress
wp option get siteurl --allow-root
wp option get home --allow-root

Remédiation :

  1. Dans wp-config.php : define('FORCE_SSL_ADMIN', true);
  2. Mettre à jour les URLs : wp option update siteurl 'https://votre-site.com' --allow-root
  3. Configurer .htaccess pour redirection 301

Valeur par défaut : HTTP autorisé, pas de redirection forcée

7.1.3 — Configuration HSTS (HTTP Strict Transport Security)

Niveau : 🟠 Important Référence : OWASP A06 / CIS WordPress 7.3
MITRE ATT&CK : T1557

Description : HSTS force les navigateurs à utiliser exclusivement HTTPS et prévient les attaques de type SSL stripping et man-in-the-middle.

Vérification :

# Vérifier header HSTS
curl -I https://votre-site.com | grep -i strict-transport-security
# Test avec Security Headers
curl -H 'User-Agent: Mozilla/5.0' -I https://votre-site.com

Remédiation :

  1. Ajouter dans .htaccess : Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
  2. Ou via plugin Wordfence/Security Headers
  3. Soumettre le domaine à HSTS Preload List

Valeur par défaut : Header HSTS non configuré

7.1.4 — Élimination Mixed Content (contenu mixte)

Niveau : 🟡 Modéré Référence : OWASP A06 / CIS WordPress 7.4 MITRE ATT&CK : T1040

Description : Le mixed content (ressources HTTP chargées sur une page HTTPS) compromet la sécurité et génère des avertissements navigateur.

Vérification :

# Scanner le mixed content
curl -s https://votre-site.com | grep -i 'http://' | head -10
# Vérifier via navigateur Console F12
# Plugin Really Simple SSL peut détecter automatiquement

Remédiation :

  1. Installer plugin Really Simple SSL ou SSL Insecure Content Fixer
  2. Mettre à jour manuellement les URLs en base : wp search-replace 'http://votre-site.com' 'https://votre-site.com' --allow-root
  3. Configurer CSP upgrade-insecure-requests

Valeur par défaut : Mixed content possible selon thème/plugins

7.1.5 — Support TLS 1.2+ uniquement

Niveau : 🟠 Important Référence : OWASP A02 / CIS WordPress 7.5 MITRE ATT&CK : T1040

Description : Désactiver les versions obsolètes de SSL/TLS (SSLv2, SSLv3, TLS 1.0, TLS 1.1) qui contiennent des vulnérabilités connues.

Vérification :

# Test des versions TLS supportées  
nmap --script ssl-enum-ciphers -p 443 votre-site.com
# Test spécifique TLS 1.2
openssl s_client -tls1_2 -connect votre-site.com:443
# Test SSLv3 (ne doit PAS fonctionner)
openssl s_client -ssl3 -connect votre-site.com:443

Remédiation :

  1. Configuration Apache : SSLProtocol -all +TLSv1.2 +TLSv1.3
  2. Configuration Nginx : ssl_protocols TLSv1.2 TLSv1.3;
  3. Vérifier avec SSL Labs Test

Valeur par défaut : Dépend de la configuration serveur

7.1.6 — Renouvellement Automatique Let’s Encrypt

Niveau : 🟡 Modéré Référence : CIS WordPress 7.6 MITRE ATT&CK : T1040

Description : Le renouvellement automatique des certificats Let’s Encrypt évite les interruptions de service dues à l’expiration des certificats.

Vérification :

# Vérifier les tâches cron Certbot
crontab -l | grep certbot
# Tester le renouvellement
certbot renew --dry-run
# Vérifier les logs
cat /var/log/letsencrypt/letsencrypt.log | tail -20

Remédiation :

  1. Configurer cron job : 0 12 * * * /usr/bin/certbot renew --quiet
  2. Ajouter hook de redémarrage web server
  3. Monitorer les expirations avec services externes

Valeur par défaut : Renouvellement manuel requis

7.1.7 — Chiffrement des Cookies (Secure Flag)

Niveau : 🟠 Important Référence : OWASP A02 / CIS WordPress 7.7 MITRE ATT&CK : T1539

Description : Forcer le flag Secure sur les cookies sensibles empêche leur transmission sur des connexions non chiffrées.

Vérification :

# Vérifier les cookies via curl  
curl -I -c cookies.txt https://votre-site.com/wp-login.php
cat cookies.txt | grep -i secure
# Ou via navigateur F12 > Application > Cookies

Remédiation :

  1. Dans wp-config.php : ini_set('session.cookie_secure', 1);
  2. Plugin Security Headers pour forcer les flags
  3. Configuration serveur pour tous les cookies

Valeur par défaut : Cookies sans flag Secure

7.1.8 — Configuration Cipher Suites Sécurisées

Niveau : 🟡 Modéré Référence : OWASP A02 / CIS WordPress 7.8
MITRE ATT&CK : T1040

Description : Utiliser uniquement des cipher suites robustes et désactiver les algorithmes faibles (RC4, DES, export ciphers).

Vérification :

# Scanner les cipher suites
nmap --script ssl-enum-ciphers -p 443 votre-site.com | grep -E '(weak|export|rc4)'
# Test SSL Labs pour grade A+
curl -s 'https://api.ssllabs.com/api/v3/analyze?host=votre-site.com'

Remédiation :

  1. Configuration Apache recommandée Mozilla SSL Generator
  2. Désactiver ciphers faibles dans virtualhost
  3. Privilégier AEAD ciphers (AES-GCM, ChaCha20-Poly1305)

Valeur par défaut : Configuration serveur par défaut (souvent faible)

7.1.9 — Perfect Forward Secrecy (PFS)

Niveau : 🟡 Modéré Référence : OWASP A02 / CIS WordPress 7.9 MITRE ATT&CK : T1040

Description : Perfect Forward Secrecy garantit que la compromission des clés privées n’affecte pas la confidentialité des sessions passées.

Vérification :

# Vérifier le support PFS
openssl s_client -connect votre-site.com:443 -cipher ECDHE
# Test avec SSL Labs - rechercher 'Forward Secrecy'
curl -s 'https://www.ssllabs.com/ssltest/analyze.html?d=votre-site.com'

Remédiation :

  1. Privilégier les cipher suites ECDHE et DHE
  2. Configuration Apache : SSLCipherSuite ECDHE+AESGCM:ECDHE+AES256
  3. Générer des paramètres DH forts : openssl dhparam -out dhparam.pem 2048

Valeur par défaut : Dépend de la configuration cipher suites

7.1.10 — Désactivation Compression SSL (CRIME/BREACH)

Niveau : 🟡 Modéré Référence : OWASP A06 / CIS WordPress 7.10 MITRE ATT&CK : T1040

Description : Désactiver la compression SSL/TLS pour prévenir les attaques CRIME et BREACH qui exploitent les patterns de compression.

Vérification :

# Vérifier si compression SSL activée
echo | openssl s_client -connect votre-site.com:443 2>/dev/null | grep Compression
# Test avec nmap
nmap --script ssl-cert,ssl-enum-ciphers -p 443 votre-site.com

Remédiation :

  1. Apache : SSLCompression off
  2. Nginx : compression désactivée par défaut pour SSL
  3. Vérifier que mod_deflate n’affecte pas HTTPS

Valeur par défaut : Compression souvent activée

7.1.11 — Monitoring Expiration Certificats

Niveau : 🟡 Modéré Référence : CIS WordPress 7.11 MITRE ATT&CK : T1040

Description : Surveiller proactivement l’expiration des certificats SSL pour éviter les interruptions de service et les alertes de sécurité.

Vérification :

# Script de monitoring expiration
echo | openssl s_client -connect votre-site.com:443 2>/dev/null | openssl x509 -noout -dates
# Calculer jours restants
echo | openssl s_client -servername votre-site.com -connect votre-site.com:443 2>/dev/null | openssl x509 -noout -checkend 2592000

Remédiation :

  1. Script cron de vérification hebdomadaire
  2. Alertes email 30/15/7 jours avant expiration
  3. Services externes : SSL Monitor, Uptime Robot

Valeur par défaut : Pas de monitoring automatique

7.1.12 — Certificate Transparency (CT) Logs

Niveau : 🟢 Recommandé Référence : CIS WordPress 7.12 MITRE ATT&CK : T1040

Description : Surveiller les Certificate Transparency logs pour détecter les certificats émis frauduleusement pour votre domaine.

Vérification :

# Rechercher certificats dans CT logs
curl -s 'https://crt.sh/?q=votre-site.com&output=json' | jq '.[] | {id: .id, name: .name_value, not_after: .not_after}'
# Vérifier via SSL Labs CT compliance

Remédiation :

  1. Configurer monitoring crt.sh ou Censys
  2. Alertes automatiques nouveaux certificats
  3. Audit régulier des certificats émis

Valeur par défaut : Pas de monitoring CT configuré

7.1.13 — OCSP Stapling Configuration

Niveau : 🟡 Modéré
Référence : CIS WordPress 7.13 MITRE ATT&CK : T1040

Description : OCSP Stapling améliore les performances et la privacy en évitant les requêtes directes des clients vers l’autorité de certification.

Vérification :

# Test OCSP Stapling
echo | openssl s_client -connect votre-site.com:443 -status
# Vérifier via SSL Labs test
curl -s 'https://www.ssllabs.com/ssltest/analyze.html?d=votre-site.com' | grep -i ocsp

Remédiation :

  1. Apache : SSLUseStapling On + SSLStaplingCache shmcb:/tmp/stapling_cache(128000)
  2. Nginx : ssl_stapling on; + ssl_stapling_verify on;
  3. Test avec SSL Labs pour validation

Valeur par défaut : OCSP Stapling désactivé

7.1.14 — HTTP Public Key Pinning (HPKP) - Optionnel

Niveau : 🟢 Recommandé Référence : CIS WordPress 7.14
MITRE ATT&CK : T1557

Description : HPKP permet d’épingler les clés publiques des certificats pour prévenir les attaques man-in-the-middle avec certificats frauduleux. À utiliser avec précaution.

Vérification :

# Vérifier header HPKP (deprecated)
curl -I https://votre-site.com | grep -i public-key-pins
# Préférer Certificate Authority Authorization (CAA)
dig CAA votre-site.com

Remédiation :

  1. HPKP deprecated - utiliser CAA DNS records à la place
  2. Configurer CAA : votre-site.com. CAA 0 issue "letsencrypt.org"
  3. Monitoring changements certificats via CT logs

Valeur par défaut : Pas de pinning configuré

7.1.15 — Audit Configuration SSL/TLS

Niveau : 🟡 Modéré Référence : CIS WordPress 7.15 MITRE ATT&CK : T1040

Description : Effectuer régulièrement des audits de configuration SSL/TLS avec des outils automatisés pour maintenir un niveau de sécurité optimal.

Vérification :

# Test SSL Labs (grade A+ requis)
curl -s 'https://api.ssllabs.com/api/v3/analyze?host=votre-site.com&publish=off'
# Test avec testssl.sh  
./testssl.sh https://votre-site.com
# Scanner Nmap SSL
nmap --script ssl-cert,ssl-enum-ciphers -p 443 votre-site.com

Remédiation :

  1. Audit mensuel avec SSL Labs
  2. Scripts automatisés testssl.sh
  3. Monitoring continu avec Qualys ou similaire
  4. Documentation des changements de configuration

Valeur par défaut : Pas d’audit automatique configuré

S8 — HEADERS DE SÉCURITÉ HTTP

8.1.1 — Content Security Policy (CSP)

Niveau : 🟠 Important Référence : OWASP A03 / CIS WordPress 8.1 MITRE ATT&CK : T1189

Description : CSP prévient les attaques XSS en contrôlant les ressources (scripts, styles, images) que le navigateur est autorisé à charger.

Vérification :

# Vérifier header CSP
curl -I https://votre-site.com | grep -i content-security-policy
# Tester avec Security Headers
curl -H 'User-Agent: Mozilla/5.0' -I https://votre-site.com

Remédiation :

  1. Ajouter dans .htaccess : Header always set Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline'"
  2. Plugin Wordfence ou Security Headers
  3. Tester avec CSP Evaluator de Google

Valeur par défaut : Pas de header CSP configuré

8.1.2 — X-Frame-Options Protection

Niveau : 🔴 Critique Référence : OWASP A06 / CIS WordPress 8.2
MITRE ATT&CK : T1189

Description : X-Frame-Options empêche l’intégration du site dans des frames/iframes, prévenant les attaques de clickjacking.

Vérification :

# Vérifier X-Frame-Options
curl -I https://votre-site.com | grep -i x-frame-options
# Test clickjacking
curl -H 'User-Agent: Mozilla/5.0' -I https://votre-site.com/wp-login.php

Remédiation :

  1. .htaccess : Header always set X-Frame-Options "SAMEORIGIN"
  2. wp-config.php : header('X-Frame-Options: SAMEORIGIN');
  3. Plugin Security Headers pour gestion centralisée

Valeur par défaut : Header non configuré - clickjacking possible

8.1.3 — X-Content-Type-Options

Niveau : 🟠 Important Référence : OWASP A06 / CIS WordPress 8.3 MITRE ATT&CK : T1189

Description : Empêche le browser de “deviner” le type MIME des fichiers, prévenant l’exécution de contenu malveillant uploadé.

Vérification :

# Vérifier X-Content-Type-Options  
curl -I https://votre-site.com | grep -i x-content-type-options
# Test sur uploads
curl -I https://votre-site.com/wp-content/uploads/test.txt

Remédiation :

  1. .htaccess : Header always set X-Content-Type-Options "nosniff"
  2. Configuration Apache/Nginx globale
  3. Vérifier que les uploads ont les bons types MIME

Valeur par défaut : MIME type sniffing activé

8.1.4 — X-XSS-Protection (Legacy)

Niveau : 🟡 Modéré Référence : OWASP A03 / CIS WordPress 8.4 MITRE ATT&CK : T1189

Description : Active le filtre XSS intégré des navigateurs. Header legacy mais encore utile pour anciens navigateurs.

Vérification :

# Vérifier X-XSS-Protection
curl -I https://votre-site.com | grep -i x-xss-protection  
# Tester réflexion XSS basique
curl 'https://votre-site.com/?test=<script>alert(1)</script>'

Remédiation :

  1. .htaccess : Header always set X-XSS-Protection "1; mode=block"
  2. CSP moderne préférable pour nouveaux browsers
  3. Sanitisation input côté serveur prioritaire

Valeur par défaut : Protection XSS navigateur désactivée

8.1.5 — Referrer-Policy Configuration

Niveau : 🟡 Modéré
Référence : OWASP A01 / CIS WordPress 8.5 MITRE ATT&CK : T1033

Description : Contrôle les informations de référent transmises lors des requêtes sortantes pour protéger la privacy et éviter les fuites d’information.

Vérification :

# Vérifier Referrer-Policy
curl -I https://votre-site.com | grep -i referrer-policy
# Test avec liens externes  
curl -H 'Referer: https://votre-site.com/admin' https://external-site.com

Remédiation :

  1. .htaccess : Header always set Referrer-Policy "strict-origin-when-cross-origin"
  2. Alternative : same-origin pour plus de sécurité
  3. Tester impact sur analytics et partenaires

Valeur par défaut : Referrer complet transmis

8.1.6 — Permissions-Policy (Feature-Policy)

Niveau : 🟡 Modéré Référence : CIS WordPress 8.6
MITRE ATT&CK : T1189

Description : Contrôle l’accès aux APIs navigateur (caméra, microphone, géolocalisation) pour réduire la surface d’attaque.

Vérification :

# Vérifier Permissions-Policy
curl -I https://votre-site.com | grep -i permissions-policy
# Ancien header Feature-Policy
curl -I https://votre-site.com | grep -i feature-policy  

Remédiation :

  1. .htaccess : Header always set Permissions-Policy "camera=(), microphone=(), geolocation=()"
  2. Adapter selon besoins fonctionnels du site
  3. Documentation des APIs autorisées

Valeur par défaut : Toutes APIs navigateur accessibles

8.1.7 — CORS (Cross-Origin Resource Sharing)

Niveau : 🟠 Important Référence : OWASP A05 / CIS WordPress 8.7 MITRE ATT&CK : T1189

Description : Configurer CORS de manière restrictive pour contrôler les domaines autorisés à accéder aux ressources du site.

Vérification :

# Vérifier headers CORS
curl -H 'Origin: https://external-domain.com' -I https://votre-site.com/wp-json/
# Test API REST WordPress
curl -H 'Origin: https://malicious-site.com' https://votre-site.com/wp-json/wp/v2/users

Remédiation :

  1. .htaccess : Header set Access-Control-Allow-Origin "https://votre-domaine.com"
  2. Plugin REST API security pour contrôle granulaire
  3. Éviter wildcard * sauf cas spécifique

Valeur par défaut : CORS permissif par défaut

8.1.8 — Cache-Control et Pragma Headers

Niveau : 🟡 Modéré Référence : CIS WordPress 8.8 MITRE ATT&CK : T1005

Description : Configurer les headers de cache pour empêcher la mise en cache de pages sensibles (login, admin) dans browsers et proxies.

Vérification :

# Vérifier Cache-Control sur pages sensibles
curl -I https://votre-site.com/wp-login.php | grep -i cache-control
curl -I https://votre-site.com/wp-admin/ | grep -i cache-control

Remédiation :

  1. Pour wp-login.php : Cache-Control: no-cache, no-store, must-revalidate
  2. .htaccess règles spécifiques wp-admin/
  3. Plugin cache avec exclusions pages sensibles

Valeur par défaut : Pas de contrôle cache spécifique

8.1.9 — Server Header Information Hiding

Niveau : 🟡 Modéré
Référence : OWASP A06 / CIS WordPress 8.9 MITRE ATT&CK : T1082

Description : Masquer ou modifier les headers serveur révélant des informations techniques exploitables par les attaquants.

Vérification :

# Vérifier headers informatifs
curl -I https://votre-site.com | grep -E '(Server|X-Powered-By|X-Generator)'
# Version Apache/Nginx exposée  
curl -I https://votre-site.com | grep Server

Remédiation :

  1. Apache : ServerTokens Prod + ServerSignature Off
  2. Nginx : server_tokens off;
  3. .htaccess : Header unset X-Powered-By

Valeur par défaut : Informations serveur exposées

8.1.10 — Cross-Origin-Embedder-Policy (COEP)

Niveau : 🟢 Recommandé Référence : CIS WordPress 8.10 MITRE ATT&CK : T1189

Description : COEP renforce l’isolation des origins et protège contre certaines attaques side-channel comme Spectre.

Vérification :

# Vérifier COEP header
curl -I https://votre-site.com | grep -i cross-origin-embedder-policy
# Tester avec ressources cross-origin  
curl -I https://votre-site.com/page-with-external-resources

Remédiation :

  1. .htaccess : Header always set Cross-Origin-Embedder-Policy "require-corp"
  2. Adapter ressources externes avec CORP headers
  3. Tester impact sur fonctionnalités cross-origin

Valeur par défaut : Pas de politique COEP configurée

8.1.11 — Cross-Origin-Opener-Policy (COOP)

Niveau : 🟢 Recommandé Référence : CIS WordPress 8.11 MITRE ATT&CK : T1189

Description : COOP empêche les documents cross-origin d’accéder au contexte de navigation, protégeant contre les attaques via window.opener.

Vérification :

# Vérifier COOP header
curl -I https://votre-site.com | grep -i cross-origin-opener-policy
# Test avec popups et liens target=_blank

Remédiation :

  1. .htaccess : Header always set Cross-Origin-Opener-Policy "same-origin"
  2. Ajouter rel=“noopener” aux liens externes
  3. Tester intégrations nécessitant window.opener

Valeur par défaut : Cross-origin access autorisé

8.1.12 — Expect-CT Header (Deprecated)

Niveau : 🟢 Recommandé
Référence : CIS WordPress 8.12 MITRE ATT&CK : T1040

Description : Expect-CT force la validation Certificate Transparency. Header deprecated mais encore utile pour transition.

Vérification :

# Vérifier Expect-CT (deprecated)
curl -I https://votre-site.com | grep -i expect-ct
# Vérifier CT compliance via SSL Labs

Remédiation :

  1. Header deprecated - utiliser CT monitoring externe
  2. Surveiller crt.sh et Censys pour nouveaux certificats
  3. Alertes automatiques émission certificats non autorisés

Valeur par défaut : Pas de validation CT forcée

8.1.13 — Clear-Site-Data Header

Niveau : 🟡 Modéré Référence : CIS WordPress 8.13
MITRE ATT&CK : T1539

Description : Clear-Site-Data permet de supprimer sélectivement les données browser (cookies, cache, storage) lors de la déconnexion.

Vérification :

# Vérifier Clear-Site-Data sur logout
curl -I https://votre-site.com/wp-login.php?action=logout
# Tester suppression données browser

Remédiation :

  1. Sur wp-login.php?action=logout : Clear-Site-Data: "cookies", "storage"
  2. Plugin logout sécurisé avec clear data
  3. Configurer selon besoins (cache, cookies, storage)

Valeur par défaut : Données browser persistantes après logout

8.1.14 — Custom Security Headers

Niveau : 🟡 Modéré Référence : CIS WordPress 8.14 MITRE ATT&CK : T1082

Description : Implémenter des headers de sécurité personnalisés pour besoins spécifiques de l’organisation.

Vérification :

# Audit complet headers sécurité
curl -I https://votre-site.com | grep -E '(X-|Content-|Referrer|Permissions)'
# Test avec Security Headers scanner  
curl -s 'https://securityheaders.com/?q=votre-site.com&hide=on&followRedirects=on'

Remédiation :

  1. X-Content-Security-Policy pour IE legacy
  2. Headers custom anti-bot : X-Robots-Tag
  3. Documentation et maintenance des headers custom

Valeur par défaut : Headers sécurité minimaux

8.1.15 — Headers Security Testing

Niveau : 🟡 Modéré
Référence : CIS WordPress 8.15 MITRE ATT&CK : T1082

Description : Tester régulièrement la configuration des headers de sécurité avec des outils automatisés pour maintenir la posture de sécurité.

Vérification :

# Test complet avec Security Headers  
curl -s 'https://securityheaders.com/?q=votre-site.com&hide=on&followRedirects=on'
# Script local headers check
curl -I https://votre-site.com | grep -E '(X-Frame|Content-Security|X-Content-Type)'

Remédiation :

  1. Monitoring mensuel Security Headers grade A+
  2. Scripts automatisés CI/CD validation headers
  3. Alertes changements configuration headers
  4. Documentation baseline headers sécurité

Valeur par défaut : Pas de monitoring headers configuré

8.1.16 — HTTP/2 Push et Security

Niveau : 🟢 Recommandé Référence : CIS WordPress 8.16 MITRE ATT&CK : T1189

Description : Configurer HTTP/2 Server Push de manière sécurisée pour éviter les attaques par empoisonnement de cache.

Vérification :

# Vérifier support HTTP/2
curl -I --http2 https://votre-site.com | grep -i 'HTTP/2'
# Test Server Push headers
curl -I --http2 https://votre-site.com | grep -i 'link.*preload'

Remédiation :

  1. Configurer Push sélectivement pour ressources critiques
  2. Éviter Push de ressources user-controllées
  3. Monitoring performance vs sécurité HTTP/2

Valeur par défaut : HTTP/2 Push non configuré

8.1.17 — Early Hints (103) Security

Niveau : 🟢 Recommandé
Référence : CIS WordPress 8.17 MITRE ATT&CK : T1189

Description : Configurer Early Hints de manière sécurisée pour le preloading de ressources sans compromettre la sécurité.

Vérification :

# Vérifier Early Hints support
curl -I https://votre-site.com | grep -i '103.*early'
# Test preload hints sécurisés

Remédiation :

  1. Early Hints uniquement pour ressources same-origin
  2. Valider integrity des ressources preloadées
  3. Monitoring impact performance vs sécurité

Valeur par défaut : Early Hints non configurés

8.1.18 — Headers Validation Pipeline

Niveau : 🟡 Modéré Référence : CIS WordPress 8.18
MITRE ATT&CK : T1082

Description : Mettre en place un pipeline automatisé de validation des headers de sécurité dans le processus de déploiement.

Vérification :

# Script validation headers automatisé
HEADERS=("X-Frame-Options" "Content-Security-Policy" "X-Content-Type-Options")
for header in "${HEADERS[@]}"; do
    curl -I https://votre-site.com | grep -i "$header" || echo "Missing: $header"
done

Remédiation :

  1. Intégration tests headers dans CI/CD
  2. Validation pre-deployment obligatoire
  3. Rollback automatique si headers manquants
  4. Dashboard monitoring headers temps réel

Valeur par défaut : Validation headers manuelle

8.1.19 — CSP Reporting et Monitoring

Niveau : 🟠 Important Référence : OWASP A03 / CIS WordPress 8.19 MITRE ATT&CK : T1189

Description : Configurer CSP reporting pour monitorer les violations et détecter les tentatives d’attaques XSS.

Vérification :

# Vérifier CSP report-uri/report-to
curl -I https://votre-site.com | grep -i 'content-security-policy.*report'
# Test violation CSP  
curl 'https://votre-site.com' -H 'Content-Security-Policy: script-src 'self'; report-uri /csp-report'

Remédiation :

  1. Configurer report-uri endpoint : report-uri /csp-violations
  2. Analyser logs violations CSP régulièrement
  3. Alertes automatiques violations suspectes
  4. Ajuster politique CSP selon reports

Valeur par défaut : Pas de reporting CSP configuré

8.1.20 — Headers Bypass Prevention

Niveau : 🟠 Important
Référence : CIS WordPress 8.20 MITRE ATT&CK : T1562

Description : Empêcher le bypass des headers de sécurité via différentes méthodes (proxy, cache, redirections).

Vérification :

# Test bypass via redirections
curl -L -I https://votre-site.com/redirect-page
# Vérifier consistency headers toutes pages  
curl -I https://votre-site.com/wp-admin/ | grep X-Frame-Options
curl -I https://votre-site.com/wp-login.php | grep X-Frame-Options

Remédiation :

  1. Headers configurés au niveau serveur (pas seulement .htaccess)
  2. Validation headers après redirections/proxies
  3. Headers always set (pas conditionnels)
  4. Test régulier bypass potentiels

Valeur par défaut : Possibilité bypass headers selon configuration

S10 — REST API & XML-RPC

10.1.1 — Désactivation XML-RPC

Niveau : 🔴 Critique Référence : OWASP A06 / CIS WordPress 10.1 MITRE ATT&CK : T1190

Description : Désactiver XML-RPC qui présente de nombreuses vulnérabilités et est exploité pour les attaques brute force et DDoS.

Vérification :

# Test XML-RPC activé
curl -X POST https://votre-site.com/xmlrpc.php -H 'Content-Type: text/xml' -d '<?xml version="1.0"?><methodCall><methodName>system.listMethods</methodName></methodCall>'
# Vérifier endpoint accessible
curl -I https://votre-site.com/xmlrpc.php

Remédiation :

  1. wp-config.php : add_filter('xmlrpc_enabled', '__return_false');
  2. .htaccess : <Files "xmlrpc.php"> Order Deny,Allow Deny from all </Files>
  3. Plugin Wordfence pour blocage XML-RPC

Valeur par défaut : XML-RPC activé par défaut

10.1.2 — Restriction REST API WordPress

Niveau : 🟠 Important
Référence : OWASP A01 / CIS WordPress 10.2 MITRE ATT&CK : T1087

Description : Limiter l’accès à l’API REST WordPress pour empêcher l’énumération et l’accès non autorisé aux données.

Vérification :

# Test enumération utilisateurs via REST API
curl https://votre-site.com/wp-json/wp/v2/users
# Test accès endpoints sensibles  
curl https://votre-site.com/wp-json/wp/v2/posts
curl https://votre-site.com/wp-json/wp/v2/media

Remédiation :

  1. Désactiver pour non-authentifiés : add_filter('rest_authentication_errors', function() { return new WP_Error('rest_disabled', 'REST API disabled', array('status' => 401)); });
  2. Plugin REST API security pour contrôle granulaire
  3. Authentification requise endpoints sensibles

Valeur par défaut : API REST accessible publiquement

10.1.3 — Authentification API Sécurisée

Niveau : 🟠 Important Référence : OWASP A02 / CIS WordPress 10.3 MITRE ATT&CK : T1078

Description : Implémenter une authentification robuste pour l’API REST avec tokens sécurisés.

Vérification :

# Test authentification API
curl -H 'Authorization: Bearer invalid_token' https://votre-site.com/wp-json/wp/v2/posts
# Vérifier application passwords
wp user list --field=user_login --allow-root | xargs -I {} wp user get {} --field=user_pass --allow-root

Remédiation :

  1. Application Passwords WordPress 5.6+
  2. JWT Authentication plugin sécurisé
  3. API Keys avec expiration automatique
  4. Rate limiting par token/utilisateur

Valeur par défaut : Authentification basique cookie/session

10.1.4 — Limitation Endpoints JSON

Niveau : 🟡 Modéré Référence : CIS WordPress 10.4 MITRE ATT&CK : T1087

Description : Désactiver ou limiter les endpoints JSON exposant des informations sensibles sur l’installation WordPress.

Vérification :

# Enumérer endpoints disponibles
curl https://votre-site.com/wp-json/ | jq .
# Vérifier exposition information  
curl https://votre-site.com/wp-json/wp/v2/ | jq .
curl https://votre-site.com/?rest_route=/

Remédiation :

  1. Whitelist endpoints nécessaires uniquement
  2. Plugin REST API restriction par rôle
  3. Masquer informations version WordPress
  4. Custom endpoints avec validation stricte

Valeur par défaut : Tous endpoints REST API exposés

10.1.5 — Protection Injection API

Niveau : 🔴 Critique Référence : OWASP A03 / CIS WordPress 10.5
MITRE ATT&CK : T1190

Description : Prévenir les injections dans les paramètres API REST pour éviter l’exécution de code malveillant.

Vérification :

# Test injection SQL via API
curl -X POST https://votre-site.com/wp-json/wp/v2/posts -H 'Content-Type: application/json' -d '{"title":"Test'OR'1'='1"}'
# Test XSS via API
curl -X POST https://votre-site.com/wp-json/wp/v2/comments -d 'content=<script>alert(1)</script>'

Remédiation :

  1. Sanitisation stricte input API : sanitize_text_field()
  2. Validation types données JSON Schema
  3. WAF rules protection API endpoints
  4. Rate limiting requêtes API

Valeur par défaut : Sanitisation basique WordPress, validation limitée

10.1.6 — Audit Logs API REST

Niveau : 🟡 Modéré Référence : CIS WordPress 10.6 MITRE ATT&CK : T1087

Description : Logger toutes les activités API REST pour détecter les abus et tentatives d’intrusion.

Vérification :

# Vérifier logs API dans access logs
grep 'wp-json' /var/log/apache2/access.log | tail -20
# Analyser patterns d'usage API
awk '/wp-json/ {print $1, $7}' /var/log/apache2/access.log | sort | uniq -c

Remédiation :

  1. Plugin WP Activity Log avec support API REST
  2. Logging custom pour endpoints sensibles
  3. Alertes tentatives accès non autorisé API
  4. Dashboard monitoring usage API

Valeur par défaut : Logs basiques serveur web uniquement

10.1.7 — Rate Limiting API Avancé

Niveau : 🟠 Important
Référence : CIS WordPress 10.7 MITRE ATT&CK : T1499

Description : Implémenter un rate limiting sophistiqué pour l’API REST avec différents niveaux selon les endpoints.

Vérification :

# Test rate limiting API
for i in {1..20}; do curl -s https://votre-site.com/wp-json/wp/v2/users > /dev/null; echo "Request $i completed"; done
# Vérifier headers rate limit
curl -I https://votre-site.com/wp-json/wp/v2/posts | grep -E '(X-RateLimit|Retry-After)'

Remédiation :

  1. Plugin REST API rate limiting par IP/utilisateur
  2. Rate limit différentiel : lecture vs écriture
  3. Whitelist IPs de confiance (monitoring, CI/CD)
  4. Response headers informatifs rate limit

Valeur par défaut : Pas de rate limiting API configuré

10.1.8 — CORS API Sécurisé

Niveau : 🟠 Important Référence : OWASP A05 / CIS WordPress 10.8 MITRE ATT&CK : T1189

Description : Configurer CORS de manière restrictive pour l’API REST afin de contrôler l’accès cross-origin.

Vérification :

# Test CORS API REST  
curl -H 'Origin: https://external-domain.com' -H 'Access-Control-Request-Method: POST' -X OPTIONS https://votre-site.com/wp-json/wp/v2/posts
# Vérifier headers CORS
curl -H 'Origin: https://malicious-site.com' https://votre-site.com/wp-json/wp/v2/users

Remédiation :

  1. Headers CORS restrictifs API : Access-Control-Allow-Origin: https://votre-domaine.com
  2. Validation Origin header strict
  3. Methods HTTP autorisées minimum nécessaire
  4. Credentials CORS uniquement si requis

Valeur par défaut : CORS permissif par défaut

10.1.9 — Versioning API Sécurisé

Niveau : 🟡 Modéré Référence : CIS WordPress 10.9 MITRE ATT&CK : T1190

Description : Gérer les versions d’API de manière sécurisée en désactivant les versions obsolètes vulnérables.

Vérification :

# Énumérer versions API disponibles
curl https://votre-site.com/wp-json/ | jq '.namespaces'
# Test accès versions multiples
curl https://votre-site.com/wp-json/wp/v2/users
curl https://votre-site.com/wp-json/wp/v1/users 2>/dev/null

Remédiation :

  1. Désactiver anciennes versions API vulnérables
  2. Migration forcée vers versions sécurisées
  3. Deprecation warnings pour versions obsolètes
  4. Documentation versions supportées

Valeur par défaut : Toutes versions API disponibles

10.1.10 — Chiffrement Communications API

Niveau : 🔴 Critique Référence : OWASP A02 / CIS WordPress 10.10 MITRE ATT&CK : T1040

Description : Forcer HTTPS pour toutes communications API et implémenter des mécanismes de chiffrement supplémentaires si nécessaire.

Vérification :

# Test accès API via HTTP  
curl -I http://votre-site.com/wp-json/wp/v2/users
# Vérifier redirection HTTPS
curl -L -I http://votre-site.com/wp-json/

Remédiation :

  1. Force HTTPS pour wp-json : redirection 301
  2. HSTS headers pour API endpoints
  3. Chiffrement payload sensible (PII, payments)
  4. Certificate pinning pour clients API critiques

Valeur par défaut : HTTPS selon configuration générale site

10.1.11 — Validation Schema API

Niveau : 🟠 Important Référence : CIS WordPress 10.11 MITRE ATT&CK : T1190

Description : Implémenter une validation stricte des schémas JSON pour tous les endpoints API afin de prévenir les injections de données.

Vérification :

# Test validation schema avec données invalides
curl -X POST https://votre-site.com/wp-json/wp/v2/posts -H 'Content-Type: application/json' -d '{"title":123, "content":["invalid_array"]}'
# Test champs supplémentaires non autorisés  
curl -X POST https://votre-site.com/wp-json/wp/v2/users -d 'malicious_field=value&user_login=test'

Remédiation :

  1. JSON Schema validation stricte tous endpoints
  2. Reject données avec champs non définis
  3. Type checking rigoureux (string vs int vs array)
  4. Sanitisation après validation schema

Valeur par défaut : Validation basique WordPress, permissive

10.1.12 — API Documentation Sécurisée

Niveau : 🟡 Modéré
Référence : CIS WordPress 10.12 MITRE ATT&CK : T1082

Description : Sécuriser la documentation API pour éviter l’exposition d’informations sensibles aux attaquants.

Vérification :

# Vérifier auto-documentation API
curl https://votre-site.com/wp-json/ | jq -r '.routes | keys[]'
# Rechercher endpoints debug/doc
curl https://votre-site.com/wp-json/wp/v2/schema

Remédiation :

  1. Désactiver auto-discovery API publique
  2. Documentation API derrière authentification
  3. Masquer endpoints internes/debug
  4. Information minimale dans responses d’erreur

Valeur par défaut : Documentation API accessible publiquement

10.1.13 — Monitoring Sécurité API

Niveau : 🟠 Important Référence : CIS WordPress 10.13
MITRE ATT&CK : T1087

Description : Implémenter un monitoring spécialisé pour détecter les abus et attaques contre l’API REST.

Vérification :

# Analyser patterns d'usage API suspects
awk '/wp-json/ && /40[0-9]|50[0-9]/ {print $1, $9}' /var/log/apache2/access.log | sort | uniq -c | sort -nr
# Vérifier tentatives énumération massive
grep -c 'wp-json.*users' /var/log/apache2/access.log

Remédiation :

  1. SIEM rules spécifiques API WordPress
  2. Alertes anomalies trafic API (volume, patterns)
  3. Honeypot endpoints pour détection attaquants
  4. Corrélation logs API avec tentatives login

Valeur par défaut : Monitoring API limité aux logs serveur web

10.1.14 — Cache API Sécurisé

Niveau : 🟡 Modéré Référence : CIS WordPress 10.14 MITRE ATT&CK : T1565

Description : Configurer le cache API de manière sécurisée pour éviter les fuites de données et empoisonnements.

Vérification :

# Vérifier cache headers API
curl -I https://votre-site.com/wp-json/wp/v2/users | grep -E '(Cache-Control|ETag|Last-Modified)'
# Test cache avec données sensibles
curl -H 'Authorization: Bearer token123' https://votre-site.com/wp-json/wp/v2/users/me

Remédiation :

  1. No-cache pour endpoints avec données personnelles
  2. Cache keys sécurisés sans données utilisateur
  3. Invalidation cache automatique modifications sensibles
  4. Séparation cache public/privé

Valeur par défaut : Cache selon configuration générale WordPress

10.1.15 — API Gateway Integration

Niveau : 🟢 Recommandé Référence : CIS WordPress 10.15 MITRE ATT&CK : Multiple

Description : Intégrer un API Gateway pour centraliser sécurité, monitoring et contrôle d’accès à l’API WordPress.

Vérification :

# Vérifier si API accessible directement (bypass gateway)
curl -H 'Host: wordpress-backend.local' https://votre-site.com/wp-json/
# Test rate limiting via gateway vs direct
curl -I https://api-gateway.com/wordpress/wp-json/wp/v2/users

Remédiation :

  1. API Gateway (Kong, AWS API Gateway, Cloudflare)
  2. Bloquer accès direct WordPress API
  3. Authentication/authorization centralisée gateway
  4. Analytics et monitoring unifié

Valeur par défaut : API WordPress accessible directement

S11 — PARE-FEU APPLICATIF WAF

11.1.1 — Configuration Wordfence WAF

Niveau : 🟠 Important Référence : CIS WordPress 11.1 MITRE ATT&CK : T1562

Description : Déployer et configurer Wordfence comme pare-feu applicatif pour protéger contre les attaques web communes.

Vérification :

# Vérifier activation Wordfence
wp plugin list --allow-root | grep wordfence
# Test règles WAF actives
curl -I https://votre-site.com/wp-admin/admin-ajax.php -d 'action=wordfence_doScan'
# Analyser logs Wordfence
wp eval 'print_r(get_option("wordfence_version"));' --allow-root

Remédiation :

  1. Installation Wordfence Security plugin
  2. Configuration Learning Mode puis Live Traffic
  3. Activation Real-time IP Block List
  4. Tuning règles selon faux positifs

Valeur par défaut : Pas de WAF installé par défaut

11.1.2 — Protection Sucuri CloudProxy

Niveau : �� Important Référence : CIS WordPress 11.2 MITRE ATT&CK : T1562

Description : Implémenter Sucuri CloudProxy comme WAF cloud pour filtrage avancé et protection DDoS.

Vérification :

# Vérifier redirection DNS vers Sucuri
dig votre-site.com | grep -A1 'ANSWER SECTION'
# Test headers Sucuri
curl -I https://votre-site.com | grep -i sucuri
# Vérifier IP real cachée
curl -H 'Host: votre-site.com' http://IP-ORIGINE-DIRECTE

Remédiation :

  1. Configuration DNS pointing vers Sucuri
  2. Restriction accès IP origine (whitelist Sucuri)
  3. SSL/TLS proxy configuration
  4. Monitoring dashboard Sucuri

Valeur par défaut : Trafic direct vers serveur origine

11.1.3 — Cloudflare WAF Rules

Niveau : 🟠 Important
Référence : CIS WordPress 11.3 MITRE ATT&CK : T1562

Description : Configurer les règles WAF Cloudflare spécifiquement pour WordPress avec protection adaptée.

Vérification :

# Vérifier utilisation Cloudflare
curl -I https://votre-site.com | grep -i cloudflare
dig votre-site.com | grep cloudflare
# Test challenge Cloudflare
curl -A 'BadBot/1.0' https://votre-site.com/wp-login.php

Remédiation :

  1. Cloudflare proxy (orange cloud) activé
  2. WAF rules WordPress-specific activées
  3. Rate limiting aggressive wp-login.php
  4. Bot Fight Mode pour protection automatique

Valeur par défaut : DNS uniquement sans proxy Cloudflare

11.1.4 — ModSecurity Rules OWASP CRS

Niveau : 🟠 Important Référence : OWASP / CIS WordPress 11.4 MITRE ATT&CK : T1562

Description : Déployer ModSecurity avec OWASP Core Rule Set pour protection applicative au niveau serveur.

Vérification :

# Vérifier ModSecurity activé
curl -I https://votre-site.com | grep -i 'mod_security'
# Test règles OWASP CRS  
curl 'https://votre-site.com/?test=<script>alert(1)</script>'
# Analyser logs ModSecurity
tail -20 /var/log/modsec_audit.log

Remédiation :

  1. Installation mod_security Apache/Nginx
  2. Déploiement OWASP CRS v3.3+
  3. Configuration anomaly scoring mode
  4. Tuning rules selon applications

Valeur par défaut : ModSecurity non installé par défaut

11.1.5 — Rate Limiting Avancé

Niveau : 🟠 Important Référence : CIS WordPress 11.5
MITRE ATT&CK : T1499

Description : Implémenter un rate limiting sophistiqué pour différents types de requêtes et endpoints WordPress.

Vérification :

# Test rate limiting login
for i in {1..20}; do curl -X POST https://votre-site.com/wp-login.php -d 'log=test&pwd=test'; echo "Attempt $i"; done
# Test rate limiting API  
for i in {1..50}; do curl https://votre-site.com/wp-json/wp/v2/users; done
# Vérifier configuration mod_evasive

Remédiation :

  1. mod_evasive Apache : limite requests/page/sec
  2. fail2ban WordPress-specific rules
  3. Rate limiting différentiel par endpoint
  4. Whitelist IPs légitimes (monitoring, CDN)

Valeur par défaut : Pas de rate limiting configuré

11.1.6 — IP Blocking et Geolocation

Niveau : 🟡 Modéré Référence : CIS WordPress 11.6 MITRE ATT&CK : T1562

Description : Bloquer les IPs malveillantes et implémenter des restrictions géographiques selon les besoins business.

Vérification :

# Vérifier GeoIP database  
geoiplookup 192.168.1.1
# Test accès depuis VPN/Tor
curl --proxy socks5://127.0.0.1:9050 https://votre-site.com/wp-login.php
# Analyser logs par pays
awk '{print $1}' /var/log/apache2/access.log | sort | uniq -c | sort -nr | head -10

Remédiation :

  1. Plugin IP Geo Block pour WordPress
  2. Configuration mod_geoip Apache/Nginx
  3. Blocklists IP threat intelligence
  4. Whitelist pays autorisés si applicable

Valeur par défaut : Accès mondial sans restriction géo

11.1.7 — Bot Protection et CAPTCHA

Niveau : 🟡 Modéré
Référence : CIS WordPress 11.7 MITRE ATT&CK : T1499

Description : Détecter et bloquer les bots malveillants avec protection CAPTCHA pour formulaires sensibles.

Vérification :

# Test détection bot basique  
curl -A 'curl/7.68.0' https://votre-site.com/wp-login.php
# Test sans User-Agent
curl -H 'User-Agent:' https://votre-site.com/wp-login.php
# Analyser User-Agents suspects
awk '{print $12}' /var/log/apache2/access.log | sort | uniq -c | sort -nr | head -20

Remédiation :

  1. reCAPTCHA v3 sur wp-login.php et formulaires
  2. Plugin Akismet pour anti-spam
  3. Challenge JavaScript pour bots simples
  4. Honeypot fields dans formulaires

Valeur par défaut : Pas de protection bot configurée

11.1.8 — Country/Region Blocking

Niveau : 🟡 Modéré Référence : CIS WordPress 11.8 MITRE ATT&CK : T1562

Description : Bloquer l’accès depuis certains pays ou régions présentant un risque élevé selon le profil de menace.

Vérification :

# Test GeoIP lookup pour IPs suspectes
echo '94.102.49.190' | geoiplookup  # Example IP
# Analyser distribution géographique trafic
awk '{print $1}' /var/log/apache2/access.log | xargs -I {} geoiplookup {} | grep 'Country' | sort | uniq -c
# Test accès via VPN pays bloqués

Remédiation :

  1. Configuration mod_geoip avec blocklists pays
  2. Cloudflare Geographic restrictions
  3. Plugin WordPress IP Geo Block
  4. Whitelist exceptions pour partenaires internationaux

Valeur par défaut : Accès global sans restriction pays

11.1.9 — WAF Rules Customization

Niveau : 🟡 Modéré Référence : CIS WordPress 11.9
MITRE ATT&CK : T1562

Description : Personnaliser les règles WAF selon les spécificités de l’application WordPress et réduire les faux positifs.

Vérification :

# Analyser faux positifs WAF
grep 'ModSecurity.*blocked' /var/log/apache2/error.log | tail -10
# Test règles custom WordPress
curl -X POST https://votre-site.com/wp-admin/admin-ajax.php -d 'action=custom_function&data=test'
# Vérifier whitelist patterns

Remédiation :

  1. Analyse logs faux positifs régulière
  2. Rules customization WordPress-specific
  3. Whitelist patterns légitimes (plugins, thèmes)
  4. Tuning anomaly threshold selon environnement

Valeur par défaut : Règles WAF génériques sans customization

11.1.10 — Application Layer DDoS Protection

Niveau : 🟠 Important Référence : CIS WordPress 11.10 MITRE ATT&CK : T1499

Description : Protection spécialisée contre les attaques DDoS au niveau applicatif (Layer 7) ciblant WordPress.

Vérification :

# Simuler charge applicative élevée
ab -n 10000 -c 100 https://votre-site.com/
# Test attaque slowloris  
timeout 30 curl -H 'Connection: keep-alive' -H 'Keep-Alive: timeout=600' https://votre-site.com/wp-login.php &
# Monitoring ressources serveur
iostat -x 1 5

Remédiation :

  1. CDN avec DDoS protection (Cloudflare, AWS Shield)
  2. Rate limiting agressif pendant attaques
  3. Auto-scaling infrastructure cloud
  4. Cache agressif contenu statique

Valeur par défaut : Protection DDoS basique hébergeur

11.1.11 — WAF Logging et Monitoring

Niveau : 🟡 Modéré Référence : CIS WordPress 11.11 MITRE ATT&CK : T1562

Description : Configurer logging détaillé et monitoring du WAF pour analyse forensique et tuning règles.

Vérification :

# Vérifier logs WAF détaillés  
tail -20 /var/log/modsec_audit.log
ls -la /var/log/wordfence/
# Analyser patterns bloqués
grep 'BLOCK' /var/log/apache2/error.log | awk '{print $NF}' | sort | uniq -c

Remédiation :

  1. Configuration audit logging complet WAF
  2. Retention logs selon politique entreprise
  3. Dashboard monitoring temps réel WAF
  4. Alertes automatiques attaques détectées

Valeur par défaut : Logging WAF basique ou absent

11.1.12 — WAF Performance Optimization

Niveau : 🟡 Modéré
Référence : CIS WordPress 11.12 MITRE ATT&CK : N/A

Description : Optimiser les performances du WAF pour minimiser l’impact sur les temps de réponse du site WordPress.

Vérification :

# Mesurer latence avec/sans WAF
time curl -s https://votre-site.com > /dev/null
# Test performance cache WAF  
ab -n 100 -c 10 https://votre-site.com/wp-content/themes/theme/style.css
# Monitoring CPU usage WAF
top | grep 'mod_security\|nginx\|apache'

Remédiation :

  1. Cache règles WAF en mémoire
  2. Optimisation ordre règles (most specific first)
  3. Exclusion ressources statiques de certaines règles
  4. Load balancing avec health checks WAF

Valeur par défaut : Configuration WAF sans optimisation performance

11.1.13 — WAF Bypass Prevention

Niveau : 🟠 Important Référence : CIS WordPress 11.13 MITRE ATT&CK : T1562

Description : Empêcher les techniques de contournement du WAF par encoding, obfuscation et autres méthodes.

Vérification :

# Test bypass encoding
curl 'https://votre-site.com/?test=%3Cscript%3Ealert(1)%3C/script%3E'
# Test double encoding  
curl 'https://votre-site.com/?test=%253Cscript%253E'
# Test HTTP Parameter Pollution
curl 'https://votre-site.com/?test=safe&test=<script>alert(1)</script>'

Remédiation :

  1. Règles WAF anti-evasion (double encoding, etc.)
  2. Normalisation input avant analyse
  3. Multiple rule engines validation
  4. Content inspection au niveau byte

Valeur par défaut : Techniques bypass possibles selon WAF

11.1.14 — WAF Rule Updates et Threat Intelligence

Niveau : 🟡 Modéré Référence : CIS WordPress 11.14
MITRE ATT&CK : T1562

Description : Maintenir les règles WAF à jour avec les dernières signatures de menaces et threat intelligence.

Vérification :

# Vérifier version règles OWASP CRS
grep 'OWASP_CRS' /etc/modsecurity/crs/
# Check updates Wordfence  
wp plugin update wordfence --allow-root
# Vérifier threat intelligence feeds
curl -s https://reputation.alienvault.com/reputation.data | head -10

Remédiation :

  1. Auto-update règles WAF quotidiennement
  2. Abonnement threat intelligence feeds
  3. Testing règles en staging avant production
  4. Rollback automatique si règles cassent site

Valeur par défaut : Mise à jour manuelle règles WAF

11.1.15 — WAF Integration SIEM

Niveau : 🟢 Recommandé
Référence : CIS WordPress 11.15 MITRE ATT&CK : T1562

Description : Intégrer les logs et alertes WAF dans un SIEM pour corrélation avec autres sources de sécurité.

Vérification :

# Vérifier format logs WAF pour SIEM
tail -5 /var/log/modsec_audit.log | head -1
# Test envoi logs vers SIEM  
logger -p local0.info 'TEST WAF SIEM Integration'
# Vérifier parsing logs

Remédiation :

  1. Configuration syslog WAF vers SIEM
  2. Parsing et normalisation logs WAF
  3. Corrélation WAF avec logs auth/access
  4. Dashboards et alertes SIEM pour attaques WAF

Valeur par défaut : WAF standalone sans intégration SIEM

S12 — SAUVEGARDES & RESTAURATION

12.1.1 — Stratégie de Sauvegarde 3-2-1

Niveau : 🔴 Critique Référence : CIS WordPress 12.1 MITRE ATT&CK : T1485

Description : Implémenter la stratégie 3-2-1 : 3 copies des données, 2 supports différents, 1 copie hors-site pour protection optimale contre ransomware et sinistres.

Vérification :

# Vérifier sauvegardes locales
ls -la /var/backups/wordpress/ | head -10
# Test sauvegarde base de données
wp db export backup-test.sql --allow-root
# Vérifier sauvegardes distantes
aws s3 ls s3://votre-bucket-backup/ --recursive | tail -10

Remédiation :

  1. Plugin UpdraftPlus avec stockage cloud
  2. Sauvegarde locale + cloud (S3, Google Drive)
  3. Copie offline ou air-gapped régulière
  4. Tests restauration trimestriels

Valeur par défaut : Pas de stratégie sauvegarde automatique

12.1.2 — UpdraftPlus Configuration Avancée

Niveau : 🟠 Important Référence : CIS WordPress 12.2 MITRE ATT&CK : T1485

Description : Configurer UpdraftPlus avec chiffrement et stockage redondant pour sauvegardes WordPress complètes.

Vérification :

# Vérifier plugin UpdraftPlus  
wp plugin list --allow-root | grep updraftplus
# Analyser configuration sauvegarde
wp eval 'print_r(get_option("updraft_interval"));' --allow-root
# Test sauvegarde manuelle
wp eval 'do_action("updraft_backup_now");' --allow-root

Remédiation :

  1. Installation UpdraftPlus Premium pour chiffrement
  2. Configuration multi-destination (S3 + Google Drive)
  3. Planification automatique quotidienne
  4. Notifications email succès/échec

Valeur par défaut : Plugin sauvegarde non installé

12.1.3 — Sauvegarde Base de Données Sécurisée

Niveau : 🔴 Critique Référence : CIS WordPress 12.3
MITRE ATT&CK : T1485

Description : Sauvegarder la base de données WordPress avec chiffrement et vérification d’intégrité.

Vérification :

# Sauvegarde DB avec wp-cli
wp db export backup-$(date +%Y%m%d).sql --allow-root
# Test restauration DB  
wp db import backup-test.sql --allow-root
# Vérifier taille et intégrité
ls -lh backup-*.sql | tail -5

Remédiation :

  1. Scripts cron sauvegarde DB quotidienne
  2. Chiffrement AES-256 dumps SQL
  3. Checksum MD5/SHA256 pour intégrité
  4. Rétention 30 jours minimum

Valeur par défaut : Pas de sauvegarde DB automatique

12.1.4 — Sauvegarde Fichiers et Médias

Niveau : 🟠 Important Référence : CIS WordPress 12.4 MITRE ATT&CK : T1485

Description : Sauvegarder tous les fichiers WordPress incluant uploads, thèmes personnalisés et configurations.

Vérification :

# Sauvegarde complète fichiers  
tar -czf wordpress-files-$(date +%Y%m%d).tar.gz /var/www/html/
# Sauvegarde uploads uniquement
rsync -av /var/www/html/wp-content/uploads/ /backup/uploads/
# Vérifier taille backups
du -sh /backup/* | sort -hr

Remédiation :

  1. rsync quotidien vers stockage distant
  2. Exclusion logs et cache du backup
  3. Compression et chiffrement archives
  4. Monitoring espace disque backups

Valeur par défaut : Sauvegarde fichiers manuelle uniquement

12.1.5 — Test de Restauration Régulier

Niveau : 🔴 Critique Référence : CIS WordPress 12.5 MITRE ATT&CK : T1485

Description : Tester régulièrement les procédures de restauration pour valider l’intégrité et la récupérabilité des sauvegardes.

Vérification :

# Test restauration en staging
wp db import latest-backup.sql --allow-root --url=staging.votre-site.com
# Vérification intégrité site restauré
curl -I https://staging.votre-site.com
# Test fonctionnalités critiques post-restauration

Remédiation :

  1. Environnement staging dédié tests restauration
  2. Procédure documentée restauration complète
  3. Tests mensuels automatisés
  4. Métriques RTO/RPO définies et mesurées

Valeur par défaut : Pas de test restauration systématique

12.1.6 — Sauvegarde Hors-Site Sécurisée

Niveau : 🟠 Important
Référence : CIS WordPress 12.6 MITRE ATT&CK : T1485

Description : Maintenir des copies de sauvegarde géographiquement séparées et sécurisées contre accès non autorisé.

Vérification :

# Vérifier synchronisation cloud  
aws s3 sync /local/backups/ s3://backup-bucket-remote/wordpress/ --dry-run
# Test accès sauvegarde distante
aws s3 ls s3://backup-bucket-remote/wordpress/ | tail -10
# Vérifier chiffrement en transit/repos

Remédiation :

  1. Réplication multi-région (EU + US par exemple)
  2. Chiffrement client-side avant upload cloud
  3. Access controls stricts buckets S3
  4. Versioning et lifecycle policies

Valeur par défaut : Sauvegardes locales uniquement

12.1.7 — Rétention et Archivage

Niveau : 🟡 Modéré Référence : CIS WordPress 12.7 MITRE ATT&CK : T1485

Description : Définir et implémenter une politique de rétention des sauvegardes avec archivage long terme conforme aux exigences légales.

Vérification :

# Analyser âge des sauvegardes
find /backup/ -name '*.sql' -type f -mtime +30 | wc -l
# Vérifier politique lifecycle S3
aws s3api get-bucket-lifecycle-configuration --bucket backup-bucket
# Monitoring espace stockage utilisé

Remédiation :

  1. Rétention 7 quotidiennes + 4 hebdomadaires + 12 mensuelles
  2. Archivage long terme (Glacier/Deep Archive)
  3. Purge automatique selon politique
  4. Documentation légale rétention

Valeur par défaut : Accumulation sauvegardes sans politique rétention

12.1.8 — Chiffrement Sauvegardes

Niveau : 🔴 Critique Référence : OWASP A02 / CIS WordPress 12.8 MITRE ATT&CK : T1485

Description : Chiffrer toutes les sauvegardes avec des algorithmes robustes pour protéger les données sensibles.

Vérification :

# Test chiffrement sauvegarde DB
wp db export - --allow-root | openssl aes-256-cbc -e -k 'password123' > encrypted-backup.sql.enc
# Vérifier déchiffrement  
openssl aes-256-cbc -d -k 'password123' -in encrypted-backup.sql.enc > decrypted.sql
# Test intégrité post-déchiffrement
diff backup-original.sql decrypted.sql

Remédiation :

  1. AES-256 chiffrement pour toutes sauvegardes
  2. Gestion clés sécurisée (HSM, KMS)
  3. Chiffrement en transit ET au repos
  4. Rotation clés chiffrement annuelle

Valeur par défaut : Sauvegardes non chiffrées

12.1.9 — Sauvegarde Incrémentielle

Niveau : 🟡 Modéré Référence : CIS WordPress 12.9
MITRE ATT&CK : T1485

Description : Implémenter sauvegardes incrémentales pour optimiser espace stockage et temps de sauvegarde.

Vérification :

# Sauvegarde incrémentale avec rsync
rsync -av --link-dest=/backup/full-backup/ /var/www/html/ /backup/incremental-$(date +%Y%m%d)/
# Vérifier gains espace disque
du -sh /backup/*/ | sort -hr
# Test restauration point dans le temps

Remédiation :

  1. Full backup hebdomadaire + incrémentales quotidiennes
  2. Plugin BackWPup avec support incrémental
  3. Monitoring chaîne dépendances sauvegardes
  4. Tests restauration combinée full+incrémental

Valeur par défaut : Sauvegardes complètes uniquement

12.1.10 — Monitoring Sauvegardes

Niveau : 🟠 Important Référence : CIS WordPress 12.10 MITRE ATT&CK : T1485

Description : Surveiller le statut des sauvegardes avec alertes en cas d’échec pour garantir continuité de service.

Vérification :

# Vérifier logs sauvegardes  
tail -20 /var/log/backup.log
# Status dernière sauvegarde UpdraftPlus
wp eval 'print_r(get_option("updraft_last_backup"));' --allow-root
# Test notification échec
echo 'BACKUP FAILED' | mail -s 'ALERT: Backup Failed' admin@votre-site.com

Remédiation :

  1. Monitoring 24/7 statut sauvegardes
  2. Alertes email/SMS échecs sauvegarde
  3. Dashboard temps réel statut backups
  4. Escalade automatique si problème persistant

Valeur par défaut : Pas de monitoring automatique sauvegardes

12.1.11 — Documentation Procédures Restauration

Niveau : 🟡 Modéré Référence : CIS WordPress 12.11 MITRE ATT&CK : T1485

Description : Maintenir une documentation détaillée et à jour des procédures de restauration pour différents scénarios de sinistre.

Vérification :

# Vérifier documentation existante
ls -la /docs/backup-restore/ 
# Test procédure pas-à-pas  
cat /docs/disaster-recovery-wordpress.md
# Validation runbook restauration

Remédiation :

  1. Runbook détaillé restauration complète
  2. Procédures spécialisées : DB only, files only, etc.
  3. Contact escalade et responsabilités
  4. Mise à jour documentation après chaque test

Valeur par défaut : Documentation procédures basique ou absente

12.1.12 — Plan de Continuité d’Activité (PCA)

Niveau : 🟠 Important Référence : CIS WordPress 12.12 MITRE ATT&CK : T1485

Description : Élaborer un plan de continuité d’activité complet incluant WordPress dans la stratégie de reprise après sinistre.

Vérification :

# Test bascule vers site de secours
dig backup.votre-site.com
# Vérifier RTO/RPO actuels  
time wp db import large-backup.sql --allow-root
# Test communication crisis

Remédiation :

  1. Site de secours avec données synchronisées
  2. RTO < 4h, RPO < 1h pour sites critiques
  3. Procédures communication crisis
  4. Training équipe sur PCA régulier

Valeur par défaut : Pas de PCA formalisé

12.1.13 — Backup Immutable (WORM)

Niveau : 🟢 Recommandé Référence : CIS WordPress 12.13 MITRE ATT&CK : T1485

Description : Implémenter sauvegardes immutables (Write-Once-Read-Many) pour protection contre ransomware et modification malveillante.

Vérification :

# Vérifier Object Lock S3  
aws s3api get-object-lock-configuration --bucket backup-immutable
# Test tentative suppression backup immutable
aws s3 rm s3://backup-immutable/wordpress-backup-20240401.sql
# Vérifier rétention forcée

Remédiation :

  1. S3 Object Lock ou équivalent cloud
  2. Rétention minimale 30 jours immutable
  3. Accès backup immutable restreint
  4. Monitoring tentatives modification backups

Valeur par défaut : Sauvegardes modifiables/supprimables

12.1.14 — Cross-Region Backup Replication

Niveau : 🟡 Modéré Référence : CIS WordPress 12.14
MITRE ATT&CK : T1485

Description : Répliquer sauvegardes dans différentes régions géographiques pour protection contre sinistres majeurs.

Vérification :

# Vérifier réplication cross-region
aws s3api get-bucket-replication --bucket backup-primary
# Test accès backup région secondaire
aws s3 ls s3://backup-secondary-region/wordpress/ --region eu-west-1
# Monitoring lag réplication

Remédiation :

  1. Réplication automatique S3 Cross-Region
  2. Monitoring lag réplication < 1h
  3. Test failover vers région secondaire
  4. Coûts optimisés avec Intelligent Tiering

Valeur par défaut : Sauvegardes région unique

12.1.15 — Backup Security Hardening

Niveau : 🟠 Important Référence : CIS WordPress 12.15 MITRE ATT&CK : T1485

Description : Durcir la sécurité des systèmes et processus de sauvegarde pour éviter leur compromission.

Vérification :

# Vérifier permissions fichiers backup
ls -la /backup/ | awk '{print $1, $3, $4, $9}'
# Test accès non autorisé backups  
su -c 'cat /backup/database.sql' backup-user 2>&1
# Audit trail accès sauvegardes

Remédiation :

  1. Comptes service dédiés sauvegardes avec privilèges minimums
  2. Chiffrement clés stockage séparé
  3. Audit logs accès sauvegardes
  4. Network segmentation infrastructure backup

Valeur par défaut : Sécurité basique infrastructure backup

S13 — MISES À JOUR & MAINTENANCE

13.1.1 — Auto-Update WordPress Core

Niveau : 🔴 Critique Référence : CIS WordPress 13.1 MITRE ATT&CK : T1190

Description : Activer les mises à jour automatiques pour le core WordPress afin de corriger rapidement les vulnérabilités de sécurité.

Vérification :

# Vérifier version WordPress actuelle
wp core version --allow-root
# Check updates disponibles
wp core check-update --allow-root  
# Vérifier auto-updates activés
wp eval 'print_r(get_option("auto_update_core_major"));' --allow-root

Remédiation :

  1. wp-config.php : define('WP_AUTO_UPDATE_CORE', true);
  2. Notifications email updates automatiques
  3. Environnement staging pour tests pré-production
  4. Rollback plan en cas de problème

Valeur par défaut : Auto-updates mineures uniquement

13.1.2 — Gestion Plugins et Thèmes

Niveau : 🟠 Important Référence : CIS WordPress 13.2 MITRE ATT&CK : T1190

Description : Maintenir plugins et thèmes à jour avec processus de validation et rollback en cas d’incompatibilité.

Vérification :

# Lister plugins avec updates disponibles
wp plugin list --allow-root --format=table --fields=name,status,version,update_version
# Check vulnérabilités plugins
wpscan --url https://votre-site.com --enumerate vp --plugins-detection aggressive

Remédiation :

  1. Auto-update plugins critiques sécurité
  2. Tests staging avant updates plugins majeurs
  3. Inventory plugins avec priorités update
  4. Suppression plugins inutilisés régulière

Valeur par défaut : Updates manuelles plugins/thèmes

13.1.3 — Environnement Staging

Niveau : 🟠 Important Référence : CIS WordPress 13.3
MITRE ATT&CK : T1190

Description : Maintenir environnement staging pour tester updates et changements avant déploiement production.

Vérification :

# Vérifier synchronisation staging
rsync -av --dry-run /var/www/html/ staging.votre-site.com:/var/www/html/
# Test updates en staging
wp core update --allow-root --url=staging.votre-site.com  
# Validation fonctionnelle staging
curl -I https://staging.votre-site.com

Remédiation :

  1. Environnement staging identical production
  2. Synchronisation données régulière (anonymisées)
  3. Tests automatisés post-update staging
  4. Pipeline CI/CD staging → production

Valeur par défaut : Pas d’environnement staging dédié

13.1.4 — Rollback et Versioning

Niveau : 🟡 Modéré Référence : CIS WordPress 13.4 MITRE ATT&CK : T1190

Description : Capacité de rollback rapide en cas de problème avec les mises à jour WordPress ou plugins.

Vérification :

# Simuler rollback WordPress  
wp core download --version=6.4.2 --force --allow-root
# Test rollback plugin
wp plugin deactivate problematic-plugin --allow-root
# Vérifier snapshots disponibles
ls -la /snapshots/pre-update/

Remédiation :

  1. Snapshots automatiques avant chaque update
  2. Plugin WP Rollback ou similaire
  3. Git versioning pour thèmes/plugins custom
  4. Documentation procédure rollback

Valeur par défaut : Pas de mécanisme rollback automatique

13.1.5 — Monitoring Vulnérabilités

Niveau : 🟠 Important Référence : OWASP / CIS WordPress 13.5 MITRE ATT&CK : T1190

Description : Surveiller activement les bases de vulnérabilités pour WordPress, plugins et thèmes installés.

Vérification :

# Scanner vulnérabilités avec WPScan
wpscan --url https://votre-site.com --enumerate vp,vt --api-token YOUR_TOKEN
# Vérifier dernière date scan
cat /var/log/wpscan.log | tail -5
# Monitoring CVE WordPress
curl -s 'https://cve.circl.lu/api/search/wordpress' | jq '.[] | {id: .id, summary: .summary}' | head -5

Remédiation :

  1. Scan automatique quotidien vulnérabilités
  2. Abonnement alertes sécurité WordPress.org
  3. Intégration SIEM alertes CVE critiques
  4. Priorisation patches selon CVSS score

Valeur par défaut : Monitoring vulnérabilités manuel

13.1.6 — Changelog Review Process

Niveau : 🟡 Modéré
Référence : CIS WordPress 13.6 MITRE ATT&CK : T1190

Description : Processus de revue des changelogs avant application des mises à jour pour identifier les impacts potentiels.

Vérification :

# Review changelog WordPress
wp core check-update --allow-root | grep -A5 'Update available'
# Analyser changelog plugin critique  
curl -s https://wordpress.org/plugins/wordfence/changelog/
# Documentation impacts connus

Remédiation :

  1. Revue systématique changelogs avant update
  2. Tests spécifiques fonctionnalités impactées
  3. Communication équipe changements importants
  4. Validation business impact updates

Valeur par défaut : Updates sans revue préalable changelogs

13.1.7 — Maintenance Windows Planning

Niveau : 🟡 Modéré Référence : CIS WordPress 13.7 MITRE ATT&CK : N/A

Description : Planifier fenêtres de maintenance pour updates critiques avec communication appropriée.

Vérification :

# Planifier maintenance mode
wp maintenance-mode activate --allow-root  
# Test page maintenance personnalisée
curl https://votre-site.com/ | grep 'maintenance'
# Vérifier notifications utilisateurs

Remédiation :

  1. Fenêtres maintenance planifiées heures creuses
  2. Page maintenance informative et branded
  3. Communication préalable utilisateurs/clients
  4. Rollback plan si problème durant maintenance

Valeur par défaut : Updates sans planification maintenance

13.1.8 — Health Checks Post-Update

Niveau : 🟠 Important Référence : CIS WordPress 13.8 MITRE ATT&CK : T1190

Description : Vérifications automatisées post-update pour valider fonctionnement correct du site.

Vérification :

# Health check WordPress intégré
wp eval 'print_r(wp_get_site_health_data());' --allow-root
# Test fonctionnalités critiques  
curl -I https://votre-site.com/wp-login.php
curl -I https://votre-site.com/wp-admin/
# Monitoring erreurs logs
tail -20 /var/log/apache2/error.log | grep -i error

Remédiation :

  1. Scripts automatisés health check post-update
  2. Tests fonctionnels critiques (login, checkout, etc.)
  3. Monitoring métriques performance
  4. Alertes automatiques si problèmes détectés

Valeur par défaut : Validation manuelle post-update

13.1.9 — Dependencies Management

Niveau : 🟡 Modéré Référence : CIS WordPress 13.9 MITRE ATT&CK : T1190

Description : Gérer dépendances entre plugins/thèmes pour éviter conflits lors des mises à jour.

Vérification :

# Analyser dépendances plugins
wp plugin list --allow-root --format=json | jq '.[].name'
# Test désactivation plugin avec dépendances
wp plugin deactivate parent-plugin --allow-root  
# Vérifier conflicts connus

Remédiation :

  1. Matrice compatibilité plugins/thèmes
  2. Tests dépendances en staging
  3. Updates séquentielles selon dépendances
  4. Documentation dependencies critiques

Valeur par défaut : Pas de gestion formelle dépendances

13.1.10 — Emergency Security Updates

Niveau : 🔴 Critique
Référence : CIS WordPress 13.10 MITRE ATT&CK : T1190

Description : Procédure accélérée pour deployment emergency de patches sécurité critiques.

Vérification :

# Simulation update emergency
wp core update --version=latest --force --allow-root
# Test hotfix plugin sécurité  
wp plugin update wordfence --allow-root
# Validation sécurité post-emergency update
wpscan --url https://votre-site.com --no-banner

Remédiation :

  1. Procédure emergency bypass processus normal
  2. Contacts escalade 24/7 pour urgences sécurité
  3. Tests minimums mais suffisants en urgence
  4. Communication post-emergency update

Valeur par défaut : Pas de procédure emergency formalisée

13.1.11 — Automated Testing Pipeline

Niveau : 🟢 Recommandé Référence : CIS WordPress 13.11 MITRE ATT&CK : T1190

Description : Pipeline automatisé de tests pour validation des updates avant déploiement production.

Vérification :

# Lancer suite tests automatisés  
./run-wordpress-tests.sh
# Vérifier résultats tests CI/CD
curl -H 'Authorization: token' https://api.github.com/repos/owner/repo/actions/runs
# Tests performance post-update
ab -n 100 -c 10 https://staging.votre-site.com/

Remédiation :

  1. Tests unitaires plugins/thèmes custom
  2. Tests intégration fonctionnalités critiques
  3. Tests performance et sécurité automatisés
  4. Gate qualité avant promotion production

Valeur par défaut : Tests manuels uniquement

13.1.12 — Update Notifications Management

Niveau : 🟡 Modéré Référence : CIS WordPress 13.12
MITRE ATT&CK : T1190

Description : Gérer notifications updates pour éviter spam tout en maintenant visibilité sur sécurité.

Vérification :

# Vérifier notifications configurées
wp eval 'print_r(get_option("admin_email"));' --allow-root
# Test notification update  
wp plugin update --dry-run --allow-root
# Analyser historique notifications
grep 'WordPress.*update' /var/log/mail.log | tail -10

Remédiation :

  1. Notifications sécurité uniquement (pas features)
  2. Dashboard centralisé statut updates
  3. Escalade automatique updates critiques non appliquées
  4. Filtrage notifications selon criticité

Valeur par défaut : Toutes notifications updates envoyées

13.1.13 — Long-Term Support Planning

Niveau : 🟡 Modéré Référence : CIS WordPress 13.13 MITRE ATT&CK : T1190

Description : Planifier migration vers versions LTS et fin de support pour composants WordPress.

Vérification :

# Vérifier version PHP et support
php -v | head -1
# Check EOL WordPress version
curl -s https://endoflife.date/api/wordpress.json | jq '.[0]'
# Analyser plugins EOL  
wp plugin list --allow-root --format=table

Remédiation :

  1. Calendrier migration versions PHP/WordPress LTS
  2. Audit régulier plugins abandonnés
  3. Plan remplacement composants EOL
  4. Budget maintenance préventive

Valeur par défaut : Updates réactives sans planification LTS

13.1.14 — Maintenance Documentation

Niveau : 🟡 Modéré Référence : CIS WordPress 13.14
MITRE ATT&CK : N/A

Description : Documentation complète des procédures de maintenance et historique des changements.

Vérification :

# Vérifier documentation maintenance
ls -la /docs/maintenance/
# Historique updates dans git
git log --oneline | grep -i 'update\|upgrade' | head -10
# Change log applicatif
cat CHANGELOG.md | head -20

Remédiation :

  1. Runbook maintenance détaillé et à jour
  2. Historique changements avec impacts
  3. Procédures rollback documentées
  4. Knowledge base équipe maintenance

Valeur par défaut : Documentation maintenance basique

13.1.15 — Maintenance Automation

Niveau : 🟢 Recommandé
Référence : CIS WordPress 13.15 MITRE ATT&CK : T1190

Description : Automatiser tâches maintenance répétitives tout en maintenant contrôle humain sur changements critiques.

Vérification :

# Vérifier tâches cron maintenance
crontab -l | grep -E '(wp-cli|update|backup)'
# Status automation scripts  
systemctl status wordpress-maintenance.service
# Logs automation maintenance
journalctl -u wordpress-maintenance --since yesterday

Remédiation :

  1. Scripts automation updates non-critiques
  2. Human approval pour changes majeurs
  3. Monitoring automation avec alertes échec
  4. Rollback automatique si problème détecté

Valeur par défaut : Maintenance manuelle sans automation

🎯 KPI ET MÉTRIQUES SÉCURITÉ

Indicateurs de Performance

  1. Temps de mise à jour : < 24h pour correctifs critiques
  2. Couverture 2FA : 100% comptes administrateurs
  3. Taux conformité : > 95% contrôles critiques
  4. MTTR incidents : < 4h pour incidents critiques
  5. Fréquence audits : Trimestriel minimum
  6. Formation équipe : 2 sessions/an minimum

Métriques Techniques

  • Vulnérabilités ouvertes : 0 critiques, < 5 moyennes
  • Tentatives intrusion : Monitoring 24/7
  • Disponibilité : > 99.9% (SLA)
  • Performance : < 3s temps de chargement
  • Backup RTO : < 4h
  • Backup RPO : < 1h

🚨 CONTACTS D’URGENCE

Équipe Sécurité ANC

Prestataires Externes

📖 RESSOURCES COMPLÉMENTAIRES

Documentation Officielle

Outils Recommandés

  • WPScan : Scanner de vulnérabilités WordPress
  • Sucuri SiteCheck : Scanner malware en ligne
  • Qualys SSL Labs : Test configuration SSL
  • Security Headers : Analyse headers HTTP

Formation Continue

  • WordPress Security Course (Wordfence University)
  • OWASP WebGoat : Plateforme d’apprentissage
  • SANS SEC542 : Web Application Penetration Testing

📝 CHANGELOG

Version 1.0 - 04/04/2026

  • Version initiale du checklist
  • 280+ contrôles de sécurité
  • Mapping OWASP Top 10 2021
  • Intégration MITRE ATT&CK
  • Roadmap de remédiation

⚖️ MENTIONS LÉGALES

Copyright © 2026 AYI NEDJIMI CONSULTANTS (ANC)

Ce document est confidentiel et propriétaire. Toute reproduction, distribution ou utilisation sans autorisation écrite d’ANC est strictement interdite.

Limitation de responsabilité : Ce checklist est fourni à titre informatif. ANC ne garantit pas l’exhaustivité ou l’adéquation pour tous les environnements. Une analyse spécifique reste nécessaire.

Contact : contact@anc-consulting.com | www.anc-consulting.com


FIN DU DOCUMENT - CHECKLIST SÉCURITÉ WORDPRESS ANC v1.0

Toutes nos checklists sécurité

Retrouvez l'ensemble de nos 11 checklists d'audit et de durcissement professionnelles.

Voir toutes les checklists