Synthèse

Deux grands types de protection

  • Vérifier les entrées utilisateurs ! (Sécurité active)
  • Vérifier que l’utilisateur est bien conscient de ses actions :
    • Vérification d’état (Sécurité active)
    • Dire au navigateur quelles opérations sont légitimes ou non (Sécurité déclarative)

Synthèse des header déclaratifs :

Il est nécessaire de rajouter :

  • Le blocage des iframe sauf si on sait ce que l’on fait, par exemple pour un besoin fonctionnel ou pour un site totalement public
X-Frame-Options: DENY
  • L’obligation de passer en HTTPS sans possiblité de dérrogation pour les futurs accès au site :
Strict-Transport-Security: max-age=63072000

En complément la CSP

Content-Security-Policy: upgrade-insecure-requests;

permet de forcer le Https en cas d’accès http

Il ne faut pas ajouter :

  • De façon systématique
Access-Control-Allow-Origin: *

Sauf si le site est public sans données confidentielles même “internes”, c’est à dire que l’on part du principe que le site peut etre pleinement requêté de n’importe où sans restrictions

  • Ce header qui n’est plus supporté et potentiellement sujet à des attaques :
X-XSS-Protection

Il est recommandé de rajouter

  • L’en-tête CSP avec une configuration à définir, par exmple :
Content-Security-Policy: default-src 'none'; script-src 'self'; connect-src 'self'; img-src 'self'; style-src 'self'; frame-ancestors 'none'; form-action 'self';
- n'accepte que les scripts, images et styles ayant le même hôte que la page appelée, ainsi que les pages appelées via XmlHttpRequest, fetch ou assimilé
- désactive les fonctions javascript de type "eval"
- désactive les scripts inline (peut etre réactivé unitairement via )
- n'autorise pas l'inclusion de la page dans un iframe (redondant avec X-Frame-Options, mais l'entete CSP a vocation à remplacer les autres déclarations)
- n'autorise que les actions de formulaire à destination du même hôte que la page appelée

WARNING

Sous réserve de savoir ce que l’on fait, on peut enrichir sa conf HSTS des éléments suivants :

Strict-Transport-Security: max-age=63072000; includeSubDomains; preload

Ce qui aura pour effet de forcer le HTTPS sur l’ensemble des sous domaines, et de l’enregistrer dans les sites “preload” c’est à dire préalablement à la première connexion pour les navigateur qui supportent cette liste “preload” (Géré par google, incluse a minima dans Chrome)

Les dépendances

Les CVE (Common Vulnerabilities and Exposures)

Les communautés/entreprises publient des alertes de sécurité observées sur leurs produits sous forme de CVE. Le CERT-FR est un sytème de surveillances de ces failles applicatives. Il publie aussi régulièrement des articles de cybersécurité.

Une CVE éventuellement complété par CERT-FR contient notemment :

  • Le contexte de la faille => une faille peut s’appliquer à un composant que l’on possède mais pas dans une configuration active dans notre contexte
  • L’impact de la faille => des scores (notamment CVSS, entre 0 et 10) sont définis pour quantifier le niveau de risque induit
  • Les versions concernées, et éventuellement les version publiées qui corrigent (souvent les communautés vont développer le correctif en interne, le publier et publier la CVE)
  • Les contournements possibles : désactiver une partie du composant, ajouter un filtrage réseau externe,…

Les CVEs sont généralement visibles sur les repository de dépendances. Exemple : https://mvnrepository.com/artifact/org.postgresql/postgresql/42.7.1

Surveiller les dépendances obsolètes

  • Dependabot ou Renovate : vérification existance d’une nouvelle version
  • Pour vérifier vulnérabilités connues : https://owasp.org/www-project-dependency-check/