- Accueil
- Défense côté client
- Demo
- Phase 3 — Atténuation
Phase 3 — Atténuation
La phase 3 crée une preuve avant/après de l’atténuation CSD. Vous réexécutez l’attaque sans atténuation pour établir une référence, appliquez les atténuations, puis réexécutez la même attaque pour prouver que CSD bloque les appels réseau. La phase 2 doit être terminée — toutes les vérifications DET doivent être RÉUSSIES — avant de continuer.
Étape 1 : Confirmer l’absence d’atténuations actives (référence)
Section intitulée « Étape 1 : Confirmer l’absence d’atténuations actives (référence) »Avant de capturer le cliché « avant », vérifiez que l’environnement est propre — aucune atténuation ne doit être active. Cela garantit que l’attaque de référence s’exécute sans aucun blocage CSD.
Vérifier le nombre de domaines atténués
Section intitulée « Vérifier le nombre de domaines atténués »curl -s \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ "xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/mitigated_domains" \ | jq '{count: (.items | length)}'Si le nombre n’est pas 0, des atténuations subsistent d’une exécution précédente. Supprimez chacune avant de continuer :
# Delete a mitigated domain (repeat for each domain name)curl -s -X DELETE \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ "xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/mitigated_domains/<domain-name>" \ | jq .Remplacez <domain-name> par le metadata.name utilisé lors de l’atténuation du domaine (par exemple, cdn.jsdelivr.net, esm.sh, unpkg.com, ga.jspm.io, httpbin.org, jsonplaceholder.typicode.com). Si le nettoyage de httpbin.org laisse un élément résiduel, essayez également de supprimer www.httpbin.org — certaines exécutions précédentes ont pu utiliser ce nom comme nom de métadonnées.
Confirmer la présence des détections de la phase 2
Section intitulée « Confirmer la présence des détections de la phase 2 »curl -s \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ "xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/detected_domains" \ | jq '{total_domains: .domain_summary.totalDomains, domains: [.domains_list[]? | {domain: .domain, category: .category}]}'| Vérification | Attendu | Statut |
|---|---|---|
| Nombre de domaines atténués | 0 (référence propre) | RÉUSSI si 0, nettoyage requis si > 0 |
| Nombre de domaines détectés | > 0 (détections de la phase 2 présentes) | RÉUSSI si > 0 |
| Domaines d’exfiltration présents | www.httpbin.org, jsonplaceholder.typicode.com | RÉUSSI si au moins un apparaît |
Étape 2 : Exécuter l’attaque — avant l’atténuation
Section intitulée « Étape 2 : Exécuter l’attaque — avant l’atténuation »Réexécutez la simulation combinée sans aucune atténuation active pour capturer une nouvelle référence. C’est le cliché « avant » — la preuve que les attaques réussissent lorsque l’atténuation CSD n’est pas appliquée.
Exécution automatisée par IA
Section intitulée « Exécution automatisée par IA »Les assistants IA dotés d’outils d’automatisation de navigateur exécutent la simulation d’attaque de manière programmatique en utilisant le même initScript de la phase 2 (qui sauvegarde le fetch natif) :
- Naviguer avec initScript — naviguez d’abord vers
about:blankpour garantir un contexte de document propre (évite les initScripts périmés des navigations précédentes), puis utiliseznavigate_pagevershttp://$F5XC_DOMAINNAME/#/loginavec l’initScript de la phase 2 (code verbatim dans Phase 2 — Exécution automatisée par IA). Cet initScript sauvegarde les références natives desetInterval,clearInterval,fetchetconsole.log— la référencefetchnative est correcte ici car aucune atténuation n’est active - Fermer la bannière de bienvenue — utilisez
press_keyavecEscapepour fermer la bannière de bienvenue. Lors des visites ultérieures, la bannière peut ne pas apparaître (cookies persistants). La boîte de dialogue de consentement aux cookies est fermée automatiquement par la touche Échap - Attendre la fin — attendez 10 secondes pour que tous les rappels de chargement/erreur des scripts CDN et les résolutions de promesses fetch se terminent
- Capturer les preuves — utilisez
list_console_messagespour vérifier[CSD Demo] Simulation completeet les résultats de chargement CDN ; utilisezlist_network_requestsfiltré sur les typesscriptetfetchpour vérifier les codes d’état HTTP (200/201pour le succès)
Exécution manuelle
Section intitulée « Exécution manuelle »Les opérateurs sans outils d’automatisation de navigateur exécutent la simulation manuellement en suivant la même procédure que Phase 2 — Étape 8 : Simulation d’attaque :
- Naviguez vers
http://xF5XC_DOMAINNAMEx/#/login - Saisissez des identifiants fictifs dans les champs Email et Mot de passe (ne soumettez pas)
- Ouvrez les DevTools — appuyez sur F12 et passez à l’onglet Console
- Collez et exécutez le script de détection combiné depuis Déclenchement de la détection
- Observez la sortie de la console — tous les scripts CDN devraient se charger et les appels d’exfiltration devraient réussir avec des réponses
200/201
Preuves — avant l’atténuation
Section intitulée « Preuves — avant l’atténuation »| Vérification | Attendu (avant atténuation) | Statut |
|---|---|---|
| Scripts CDN injectés | Les 4 balises script se chargent — des messages [Supply Chain] Loaded from apparaissent, l’onglet réseau affiche 200 | RÉUSSI |
Exfiltration fetch vers www.httpbin.org | L’onglet réseau affiche 200 — données envoyées | RÉUSSI |
| Exfiltration fetch vers jsonplaceholder.typicode.com | L’onglet réseau affiche 201 — données envoyées | RÉUSSI |
| Sortie console | [CSD Demo] Simulation complete | RÉUSSI |
Étape 3 : Appliquer les atténuations
Section intitulée « Étape 3 : Appliquer les atténuations »Pour chaque domaine détecté, effectuez un POST vers le point de terminaison des domaines atténués. Les cibles principales de la simulation de la phase 2 sont les 4 domaines d’injection CDN et tout domaine d’exfiltration de données détecté.
Cibles d’atténuation principales (issues du script de simulation combiné) :
| Domaine | Rôle |
|---|---|
cdn.jsdelivr.net | Injection de script CDN |
esm.sh | Injection de script CDN |
unpkg.com | Injection de script CDN |
ga.jspm.io | Injection de script CDN |
www.httpbin.org | Point de terminaison d’exfiltration de données |
jsonplaceholder.typicode.com | Point de terminaison d’exfiltration de données |
Atténuer un domaine (exécuter une fois par domaine) :
curl -s -X POST \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ -H "Content-Type: application/json" \ -d '{ "metadata": { "name": "cdn.jsdelivr.net", "namespace": "xF5XC_NAMESPACEx" }, "spec": { "mitigated_domain": "cdn.jsdelivr.net" } }' \ "xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/mitigated_domains" \ | jq .Répétez pour chaque domaine :
curl -s -X POST \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ -H "Content-Type: application/json" \ -d '{"metadata":{"name":"esm.sh","namespace":"xF5XC_NAMESPACEx"},"spec":{"mitigated_domain":"esm.sh"}}' \ "xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/mitigated_domains" \ | jq .
# unpkg.comcurl -s -X POST \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ -H "Content-Type: application/json" \ -d '{"metadata":{"name":"unpkg.com","namespace":"xF5XC_NAMESPACEx"},"spec":{"mitigated_domain":"unpkg.com"}}' \ "xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/mitigated_domains" \ | jq .
# ga.jspm.iocurl -s -X POST \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ -H "Content-Type: application/json" \ -d '{"metadata":{"name":"ga.jspm.io","namespace":"xF5XC_NAMESPACEx"},"spec":{"mitigated_domain":"ga.jspm.io"}}' \ "xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/mitigated_domains" \ | jq .
# httpbin.org — use www.httpbin.org as mitigated_domain (see note below)curl -s -X POST \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ -H "Content-Type: application/json" \ -d '{"metadata":{"name":"httpbin.org","namespace":"xF5XC_NAMESPACEx"},"spec":{"mitigated_domain":"www.httpbin.org"}}' \ "xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/mitigated_domains" \ | jq .
# jsonplaceholder.typicode.comcurl -s -X POST \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ -H "Content-Type: application/json" \ -d '{"metadata":{"name":"jsonplaceholder.typicode.com","namespace":"xF5XC_NAMESPACEx"},"spec":{"mitigated_domain":"jsonplaceholder.typicode.com"}}' \ "xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/mitigated_domains" \ | jq .Une réponse 200 retourne l’objet de domaine atténué créé. Une réponse 409 signifie que le domaine est déjà dans la liste des domaines atténués — il s’agit d’une condition de succès.
Étape 4 : Vérifier l’application des atténuations
Section intitulée « Étape 4 : Vérifier l’application des atténuations »Listez tous les domaines atténués et confirmez que le nombre correspond au nombre de domaines soumis :
curl -s \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ "xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/mitigated_domains" \ | jq '{count: (.items | length)}'| Vérification | Attendu | Statut |
|---|---|---|
| Nombre de domaines atténués | 6 (correspond au nombre de POST) | RÉUSSI si le nombre correspond |
Tous les POST de l’étape 3 ont retourné 200 ou 409 | Chaque domaine accepté | RÉUSSI |
Si le nombre est inférieur à celui attendu, réexécutez la commande POST pour le domaine manquant depuis l’étape 3.
Étape 5 : Exécuter l’attaque — après l’atténuation
Section intitulée « Étape 5 : Exécuter l’attaque — après l’atténuation »Réexécutez la simulation combinée exactement identique pour capturer le cliché « après ». Le script de simulation est identique — seul l’état d’atténuation de CSD a changé. Les chargements de scripts depuis les domaines atténués sont maintenant bloqués par le JavaScript CSD (le src de la balise <script> est effacé en une chaîne vide).
Exécution automatisée par IA
Section intitulée « Exécution automatisée par IA »Les assistants IA dotés d’outils d’automatisation de navigateur réexécutent la simulation d’attaque de manière programmatique en utilisant le même initScript de la phase 2 (code verbatim dans Phase 2 — Exécution automatisée par IA). L’initScript sauvegarde le fetch natif pour éviter les erreurs zone.js — cela n’affecte pas l’atténuation CSD car CSD n’intercepte pas les appels fetch().
- Naviguer avec initScript — utilisez
new_pageavecisolatedContextpour un contexte de navigateur propre (évite les initScripts périmés de l’étape 2), puis naviguez versabout:blank, puis vers la page de connexion avec l’initScript de la phase 2 - Fermer la bannière de bienvenue — utilisez
press_keyavecEscape - Attendre la fin — attendez 10 secondes pour tous les rappels asynchrones
- Capturer les preuves — utilisez
list_console_messagespour vérifier[CSD Demo] Simulation complete; utilisezlist_network_requestsfiltré sur les typesscriptetfetchpour observer que les chargements de scripts CDN sont absents (CSD a effacé le src du script) tandis que les appels fetch vers les domaines d’exfiltration se terminent toujours normalement
Exécution manuelle
Section intitulée « Exécution manuelle »Les opérateurs sans outils d’automatisation de navigateur réexécutent la simulation manuellement en suivant la même procédure que Phase 2 — Étape 8 : Simulation d’attaque :
- Naviguez vers
http://xF5XC_DOMAINNAMEx/#/login - Saisissez des identifiants fictifs dans les champs Email et Mot de passe (ne soumettez pas)
- Ouvrez les DevTools — appuyez sur F12 et passez à l’onglet Console
- Collez et exécutez le script de détection combiné depuis Déclenchement de la détection
- Observez la sortie de la console et du réseau — les rappels
onloadetonerrordes scripts CDN ne se déclenchent pas pour les domaines atténués (CSD a effacé lesrcdu script en une chaîne vide, empêchant totalement la requête réseau). Les appels fetch vers les domaines d’exfiltration (www.httpbin.org, jsonplaceholder.typicode.com) se terminent toujours avec200/201— l’atténuation CSD bloque le chargement des scripts, pas les appels fetch/XHR
Preuves — après l’atténuation
Section intitulée « Preuves — après l’atténuation »| Vérification | Attendu (après atténuation) | Statut |
|---|---|---|
| Chargements de scripts CDN | Bloqués — les scripts n’apparaissent pas dans l’onglet réseau (CSD a effacé src en chaîne vide) | RÉUSSI |
| Rappels des scripts CDN | Ni onload ni onerror ne se déclenche pour les domaines atténués | RÉUSSI |
Exfiltration fetch vers www.httpbin.org | 200 — fetch se termine toujours (CSD n’intercepte pas fetch) | INFO |
| Exfiltration fetch vers jsonplaceholder.typicode.com | 201 — fetch se termine toujours (CSD n’intercepte pas fetch) | INFO |
| Sortie console | [CSD Demo] Simulation complete | RÉUSSI |
Étape 6 : Comparaison avant/après
Section intitulée « Étape 6 : Comparaison avant/après »C’est le point culminant de la démonstration — des preuves côte à côte démontrant que la même attaque, sur la même page, avec le même script, produit désormais un résultat complètement différent.
Tableau de comparaison
Section intitulée « Tableau de comparaison »| Signal | Avant atténuation (étape 2) | Après atténuation (étape 5) |
|---|---|---|
| Chargements de scripts CDN | 200 — les 4 scripts CDN se chargent normalement | Bloqués — scripts absents de l’onglet réseau (CSD a effacé src en chaîne vide) |
Rappels onload CDN | Des messages [Supply Chain] Loaded from apparaissent | Aucun rappel ne se déclenche (aucune requête réseau n’a été effectuée) |
Exfiltration vers www.httpbin.org | 200 — données exfiltrées | 200 — fetch se termine toujours (CSD n’intercepte pas fetch) |
| Exfiltration vers jsonplaceholder.typicode.com | 201 — données exfiltrées | 201 — fetch se termine toujours (CSD n’intercepte pas fetch) |
| API des domaines atténués CSD | 0 atténué | 6 atténués |
Vérifier l’atténuation dans les données backend
Section intitulée « Vérifier l’atténuation dans les données backend »Interrogez /detected_domains toutes les 60 secondes pendant 10 itérations maximum (10 minutes). Passez au tableau de comparaison une fois la requête retournée, ou après les 10 minutes maximum — ces vérifications sont informatives et ne conditionnent pas la phase 4.
Vérifier les domaines détectés après atténuation :
curl -s \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ "xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/detected_domains" \ | jq '{total_domains: .domain_summary.totalDomains, domains: [.domains_list[]? | {domain: .domain, category: .category}]}'Vérifier le statut atténué des scripts :
NOW=$(date +%s)START=$(( NOW - 86400 ))curl -s -X POST \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ -H "Content-Type: application/json" \ -d "{\"startTime\": \"$START\", \"endTime\": \"$NOW\"}" \ "xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/scripts" \ | jq '{total: (.scripts | length), scripts: [.scripts[]? | {script_name: .script_name, risk_level: .risk_level}]}'Récapitulatif des preuves de la phase 3
Section intitulée « Récapitulatif des preuves de la phase 3 »| Vérification | Attendu | Statut |
|---|---|---|
| Référence propre (étape 1) | 0 domaine atténué au départ | RÉUSSI / ÉCHOUÉ |
| Avant — l’attaque réussit (étape 2) | Les scripts se chargent, l’exfiltration retourne 200/201 | RÉUSSI / ÉCHOUÉ |
| Atténuations appliquées (étape 3) | Les 6 domaines acceptés via POST (200 ou 409) | RÉUSSI / ÉCHOUÉ |
| Nombre atténué confirmé (étape 4) | 6 éléments dans la liste | RÉUSSI / ÉCHOUÉ |
| Après — chargements de scripts bloqués (étape 5) | Scripts CDN absents de l’onglet réseau, appels fetch toujours complétés | RÉUSSI / ÉCHOUÉ |
| Comparaison avant/après (étape 6) | Différence claire entre les preuves des étapes 2 et 5 | RÉUSSI / ÉCHOUÉ |
Phase 3 terminée. Passez à la Phase 4 — Démantèlement lorsque vous êtes prêt à supprimer tous les objets de déploiement.