Project Oxygen & Ideo-LabIDEO LAB Dashboard 2026

đŸ›Ąïž WAF / WAAP – Protection applicative, OWASP Top 10 & API Security

Guide technique orienté production : protection contre OWASP Top 10, injections, XSS, abus HTTP, bots, L7 DDoS, sécurité API, gouvernance des rÚgles, observabilité SOC et déploiement reverse proxy / edge / Kubernetes.

1

WAF vs WAAP

Positionnement WAF historique, WAAP moderne, protection Web + API + bots + L7 DDoS.

WAFWAAPEdge
2

OWASP Top 10

Cartographie 2025 : ce qu’un WAF couvre, ce qu’il attĂ©nue, ce qu’il ne peut pas rĂ©soudre seul.

OWASP 2025CoverageRisk
3

Injections

SQLi, NoSQLi, command injection, template injection : détection, scoring, virtual patching.

SQLiRCEA05
4

XSS & Client-side

Reflected, stored, DOM XSS, CSP, cookie hardening, filtrage sorties et défense navigateur.

XSSCSPCookies
5

Access Control

Broken Access Control, IDOR, BOLA : ce que WAAP peut dĂ©tecter et ce que l’app doit garantir.

IDORBOLAAuthZ
6

API Security

OpenAPI, JSON schema, BOLA, rate limits, inventory, tokens, GraphQL et API drift.

APIOpenAPIGraphQL
7

Abus HTTP

HTTP smuggling, traversal, méthodes, headers, protocol anomalies, SSRF signals et upload abuse.

HTTPSmugglingTraversal
8

Bot Defense

Credential stuffing, scraping, fake accounts, carding, challenges, bot score et fingerprinting.

BotsAbuseChallenge
9

L7 DDoS

HTTP flood, expensive endpoints, slow attacks, quotas, backpressure, cache et protection origine.

DDoS L7Rate LimitCache
10

Positive Model

Allowlist par route, schémas, méthodes, content-types, paramÚtres et contrats applicatifs.

AllowlistSchemaZero Trust
11

Rules Engine

Signatures, OWASP CRS, scoring, exceptions, ordre de rĂšgles et cycle de vie des politiques.

CRSRulesTuning
12

TLS & Headers

TLS termination, HSTS, cookies, CORS, CSP, sécurité des headers et chaßne proxy.

TLSHSTSCORS
13

Observabilité SOC

Logs, métriques, dashboards, SIEM, détection, forensic, alertes et playbooks incidents.

SIEMLogsSOC
14

Déploiement

CDN, reverse proxy, Kubernetes ingress, Nginx, origin shield, fail-open/fail-closed.

CDNIngressNginx
15

Exploitation & Gouvernance

Runbook, tuning, release, ownership, KPIs, exceptions, maturité et intégration DevSecOps.

RunbookDevSecOpsKPIs
1. Architecture WAF / WAAP : du filtrage HTTP Ă  la protection applicative complĂšte
WAF : Web Application Firewall

Un WAF protĂšge les applications web en inspectant les requĂȘtes HTTP/HTTPS entre les clients et l’application. Il cherche les motifs d’attaques applicatives : injection SQL, XSS, traversal, payloads suspects, mĂ©thodes HTTP dangereuses, headers anormaux, encodages multiples ou comportements incompatibles avec l’application.

  • Mode reverse proxy : le WAF termine le trafic entrant, inspecte, applique une dĂ©cision, puis relaie vers l’origine.
  • Mode transparent / bridge : insertion plus discrĂšte dans le chemin rĂ©seau, souvent plus dĂ©licate Ă  exploiter.
  • Mode CDN / edge : protection distribuĂ©e au plus prĂšs d’Internet, utile pour volumĂ©trie et attaques globales.
WAAP : Web Application & API Protection

Le WAAP Ă©tend le WAF classique avec la sĂ©curitĂ© API, la dĂ©couverte d’API, la protection des bots, l’anti-abus mĂ©tier, le rate limiting avancĂ©, la dĂ©tection comportementale et la tĂ©lĂ©mĂ©trie SOC.

CoucheRĂŽleExemple
WAFBloque les attaques HTTP connuesSQLi, XSS, RFI/LFI
API SecurityValide schémas, auth, inventaireBOLA, mass assignment
Bot DefenseContrĂŽle automatisation hostilecredential stuffing
L7 DDoSAbsorbe pics applicatifsHTTP flood, login flood
Traitement d’une requĂȘte HTTP par un WAF / WAAP
1. Terminaison TLSInspection possible uniquement si le WAF voit le flux déchiffré ou reçoit une copie exploitable des métadonnées.
2. NormalisationDécodage URL, canonicalisation, suppression ambiguïtés, contrÎle des encodages.
3. ContrÎles protocolairesMéthode, taille, headers, content-type, body, cookies, HTTP/2, anomalies.
4. Signatures & scoringRĂšgles OWASP CRS, signatures Ă©diteur, score d’anomalie, exceptions applicatives.
5. ComportementRate limit, réputation IP, empreinte client, session, bot score, historique.
6. DécisionAllow, block, challenge, tarpitting, redirect, log-only, bypass contrÎlé.
Point d’architecture : un WAF ne corrige pas une faille applicative. Il rĂ©duit l’exposition, donne du temps pour patcher, bloque des classes d’attaque et amĂ©liore la visibilitĂ©.
Negative security model

Le modĂšle nĂ©gatif bloque ce qui ressemble Ă  une attaque. C’est efficace pour dĂ©marrer vite, mais cela dĂ©pend des signatures, de la qualitĂ© de normalisation et du tuning.

  • TrĂšs utile contre les patterns connus.
  • Sensible aux faux positifs sur applications riches.
  • Doit ĂȘtre maintenu avec mises Ă  jour de rĂšgles.
Positive security model

Le modÚle positif décrit ce qui est autorisé : routes, méthodes, paramÚtres, schémas JSON, types, tailles, enumérations, structure attendue.

  • TrĂšs fort pour APIs et endpoints critiques.
  • Demande inventaire, contrats OpenAPI, connaissance mĂ©tier.
  • RĂ©duit fortement l’espace d’attaque.
ModeAvantageLimiteUsage recommandé
Detection onlyPas d’impact prodNe bloque rienPhase d’apprentissage
BlockingProtection activeRisque FPEndpoints stabilisés
ChallengeFiltre botsUX variableLogin, checkout, search
AdaptiveDécision contextuelleComplexitéWAAP mature
Indicateurs Ă  collecter dans les logs WAF / WAAP
timestamp=2026-07-06T14:21:09Z
client_ip=203.0.113.50
method=POST
host=app.example.com
uri=/api/v1/orders
status=403
rule_id=942100
rule_group=SQLI
anomaly_score=12
action=blocked
bot_score=18
trace_id=req-7fd4d1
upstream_status=-
reason="SQL injection pattern in parameter q"
À corrĂ©ler cĂŽtĂ© SOC
  • IP, ASN, pays, rĂ©putation
  • Compte utilisateur / session
  • URI, mĂ©thode, statut upstream
  • Rule ID + payload tronquĂ©
  • DĂ©cision finale et latence
À Ă©viter
  • Logger des secrets complets
  • Stocker des tokens Bearer en clair
  • Bloquer sans trace exploitable
  • CrĂ©er des exceptions globales non documentĂ©es
2. Couverture OWASP Top 10 : mapping réaliste WAF / WAAP / application
Référentiel OWASP Top 10 Web 2025

Un guide WAF / WAAP sĂ©rieux doit Ă©viter le marketing “protĂšge contre tout”. La bonne approche consiste Ă  mapper chaque risque OWASP avec le niveau de couverture rĂ©el : blocage direct, rĂ©duction d’exposition, dĂ©tection, ou responsabilitĂ© applicative.

Risque OWASPCouverture WAF/WAAPCommentaire opérationnel
A01 Broken Access ControlPartielleDétection IDOR/BOLA limitée sans contexte métier.
A02 Security MisconfigurationPartielleHeaders, méthodes, erreurs, mais config app reste clé.
A03 Supply Chain FailuresFaibleVirtual patching possible sur CVE exposée.
A04 Cryptographic FailuresPartielleTLS, HSTS, ciphers ; pas le chiffrement interne.
A05 InjectionForteSQLi, command injection, template injection, LDAPi.
A06 Insecure DesignFaible à partielleAbus métier et logique applicative difficiles.
A07 Authentication FailuresPartielleBrute force, stuffing, session abuse, mais pas design auth.
A08 Integrity FailuresPartielleUpload filtering, checksum, signatures cÎté pipeline nécessaires.
A09 Logging & AlertingForte sur runtimeTrÚs bon levier SOC si logs normalisés.
A10 Exceptional ConditionsPartielleBloque anomalies, mais la robustesse est applicative.
Ce que le WAF peut faire trĂšs bien
  • Bloquer patterns d’injection et payloads connus.
  • RĂ©duire l’exposition d’une CVE par virtual patching.
  • Filtrer mĂ©thodes, headers, tailles, content-types.
  • Limiter le dĂ©bit sur login, recherche, panier, API coĂ»teuse.
  • DĂ©tecter scans automatisĂ©s et comportements non humains.
Ce que l’application doit corriger
  • ContrĂŽles d’autorisation serveur, jamais cĂŽtĂ© client.
  • Validation mĂ©tier et invariants de domaine.
  • Gestion des secrets, stockage, chiffrement interne.
  • Design d’authentification, rotation tokens, MFA.
  • ChaĂźne CI/CD, dĂ©pendances, signatures de build.
RĂšgle d’or : WAF/WAAP = bouclier d’exposition et d’observabilitĂ©. Secure coding + IAM + tests + patch management = correction durable.
Prioriser les rĂšgles selon l’exposition rĂ©elle
SurfaceRisque dominantContrĂŽle WAAP prioritaireSignal SOC
/loginCredential stuffingRate limit + bot challenge + reputationÉchecs massifs, rotation IP
/searchSQLi, XSS reflectedCRS SQLi/XSS + anomaly scoringRule IDs 941/942, variations payload
/api/*BOLA, schema abuseOpenAPI validation + JWT checksIDs séquentiels, 403/404 patterns
/uploadMalware, polyglot, path abuseType allowlist + AV + size capMIME mismatch, extension suspecte
/checkoutBusiness logic abuseBot defense + velocity rulesPanier/transaction anormaux
# Exemple de logique de priorisation
risk_score = exposure * exploitability * business_impact * confidence
if endpoint == "login" and failed_attempts_per_ip > threshold:
    action = "challenge_or_throttle"
if rule_group in ["SQLI", "RCE"] and anomaly_score >= 8:
    action = "block"
Les limites Ă  assumer explicitement
Risques invisibles pour le WAF
  • Autorisation manquante mais requĂȘte syntaxiquement normale.
  • Fraude mĂ©tier lente et distribuĂ©e.
  • Secrets exposĂ©s cĂŽtĂ© backend ou logs internes.
  • Faille dans un job asynchrone non exposĂ© HTTP.
  • Supply chain compromise sans endpoint vulnĂ©rable visible.
Compensations nécessaires
  • SAST/DAST/IAST dans CI/CD.
  • Tests d’autorisation API systĂ©matiques.
  • Threat modeling et abus cases.
  • EDR/Runtime hardening cĂŽtĂ© serveur.
  • SIEM/SOAR pour corrĂ©lation multi-sources.
Attention : une rĂšgle WAF trop large peut donner une illusion de sĂ©curitĂ©. Une exception “temporaire” non revue devient souvent une dette de sĂ©curitĂ© permanente.
3. Protection contre les injections : SQLi, NoSQLi, OS Command, SSTI, LDAPi
Familles d’injection applicative

Les injections apparaissent lorsqu’une donnĂ©e contrĂŽlĂ©e par l’utilisateur est interprĂ©tĂ©e comme une instruction par un moteur : SQL, shell, template, LDAP, XPath, NoSQL, ORM, expression language. Le WAF cherche Ă  reconnaĂźtre ces transitions dangereuses dans les paramĂštres, headers, cookies et bodies.

TypeSurface couranteSignal WAFCorrection durable
SQL Injectionsearch, login, filtersUNION, boolean logic, commentaires SQLPrepared statements + ORM safe
Command Injectionadmin tools, export, pingséparateurs shell, commandes systÚmepas de shell, allowlist stricte
NoSQL InjectionJSON API, Mongo filtersopérateurs inattendus, types objetsschema validation + binding
SSTItemplates, emails, previewsdélimiteurs template, introspectiontemplate sandbox + escaping
LDAP/XPathauth, directory searchwildcards, opérateurs, parenthÚsesencoding contextuel
Détection par signatures

Les signatures cherchent des tokens dangereux et des combinaisons : opĂ©rateurs, fonctions, commentaires, encodages, concatĂ©nations, payloads obfusquĂ©s. Elles sont utiles mais doivent ĂȘtre accompagnĂ©es d’un score d’anomalie pour Ă©viter un blocage brutal sur un seul indice faible.

  • Normalisation avant matching.
  • DĂ©codage URL/Unicode contrĂŽlĂ©.
  • Inspection multi-champs : args, headers, cookies, body.
  • Seuils diffĂ©rents selon endpoint.
Anomaly scoring
rule 942100: SQL keyword pattern     +5
rule 942110: SQL comment sequence    +3
rule 942150: Boolean tautology        +5
rule 920272: invalid character        +2
----------------------------------------
score_total = 15
threshold_block = 8
action = block
Approche robuste : combiner signatures + contexte endpoint + schéma attendu + historique client.
Virtual patching : rĂ©duire l’exposition avant correction applicative

Lorsqu’une vulnĂ©rabilitĂ© est identifiĂ©e en production, une rĂšgle WAF ciblĂ©e peut bloquer l’exploitation pendant que l’équipe corrige le code, teste et dĂ©ploie. Cela ne remplace pas le patch, mais rĂ©duit la fenĂȘtre d’exposition.

1. IdentifierEndpoint, paramÚtre, méthode, CVE ou bug interne, trace exploit.
2. Écrire une rĂšgle Ă©troiteLimiter Ă  l’URI et au paramĂštre concernĂ©. Éviter les regex globales.
3. Log-onlyObserver faux positifs sur trafic réel pendant une courte période.
4. BloquerActiver block/challenge avec rollback simple.
5. SupprimerRetirer l’exception/rĂšgle aprĂšs patch applicatif validĂ©.
# Pseudo-rÚgle ciblée
IF uri == "/legacy/report" AND method == "GET" AND args["filter"] matches suspicious_sql_pattern
THEN block WITH reason="virtual_patch_legacy_report_sqli"
Réduire les faux positifs sans ouvrir la porte
SymptÎmeMauvaise réactionBonne réaction
Un paramÚtre contient du JSON complexeDésactiver SQLi globalementExclure uniquement ce paramÚtre sur cette route
Recherche texte avec apostrophesAbaisser le seuil partoutCréer seuil endpoint spécifique
Body trÚs volumineuxBypass completLimiter taille + scanner métadonnées + upload policy
API legacy bruyanteWhitelist IP globaleContrat minimal + rĂšgles compensatoires
Erreur frĂ©quente : une exclusion par IP source est dangereuse si cette IP reprĂ©sente un NAT d’entreprise, un CDN, un proxy ou un partenaire compromis.
4. Protection XSS et attaques cÎté navigateur : filtrage, CSP, cookies et défense en profondeur
Comprendre les trois grandes formes de XSS
TypeOrigineDétection WAFCorrection durable
Reflected XSSParamÚtre renvoyé immédiatementTrÚs bonne si payload visibleOutput encoding par contexte
Stored XSSDonnĂ©e stockĂ©e puis rendueBonne Ă  l’entrĂ©e, limitĂ©e Ă  la sortieSanitization + encoding + validation
DOM XSSJS client manipule le DOMLimitée si payload dans fragment ou logique clientAudit frontend + Trusted Types

Un WAF dĂ©tecte trĂšs bien des motifs XSS classiques dans query strings, formulaires, cookies et JSON. En revanche, il ne voit pas toujours la transformation qui se produit dans le navigateur, surtout si le problĂšme vient d’un JavaScript client qui interprĂšte une donnĂ©e comme HTML.

Ce que le WAF cherche
  • Balises script, Ă©vĂ©nements HTML, URLs javascript:, SVG abusifs.
  • Encodages mixtes et caractĂšres de contrĂŽle.
  • Attributs dangereux et fragments HTML inattendus.
  • Payloads dans JSON, XML, multipart et cookies.
Exemple de trace normalisée
rule_group=XSS
rule_id=941100
location=ARGS:comment
matched_var="<script>..."
anomaly_score=9
action=blocked
message="XSS attack detected via libinjection"
Important : le WAF doit inspecter le contenu aprĂšs dĂ©codage, mais l’application doit encoder Ă  la sortie selon le contexte : HTML, attribut, JS, URL, CSS.
Durcissement navigateur complémentaire

La Content Security Policy et les headers de sĂ©curitĂ© limitent l’impact d’un XSS qui passerait malgrĂ© le WAF. Le WAAP peut injecter ou vĂ©rifier certains headers, mais l’idĂ©al est de les gĂ©rer au niveau applicatif avec une politique cohĂ©rente.

ContrîleObjectifExemple d’effet
CSPLimiter sources scripts/stylesBloque script inline non autorisé
HttpOnlyProtéger cookie contre JSRéduit vol de session via XSS
SameSiteLimiter CSRF/session abuseContrĂŽle envoi cross-site
SecureCookie uniquement HTTPSÉvite fuite sur HTTP
X-Content-Type-OptionsÉviter MIME sniffingRĂ©duit interprĂ©tation abusive
Content-Security-Policy: default-src 'self'; script-src 'self' 'nonce-{random}'; object-src 'none'; base-uri 'self'; frame-ancestors 'none'
Set-Cookie: session=...; HttpOnly; Secure; SameSite=Lax
Cas particulier des SPA React/Vue/Angular
Angles morts WAF
  • Payload dans fragment URL non envoyĂ© au serveur.
  • DonnĂ©e reçue d’une API puis injectĂ©e dans le DOM.
  • Usage dangereux de innerHTML / dangerouslySetInnerHTML.
  • DĂ©pendance npm vulnĂ©rable cĂŽtĂ© front.
Défenses complémentaires
  • Lint sĂ©curitĂ© frontend.
  • Trusted Types si applicable.
  • Sanitizer robuste cĂŽtĂ© client et serveur.
  • CSP nonce stricte et pas de wildcard.
Conclusion : le WAF filtre l’entrĂ©e HTTP ; la sĂ©curitĂ© XSS complĂšte exige aussi un rendu frontend maĂźtrisĂ©.
5. Broken Access Control, IDOR & BOLA : limites du WAF et signaux WAAP exploitables
Une requĂȘte malveillante peut ĂȘtre syntaxiquement parfaite

Les failles d’autorisation sont souvent invisibles pour un WAF classique, car la requĂȘte respecte le protocole, le schĂ©ma et les contraintes de taille. Le problĂšme est mĂ©tier : l’utilisateur A ne devrait pas accĂ©der Ă  la ressource de l’utilisateur B.

GET /api/invoices/124785 HTTP/1.1
Authorization: Bearer valid_token_user_A
Accept: application/json

Le WAF voit une requĂȘte propre. Seule l’application connaĂźt normalement la relation : “invoice 124785 appartient-elle Ă  user_A ?”.

RisqueDétection WAFDétection WAAP avancée
IDOR/BOLAFaibleAnomalies d’énumĂ©ration, sĂ©quences IDs, 403/404
Privilege escalationFaibleRoutes admin appelées par profil non admin
Mass assignmentPartielleChamps JSON inattendus
Détection comportementale utile
Indices d’énumĂ©ration
  • Grand nombre d’IDs consĂ©cutifs consultĂ©s.
  • Ratio 403/404 inhabituel.
  • Changement rapide de tenants, org_id, user_id.
  • AccĂšs Ă  des ressources jamais vues pour ce compte.
RĂšgle comportementale
IF endpoint matches "/api/invoices/{id}"
AND distinct_path_ids_per_user_5min > 30
AND error_ratio_403_404 > 0.45
THEN action = challenge_or_block
reason = "possible_id_enumeration"
Bon design : envoyer au WAAP des métadonnées non sensibles : user_id pseudonymisé, tenant, rÎle, niveau de confiance session.
Réduire BOLA et mass assignment par schéma

Un WAAP moderne peut utiliser OpenAPI/JSON Schema pour refuser des paramĂštres et champs inattendus. Cela ne prouve pas l’autorisation, mais empĂȘche de nombreuses manipulations opportunistes.

ContrĂŽleExempleEffet
Champs autorisésPATCH /profile autorise display_name, phoneBloque is_admin=true
Types strictsinvoice_id integerBloque objets ou arrays inattendus
Longueurcomment max 5000Réduit abus mémoire
Enumstatus in [draft, paid]Bloque états non prévus
# Exemple de champ interdit détecté
method=PATCH uri=/api/users/me
json_field="role"
expected_schema="UserSelfUpdate"
action=blocked
reason="unexpected_sensitive_field"
ContrÎles indispensables cÎté backend
  • Autorisation objet par objet : vĂ©rifier l’appartenance de chaque ressource cĂŽtĂ© serveur.
  • RBAC/ABAC : centraliser les dĂ©cisions, Ă©viter les if dispersĂ©s.
  • IDs non devinables : UUID ou opaque IDs ne remplacent pas l’autorisation mais rĂ©duisent l’énumĂ©ration.
  • Tests de sĂ©curitĂ© : scĂ©narios user A / user B automatisĂ©s.
  • Journalisation mĂ©tier : Ă©vĂ©nement d’accĂšs refusĂ© avec ressource et sujet pseudonymisĂ©s.
Message clĂ© : le WAAP dĂ©tecte et ralentit l’abus ; l’application doit prendre la dĂ©cision d’autorisation correcte.
6. WAAP et API Security : inventaire, schĂ©mas, BOLA, GraphQL et dĂ©rive d’API
Le WAAP doit savoir ce qu’il protùge

La sĂ©curitĂ© API commence par l’inventaire : hosts, versions, routes, mĂ©thodes, schĂ©mas, propriĂ©taires, criticitĂ©, auth attendue, exposition publique/interne. Sans inventaire, impossible de distinguer une API lĂ©gitime d’un endpoint oubliĂ©.

ÉlĂ©mentQuestionContrĂŽle WAAP
EndpointExiste-t-il dans le contrat ?Découverte + drift detection
MéthodePOST attendu ou GET anormal ?Method allowlist
AuthJWT/OAuth requis ?Token presence + issuer/audience
SchémaBody conforme ?JSON schema validation
Versionv1 exposée encore ?Deprecated endpoint alert
OpenAPI comme contrat de sécurité

Un contrat OpenAPI bien maintenu permet au WAAP de refuser mĂ©thodes, paramĂštres, types et champs non documentĂ©s. C’est un modĂšle positif trĂšs efficace pour les APIs stables.

  • Reject unknown paths.
  • Reject unknown query/body fields.
  • Enforce content-type.
  • Limit array length and body size.
Exemple de rejet
POST /api/v2/users
Content-Type: application/json

{
  "email": "a@example.com",
  "display_name": "Alice",
  "is_admin": true
}

WAAP: block
reason: field_not_allowed:is_admin
GraphQL : surface compacte, risque concentré

GraphQL expose souvent un seul endpoint HTTP, mais la complexité est dans la query. Le WAAP doit comprendre profondeur, coût, introspection, fragments, aliases et mutations sensibles.

RisqueContrĂŽle WAAPContrĂŽle app
Query trop profondeDepth limitResolvers optimisés
Coût CPU élevéQuery cost analysisPagination obligatoire
Introspection publiqueBloquer en prodConfig serveur
Mutation sensibleRoute/rĂŽle/mutation policyAuthZ resolver
graphql.max_depth = 8
graphql.max_aliases = 20
graphql.block_introspection = true
graphql.require_auth_for_mutations = true
Abus métier des APIs
Cas fréquents
  • Scraping de catalogue.
  • Credential stuffing sur endpoint auth.
  • Abus de reset password / OTP.
  • CrĂ©ation massive de comptes.
  • Exploitation de quotas coĂ»teux.
ContrĂŽles runtime
  • Quota par user, token, IP, ASN.
  • Velocity rules par action mĂ©tier.
  • DĂ©tection de sĂ©quence anormale.
  • Challenge progressif selon risque.
  • Blocage par clĂ© API compromise.
WAAP mature : il ne protĂšge pas seulement l’endpoint, il protĂšge aussi le flux mĂ©tier exposĂ© par l’API.
7. Abus HTTP : anomalies protocolaires, request smuggling, traversal, SSRF et upload abuse
La normalisation est le socle du WAF

Avant toute rĂšgle, le WAF doit transformer la requĂȘte en reprĂ©sentation canonique. Sans cela, une mĂȘme intention peut apparaĂźtre sous de nombreuses formes encodĂ©es, ambiguĂ«s ou incompatibles entre proxy et backend.

ContrÎleObjectifDécision
URL decodingRéduire obfuscationBloquer encodage invalide
Path canonicalizationDétecter traversalNormaliser /../
Header validationÉviter ambiguĂŻtĂ©sRejeter doublons dangereux
Method allowlistLimiter surfaceGET/POST/PUT selon route
Content-Length / TEPrévenir desyncPolitique stricte
HTTP Request Smuggling / Desynchronization

Le request smuggling exploite des diffĂ©rences d’interprĂ©tation entre composants HTTP : CDN, WAF, reverse proxy, serveur applicatif. La dĂ©fense est surtout une politique stricte sur framing, headers et versions HTTP.

Signaux
  • Content-Length multiples.
  • Transfer-Encoding ambigu.
  • Combinaisons CL/TE incohĂ©rentes.
  • Headers avec espaces ou caractĂšres invalides.
  • Keep-alive anormal et rĂ©ponses dĂ©salignĂ©es.
ContrĂŽles
  • Rejeter ambiguĂŻtĂ©s, ne pas “rĂ©parer”.
  • Uniformiser HTTP/1.1/HTTP/2 cĂŽtĂ© edge.
  • DĂ©sactiver comportements legacy.
  • Aligner WAF et upstream proxy.
  • Tests de non-rĂ©gression sur chaĂźnes proxy.
PiÚge : protéger avec un WAF mal aligné avec Nginx/Apache/Envoy peut créer une faille de désynchronisation au lieu de la supprimer.
Path traversal et signaux SSRF
AbusSignal WAFContrÎle recommandé
Path traversal../, encodages, chemins systĂšmeCanonicalisation + allowlist fichiers
LFI/RFIURLs ou paths dans paramĂštresBloquer schemes inattendus
SSRFParamÚtre URL ciblant IP interneInterdire private ranges cÎté app
Open redirectredirect_uri externeAllowlist domaines
# Signaux Ă  surveiller
args.url contains "http://169.254.169.254"
args.path contains encoded_traversal
host header != expected_host
redirect_uri domain not in allowlist
SSRF : le WAF peut détecter certains patterns, mais le backend doit bloquer les ranges internes, metadata services et protocoles non autorisés.
Uploads : surface critique
Risques
  • Webshell ou script uploadĂ©.
  • MIME spoofing.
  • Archive bomb / fichier trop gros.
  • Polyglot file.
  • Path manipulation dans filename.
ContrĂŽles WAF/WAAP
  • Content-type allowlist.
  • Extension allowlist.
  • Taille max par route.
  • AV/sandbox connector.
  • Blocage filename dangereux.
IF uri == "/upload/avatar"
AND NOT file.extension IN ["jpg", "png", "webp"]
THEN block

IF file.size > 5MB THEN block
IF file.mime != detected_mime THEN quarantine
8. Bot Defense : credential stuffing, scraping, carding et automatisation hostile
Du bot simple au bot sophistiqué
TypeComportementRisqueRéponse
Script basiqueUser-Agent faible, débit régulierScan, brute forceRate limit + block
Headless browserExécute JS, imite navigateurScraping, fake accountsFingerprint + challenge
Residential proxy botIP distribuées, faible débit par IPCredential stuffingCompte/session velocity
Human farm assistedRésout challengesFraude persistanteAnalyse comportementale
Protection du login

Le credential stuffing utilise des couples login/mot de passe compromis sur d’autres services. L’attaque peut ĂȘtre lente, distribuĂ©e et apparemment normale par IP.

Signaux
  • Échecs sur nombreux comptes.
  • Un compte essayĂ© depuis nombreux ASN.
  • User-Agent homogĂšne sur IP diverses.
  • Absence de navigation prĂ©-login.
  • Rotation de proxies rĂ©sidentiels.
ContrĂŽles
  • Rate limit par compte + IP + subnet.
  • MFA adaptatif.
  • Challenge selon bot score.
  • Credential intelligence si disponible.
  • Protection de reset password.
IF endpoint == "/login"
AND failed_logins_for_account_10min > 5
THEN require_mfa_or_delay

IF distinct_accounts_per_ip_5min > 20
THEN block_or_challenge
Détecter le scraping sans bloquer Google ni partenaires
SignalInterprétationAction
Navigation sans assetsClient ne charge pas CSS/JS/imagesAugmenter bot score
Pagination exhaustiveCollecte catalogueThrottle progressif
Temps inter-page constantAutomatisationChallenge
Volume par session élevéExtractionQuota session/user
Robots légitimesSEO/monitoringAllowlist signée/validée
Bon compromis : le scraping se traite souvent mieux par throttling, tarpit et quotas que par blocage brutal.
Choisir le bon niveau de friction
Low risk

Allow + log. Pas de friction inutile.

Medium

JS challenge, proof-of-work léger, rate limit.

High

Captcha, MFA, temporary block, review SOC.

risk = bot_score + reputation_score + velocity_score + endpoint_sensitivity
if risk < 30: action = "allow"
elif risk < 70: action = "challenge"
else: action = "block_or_mfa"
UX : sur les flux critiques, un challenge trop agressif peut devenir une indisponibilité fonctionnelle. Tester mobile, accessibilité et utilisateurs légitimes.
9. Protection L7 DDoS : HTTP flood, endpoints coûteux et backpressure applicatif
Pourquoi le L7 est différent

Une attaque L7 peut utiliser des requĂȘtes HTTP valides qui coĂ»tent cher au backend : recherche, export, login, gĂ©nĂ©ration PDF, GraphQL complexe, panier, calcul tarifaire. Le volume rĂ©seau peut ĂȘtre modĂ©rĂ© mais l’impact CPU/DB massif.

NiveauSignalDéfense
L3/L4pps/bps, SYN floodScrubbing, Anycast, ACL
L7 simpleRPS élevé sur une routeRate limit, cache, challenge
L7 coûteuxRPS modéré, coût backend élevéCost-based limiting
Slow HTTPConnexions lentesTimeouts, header/body limits
Rate limit multi-dimensionnel
Clés de limitation
  • IP / subnet / ASN.
  • Session / cookie / device fingerprint.
  • User ID / tenant / API key.
  • Endpoint / mĂ©thode / coĂ»t.
  • Pays / rĂ©putation / bot score.
Exemple de politiques
/login      10 req/min/account
/search     60 req/min/session
/export     3 req/hour/user
/graphql    max_cost=1000/min/token
/api/order  20 req/min/user
Conseil : limiter uniquement par IP est insuffisant dans les environnements NAT, mobiles et proxies résidentiels.
Préserver le backend
ContrĂŽleButExemple
Cache edgeAbsorber lectures publiquesCatalogues, assets, pages statiques
Request coalescingÉviter stampede1 requĂȘte origine pour N clients
Connection poolingStabiliser upstreamLimiter connexions backend
Circuit breakerÉviter effondrement503 contrĂŽlĂ© si DB saturĂ©e
Origin shieldMasquer IP origineOrigine n’accepte que WAAP/CDN
# Principe réseau
origin firewall allow only:
  - WAAP edge IP ranges
  - deployment pipeline
  - admin VPN
block direct internet traffic to origin
Slowloris, slow POST, connexions lentes

Certaines attaques ne cherchent pas le dĂ©bit, mais l’occupation de ressources : sockets, workers, buffers. Le WAF/reverse proxy doit imposer des timeouts et limites cohĂ©rentes.

Limites utiles
  • Header read timeout.
  • Body read timeout.
  • Max header size.
  • Max body size par route.
  • Max concurrent connections par client.
Alertes
  • Connexions ouvertes sans requĂȘte complĂšte.
  • Body rate trĂšs faible.
  • Upstream queue en hausse.
  • Workers saturĂ©s, RPS stable.
Attention : un timeout trop bas peut casser les utilisateurs mobiles ou uploads légitimes ; appliquer par route.
10. ModÚle positif : définir explicitement ce qui est autorisé
Le modùle positif comme “contrat runtime”

Au lieu de seulement bloquer ce qui ressemble à une attaque, le modÚle positif définit ce qui est normal : routes, méthodes, paramÚtres, types, tailles, headers, content-types, pays, clients, rÎles. Tout écart devient suspect.

Route/api/v2/orders/{id}
MéthodeGET uniquement
AuthJWT requis, audience correcte
ParamÚtresexpand facultatif, enum contrÎlée
Réponse anormaleAlert si explosion 5xx/403
Politiques par famille d’endpoints
EndpointMéthodesBodyContrÎle fort
/loginPOSTJSON courtRate limit compte/IP/device
/api/orders/{id}GET, PATCHSchema strictJWT + schema + velocity
/upload/avatarPOSTmultipartType/size allowlist
/admin/*GET/POSTvariableIP/VPN + MFA + role
/healthGETnoneAllow monitoring IP only
IF uri startswith "/admin"
AND NOT client_ip IN trusted_admin_ranges
THEN block
Construire le modĂšle sans casser la production
Phase 1 : Observe
  • Log-only sur 7 Ă  14 jours selon trafic.
  • Identifier endpoints, mĂ©thodes, content-types.
  • Comparer avec code / routes / OpenAPI.
  • RepĂ©rer clients lĂ©gitimes atypiques.
Phase 2 : Enforce
  • Activer sur endpoints stables.
  • Commencer par mĂ©thodes et tailles.
  • Ajouter schĂ©mas JSON.
  • Exceptions documentĂ©es et datĂ©es.
Bonne pratique : versionner la politique WAF comme du code et valider les changements avec replay de trafic anonymisé.
PiĂšges du modĂšle positif
  • Applications trĂšs dynamiques : routes et paramĂštres changent souvent ; le modĂšle dĂ©rive vite.
  • Clients mobiles anciens : versions d’API non homogĂšnes, formats historiques.
  • Partenaires : intĂ©grations B2B hors contrat ou mal documentĂ©es.
  • GraphQL : un endpoint unique cache une grande variĂ©tĂ© de requĂȘtes.
  • Uploads : trop de contraintes peuvent bloquer des fichiers mĂ©tiers lĂ©gitimes.
Réponse : appliquer le modÚle positif progressivement, route par route, avec métriques de faux positifs.
11. Rules Engine : signatures, CRS, anomaly scoring, exceptions et gouvernance
Une rĂšgle WAF doit ĂȘtre explicable
id: 942100
phase: request
scope: ARGS|REQUEST_BODY|COOKIES
detector: libinjection_sqli
severity: critical
score: +5
action: block if anomaly_score >= threshold
tags: attack-sqli, owasp-a05

Une rĂšgle exploitable en production doit avoir un identifiant stable, un niveau de sĂ©vĂ©ritĂ©, une portĂ©e claire, un message comprĂ©hensible, un tag de risque et une stratĂ©gie d’exception.

Pipeline logique des rĂšgles
Phase 0Reputation, géolocalisation, denylist évidente.
Phase 1Headers, méthode, URI, protocole, Host.
Phase 2Body, arguments, JSON/XML, multipart.
Phase 3Response headers, status, leakage patterns.
Phase 4Response body si inspection sortante activée.
Phase 5Logging, alerting, SIEM enrichment.
Performance : plus l’inspection du body est profonde, plus la latence et la consommation mĂ©moire augmentent.
Exceptions : chirurgicales, temporaires, auditées
Mauvaise exceptionBonne exception
Désactiver SQLi globalementDésactiver rÚgle 942100 sur ARGS:query pour /search uniquement
Whitelist IP partenaire entiÚreCréer policy partenaire avec auth + schéma + quotas
Abaisser seuil globalSeuil spécifique endpoint + logs renforcés
Bypass /api/*Contrat OpenAPI route par route
exception:
  route: /search
  parameter: q
  rule_id: 942100
  reason: "texte libre avec apostrophes légitimes"
  owner: "team-search"
  expires: "2026-09-01"
Gouverner les rĂšgles comme du code
  • Versionning : chaque changement de policy doit ĂȘtre tracĂ©.
  • Review : double validation pour exceptions critiques.
  • Staging : tester sur prĂ©production et replay de logs.
  • Canary : appliquer d’abord Ă  un pourcentage faible ou log-only.
  • Metrics : faux positifs, blocages, top rules, latence.
  • Expiration : toute exception doit avoir une date de revue.
Risque organisationnel : le WAF devient dangereux lorsque personne ne possĂšde officiellement les exceptions.
12. TLS, headers et durcissement HTTP : sécurité transport et navigateur
Terminaison TLS au niveau WAAP

Le WAF/WAAP peut terminer TLS pour inspecter les requĂȘtes. Il doit ensuite protĂ©ger le lien vers l’origine, idĂ©alement en TLS Ă©galement, avec validation du certificat upstream et restriction IP origine.

PointBonne pratiqueRisque si absent
CiphersSuites modernes uniquementDowngrade, conformité faible
TLS originHTTPS edge → originClair interne exposĂ©
Cert originValidation stricteMITM interne possible
mTLSPour admin/API sensiblesClient non authentifié
Headers Ă  contrĂŽler ou injecter
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
X-Content-Type-Options: nosniff
Referrer-Policy: strict-origin-when-cross-origin
Permissions-Policy: geolocation=(), microphone=(), camera=()
Content-Security-Policy: default-src 'self'; object-src 'none'; frame-ancestors 'none'
Prudence CSP : commencer en Content-Security-Policy-Report-Only avant enforcement si l’application existe dĂ©jĂ .
CORS : souvent mal compris
ConfigurationRisqueCorrection
Access-Control-Allow-Origin: *Données exposées si credentials mal gérésAllowlist domaines
Reflect Origin automatiquementBypass de politiqueValidation stricte
Allow-Credentials: true largeRisque session cross-siteLimiter origines + SameSite
Methods trop largesSurface augmentéeGET/POST par route
IF response.header["Access-Control-Allow-Origin"] == request.header["Origin"]
AND origin NOT IN cors_allowlist
THEN alert_or_strip_header
Durcissement des cookies
Attributs critiques
  • HttpOnly : non accessible JS.
  • Secure : uniquement HTTPS.
  • SameSite=Lax/Strict selon flux.
  • Path/Domain minimisĂ©s.
  • Expiration raisonnable.
Détection WAAP
  • Cookies de session sans Secure.
  • Domain trop large.
  • Absence HttpOnly.
  • Session fixation suspecte.
  • Cookie volumineux/anormal.
Important : le WAAP peut signaler ou corriger certains headers, mais la logique de session reste applicative.
13. Observabilité WAF / WAAP : logs, SIEM, forensic et playbooks SOC
Un log WAF doit permettre une enquĂȘte
ChampPourquoi
trace_idCorréler WAF, app, gateway, SIEM
client_ip / forwarded_forAttribution réseau prudente
user_id hashéContexte session sans exposer PII
rule_id / groupComprendre la détection
actionallow/block/challenge/log-only
payload_sampleExtrait tronqué et masqué
upstream_statusImpact cÎté application
Dashboards utiles
Top rules

RÚgles les plus déclenchées par app et endpoint.

False positives

Tickets, exceptions, endpoints bruyants.

Attack map

Pays, ASN, IP, bot score, réputation.

Origin health

Latence, 5xx, timeouts, saturation.

KPIs hebdo:
- blocked_requests_by_category
- challenged_vs_solved
- false_positive_rate
- top_attacked_endpoints
- policy_exceptions_expiring
- mean_time_to_tune
Alertes Ă  forte valeur
ScénarioConditionSévérité
RCE attemptCommand injection ou exploit CVE bloquéHigh/Critical
Credential stuffingÉchecs distribuĂ©s sur comptes multiplesHigh
API enumerationIDs massifs + 403/404Medium/High
WAF bypass suspected5xx app aprĂšs payload suspect allowCritical
Rule disabledException critique crééeMedium
Bonne alerte : elle combine rule signal + endpoint criticité + contexte utilisateur + impact backend.
Reconstituer un incident applicatif
1. Point d’entrĂ©eIP, ASN, pays, user-agent, fingerprint.
2. TimelinePremiĂšre requĂȘte, scans, payloads, changement de stratĂ©gie.
3. Décisions WAFCe qui a été bloqué, challengé, autorisé.
4. Corrélation appTrace_id, logs backend, DB, auth, erreurs.
5. ContainmentRÚgle ciblée, blocage token, rotation secret, patch.
incident_query:
  trace_id: req-*
  src_ip: 203.0.113.50
  time_range: 2026-07-06T13:00Z..15:00Z
  rule_groups: [SQLI, RCE, XSS]
  include_upstream_5xx: true
14. Déploiement WAF / WAAP : edge, reverse proxy, Kubernetes, origine et résilience
Principales topologies
TopologieAvantageLimite
CDN WAAPScalabilité, Anycast, DDoSDépendance fournisseur, IP origine à masquer
Reverse proxy interneContrÎle fin, proximité appAbsorbe moins bien attaques volumétriques
Kubernetes Ingress WAFIntégration cloud nativeTuning par ingress/namespace
Sidecar/API gatewayContexte service richeComplexité service mesh
On-prem applianceContrÎle réseau fortCapacité matérielle, HA nécessaire
MaĂźtriser les headers de chaĂźne

Le WAF doit savoir quelle IP est réellement le client. Une mauvaise confiance dans X-Forwarded-For peut permettre de contourner des contrÎles par IP.

Client → CDN/WAAP → Load Balancer → Nginx → App

À sĂ©curiser:
- trusted_proxy_ranges
- X-Forwarded-For overwrite au premier proxy de confiance
- X-Real-IP cohérent
- Forwarded header normalisé
- trace_id propagé
Erreur fréquente : accepter X-Forwarded-For depuis Internet sans le réécrire au bord du réseau.
Fail-open vs fail-closed
ModeComportementUsage
Fail-openSi WAF indisponible, trafic passeApps oĂč disponibilitĂ© prime
Fail-closedSi WAF indisponible, trafic bloquéAdmin, paiement, données sensibles
Degraded modeContrÎles légers + rate limitsCompromis temporaire
Choix par route : fail-closed pour /admin et APIs critiques, fail-open contrÎlé pour pages publiques à faible risque.
WAAP dans Kubernetes
Points d’intĂ©gration
  • Ingress Controller avec module WAF.
  • API Gateway avec OpenAPI.
  • Service mesh / sidecar selon criticitĂ©.
  • External WAAP devant Load Balancer.
Risques
  • Multiplication des exceptions par namespace.
  • Drift entre ingress et application.
  • Secrets TLS mal gĂ©rĂ©s.
  • Bypass via service exposĂ© directement.
Checklist Kubernetes:
[ ] Services non exposés directement Internet
[ ] Ingress annoté avec policy WAF
[ ] OpenAPI versionnée
[ ] Logs ingress corrélés avec app trace_id
[ ] NetworkPolicy limite accĂšs origine
15. Exploitation & Gouvernance : runbooks, tuning, ownership et maturité WAAP
Runbook opérationnel WAF / WAAP
DĂ©ploiement rĂšgleStaging → log-only → canary → blocking → revue.
Faux positifIdentifier route/paramùtre/rule → exception minimale → expiration.
IncidentBloquer ciblĂ© → collecter logs → corrĂ©ler app → patch durable.
Changement appMettre Ă  jour OpenAPI, routes, tailles, rĂšgles et tests.
Revue mensuelleTop rules, exceptions, endpoints non documentés, KPIs.
Qui possĂšde quoi ?
ÉquipeResponsabilitĂ©
App teamCorriger code, maintenir contrats, valider FP métier
SecurityPolitiques, rĂšgles globales, incident response
Platform/DevOpsDéploiement, TLS, HA, logs, CI/CD
SOCAlertes, triage, corrélation, escalade
ProductArbitrer friction UX vs risque métier
ClĂ© de succĂšs : le WAF ne doit pas ĂȘtre un outil isolĂ© de l’équipe sĂ©curitĂ© ; il doit suivre le cycle de release applicatif.
Mesurer la maturité
KPIPourquoiCible
False Positive RateQualité tuningTendance baisse
Exceptions expiréesDette sécurité0 critique
Endpoints inconnusAPI drift0 public
MTTR virtual patchRéactivité vulnérabilitéHeures, pas jours
Coverage blockingSurface protégée activementPar criticité
Alert precisionUtilité SOCHigh signal
Roadmap de maturité WAAP
Niveau 1

WAF en log-only, rÚgles de base, visibilité initiale.

Niveau 2

Blocking sur OWASP, tuning, SIEM, runbook FP.

Niveau 3

API schema validation, bot defense, rate limits métier.

Niveau 4

Policy as code, replay tests, canary, ownership par équipe.

Niveau 5

WAAP adaptatif, risk scoring, SOAR, feedback DevSecOps.

Vision cible : le WAAP devient une couche de contrĂŽle runtime intĂ©grĂ©e au SDLC, pas seulement un pare-feu devant l’application.