Glossaire
- ACME
- Le protocole de la RFC 8555 : un client envoie du JSON signé en HTTPS à une AC pour ouvrir un compte, commander un certificat, prouver le contrôle de chaque nom et récupérer le résultat.
- Des certificats qui se renouvellent seuls
- Adresse link-local
- Une adresse de
169.254.0.0/16(IPv4) oufe80::/10(IPv6), joignable seulement sur le segment réseau local. L’IP des métadonnées en fait partie. - La falsification de requête côté serveur (SSRF)
- AEAD
- Authenticated encryption with associated data : un seul appel chiffre le message et ajoute un tag, et le déchiffrement échoue si un seul octet a changé. AES-GCM et ChaCha20-Poly1305 sont des AEAD.
- Bien utiliser la crypto
- alg
- Le champ d’en-tête qui nomme l’algorithme de signature, comme
RS256(signature RSA) ouHS256(HMAC avec un secret partagé). C’est l’émetteur du token qui le remplit. - Les pièges des JWT
- ARI
- ACME Renewal Information : l’AC indique au client une fenêtre pour renouveler chaque certificat, et peut l’avancer, par exemple avant une révocation de masse.
- Des certificats qui se renouvellent seuls
- Atteignabilité
- Le fait que ton programme puisse réellement appeler la fonction vulnérable. govulncheck la vérifie sur le graphe d’appels construit à partir de ton code source.
- Les dépendances vulnérables
- Authentification
- Vérifier qui appelle : un mot de passe, un cookie de session, un jeton. Le résultat est un identifiant d’utilisateur, ou « anonyme ».
- L’autorisation : qui a le droit de faire quoi
- Autorisation
- Vérifier si cet appelant peut faire cette action sur cette ressource. Elle passe après l’authentification, à chaque requête.
- L’autorisation : qui a le droit de faire quoi
- Avis de sécurité
- Une notice publiée pour une faille : le paquet, les plages de versions vulnérables, la première version corrigée pour chacune, et une sévérité. GitHub donne à chacun un id
GHSA-. - Répondre à un avis de sécurité
- Base64
- Une façon d’écrire n’importe quels octets avec 64 caractères imprimables. N’importe qui l’inverse avec
base64 -d, sans aucune clé. - Où vivent les secrets
- Bearer token
- Une chaîne qui prouve une connexion passée. Celui qui la détient est traité comme son propriétaire, sans autre vérification.
- Des logs utiles après une intrusion
- Capability
- Un morceau du pouvoir de root sous Linux, comme
CAP_NET_RAW(sockets bruts) ouCAP_CHOWN(changer le propriétaire d’un fichier). Docker en garde 14 par défaut pour un conteneur. - Durcir un conteneur
- CertificateVerify
- Un message de la poignée de main où le serveur signe tout l’échange jusque-là avec la clé privée qui va avec le certificat qu’il vient d’envoyer.
- TLS en une poignée de main
- Chaîne de certificats
- La liste que le serveur envoie dans son message
Certificate: son propre certificat d’abord, puis chaque certificat d’AC qui a signé le précédent. - TLS en une poignée de main
- Challenge
- Une épreuve que l’AC impose pour vérifier que tu contrôles un nom.
http-01demande un fichier àhttp://<domain>/.well-known/acme-challenge/<token>,dns-01un enregistrement TXT à_acme-challenge.<domain>. - Des certificats qui se renouvellent seuls
- check --deploy
- La commande Django
manage.py check --deploy. Elle lance les contrôles en plus, enregistrés avecdeploy=True, qui testent des réglages commeDEBUG,ALLOWED_HOSTSetSECRET_KEY. - Les réglages sûrs par défaut
- Chemin canonique
- La forme absolue unique d’un chemin, avec
.et..résolus.os.path.realpathen Python suit aussi les liens symboliques pour l’obtenir. - La traversée de chemin
- Chiffrement au repos
- L’API server chiffre chaque Secret avant de l’écrire dans etcd, avec une clé qu’etcd ne voit jamais. Kubernetes ne l’active que si tu donnes à
kube-apiserverun fichierEncryptionConfiguration. - Où vivent les secrets
- Client public
- Une appli incapable de garder un secret, comme une appli mobile ou une single-page app. N’importe qui peut la décompresser et lire le client secret qu’elle contiendrait.
- OAuth 2 en mots simples
- Code d’autorisation
- Une chaîne à usage unique et de courte durée que le serveur de connexion met dans la redirection vers l’appli. L’appli l’échange contre un access token sur le token endpoint. La RFC 6749 recommande une durée de vie de 10 minutes au plus.
- OAuth 2 en mots simples
- code_challenge
- Avec la méthode
S256, le hash SHA-256 du code_verifier encodé en base64url. L’appli l’envoie dans la première requête, et le serveur le garde avec le code. - OAuth 2 en mots simples
- code_verifier
- Une chaîne aléatoire de 43 à 128 caractères que l’appli crée pour une connexion et garde pour elle jusqu’à la requête de token.
- OAuth 2 en mots simples
- Confinement
- Les actions qui empêchent l’attaquant d’aller plus loin : couper le compte volé, couper les autres accès, remplacer les machines qui font peut-être encore tourner son code.
- Quand l’intrusion a eu lieu
- Confusion d’algorithme
- Pousser un vérificateur à contrôler la signature avec un autre algorithme que celui de l’émetteur, par exemple un HMAC dont la clé est la clé publique RSA de l’émetteur.
- Les pièges des JWT
- Confusion de dépendances
- Publier un paquet public sous le nom d’un paquet interne d’une entreprise, avec une version plus haute, pour qu’un build qui interroge les deux registres installe le public.
- Figer ce que tu installes
- Content Security Policy
- Un en-tête de réponse,
Content-Security-Policy, qui liste d’où la page peut charger scripts, styles, images et autres ressources. Le navigateur refuse ce que la politique n’autorise pas. - La Content Security Policy (CSP)
- Contrôle lexical
- Un contrôle qui ne regarde que la chaîne du chemin, comme
filepath.IsLocalen Go. Il ne lit jamais le disque, donc il ne sait pas où pointe un lien symbolique. - La traversée de chemin
- Credential stuffing
- Essayer des couples identifiant et mot de passe tirés de la fuite d’un autre site (OWASP). Ça marche sur chaque utilisateur qui a réutilisé un mot de passe.
- Ralentir les tentatives
- CSPRNG
- Un générateur aléatoire sûr pour la cryptographie : on ne peut pas prédire sa sortie à partir des sorties précédentes.
crypto/randen Go etsecretsen Python en sont ;math/randetrandomn’en sont pas. - Bien utiliser la crypto
- CSRF
- Cross-site request forgery : une page d’un autre site fait envoyer une requête à ton appli par le navigateur de la victime, et le navigateur y joint les cookies de la victime.
- La falsification de requête intersite (CSRF)
- Default deny
- Une policy avec un
podSelectorvide et aucune règle. Elle sélectionne tous les Pods du namespace et n’autorise rien, et les autres policies n’ouvrent ensuite que ce que tu listes. - Les network policies
- Défense en profondeur
- Plusieurs contrôles indépendants sur le même chemin d’attaque, que l’attaquant doit battre un par un. Quand l’un cède, il reste encore le suivant à battre.
- La défense en profondeur
- Dépendance transitive
- Un paquet absent de ton
package.json, installé parce qu’une de tes dépendances le demande.npm explain semveraffiche la chaîne qui a installé chaque copie. - Répondre à un avis de sécurité
- Dépendance transitive
- Un paquet que tu n’as pas déclaré toi-même mais qu’une de tes dépendances (ou une des leurs) tire. Il apparaît dans ton lockfile, pas dans les lignes de
package.jsonou dego.modrequireque tu as écrites. - Les dépendances vulnérables
- Désérialisation
- Retransformer des octets stockés ou reçus (YAML, JSON, pickle) en objets en mémoire. OWASP : "taking data structured in some format, and rebuilding it into an object."
- La désérialisation dangereuse
- Diagramme de flux de données
- Un dessin des processus, des stockages, des acteurs externes et des flux de données d’une fonctionnalité. Tu le parcours case par case pour chercher ce qui peut mal tourner.
- Modéliser les menaces d’une fonctionnalité
- Discriminant
- Dans Rack::Attack, la valeur selon laquelle un throttle compte : l’IP du client, un email normalisé, ou ce que renvoie le bloc. Un discriminant
nilveut dire que la requête n’est pas comptée. - Ralentir les tentatives
- DNS rebinding
- Un nom d’hôte résout vers une IP publique quand l’appli le vérifie, puis vers une IP interne quand elle se connecte. La doc de GitLab : la technique fait « a malicious domain name resolve to an internal network resource ».
- La falsification de requête côté serveur (SSRF)
- Donnée non fiable
- Tout ce qui a passé une frontière de confiance sans vérification : l’URL, chaque en-tête, chaque cookie et le corps d’une requête HTTP.
- Les frontières de confiance
- Durée de conservation
- Le temps pendant lequel on garde les logs. Pour l’OWASP, ils « must not be destroyed before the duration of the required data retention period, and must not be kept beyond this time » : ni avant la fin de cette durée, ni après.
- Des logs utiles après une intrusion
- Échappement contextuel
- Encoder une valeur pour l’endroit exact où elle est insérée : texte HTML, attribut, URL ou chaîne JavaScript. Chaque endroit demande un encodage différent.
- Le cross-site scripting (XSS)
- Endpoint actuator
- Une URL Spring Boot sous
/actuatorpour l’exploitation :health,env,threaddump,heapdump, etgatewaydans Spring Cloud Gateway. - La surface d’attaque : ce qu’un attaquant peut atteindre
- Enregistrement OSV
- Une vulnérabilité au format JSON Open Source Vulnerability : un
id, desaliasescomme la CVE, et des entréesaffectedqui nomment un paquet et les plages de versions vulnérables. - Les dépendances vulnérables
- Envoi multipart
- Le corps
multipart/form-dataqu’envoie un formulaire. Chaque partie fichier porte unfilenameet un en-têteContent-Type, tous deux écrits par le client. - Les envois de fichiers
- exp
- La claim d’expiration : un temps Unix en secondes après lequel le token doit être refusé. Un vérificateur qui ne trouve pas de
expn’a aucune date pour refuser le token. - Les pièges des JWT
- Exposition
- Le réglage Spring Boot
management.endpoints.web.exposure.include: la liste des ids d’endpoints qui répondent en HTTP. Sa valeur par défaut esthealth. - La surface d’attaque : ce qu’un attaquant peut atteindre
- Facteur de travail
- Le coût de calcul d’un hash : 1 800 000 itérations de PBKDF2-SHA256 dans Django au commit épinglé. Chaque essai d’un attaquant paie le même coût.
- Stocker les mots de passe
- Fatigue d’alerte
- Les personnes d’astreinte arrêtent de lire un type d’alerte quand presque toutes ont été des faux positifs, et elles ratent la vraie.
- Détecter une attaque
- Faux positif
- Une alerte sur une activité inoffensive, comme systemd qui lit
/etc/shadowpendant une connexion SSH. - Détecter une attaque
- Fenêtre fixe
- Un compteur qui repart à chaque multiple de la période. Avec une période de 20 secondes, les temps Unix 1 000 000 à 1 000 019 partagent un compteur, et 1 000 020 en ouvre un nouveau.
- Ralentir les tentatives
- Fixation de session
- Une attaque où l’attaquant choisit l’id de session avant que la victime se connecte, puis le réutilise après. Elle marche quand le serveur garde le même id à travers la connexion.
- Sessions et cookies
- Frontière de confiance
- Une ligne du flux de données où les données passent d’un composant que tu ne contrôles pas (un navigateur, une autre entreprise, internet) à un composant que tu contrôles (ton proxy, ton appli, ta base).
- Les frontières de confiance
- Frontière de confiance
- Une ligne où les données passent d’une partie que tu ne contrôles pas à une partie que tu contrôles, comme du navigateur à l’API. Chaque vérification se place sur cette ligne (jour 2).
- Projet final : sécuriser une petite boutique
- Fulcio
- L’autorité de certification de Sigstore. Elle vérifie un token OpenID Connect et émet un certificat X.509 valable 10 minutes, qui contient l’identité du token.
- Signer ce que tu livres
- Gestionnaire de secrets
- Un service (HashiCorp Vault, AWS Secrets Manager, Google Secret Manager) qui stocke les secrets, les remet aux appelants autorisés et peut journaliser chaque lecture.
- Où vivent les secrets
- GITHUB_TOKEN
- Un jeton que GitHub crée au début de chaque job de workflow. Il ne marche que sur le dépôt du workflow, porte les droits fixés par
permissions:, et expire à la fin du job ou au bout de 24 heures au plus. - Le moindre privilège
- Hachage
- Une fonction à sens unique : du mot de passe on tire le hash, et rien ne permet de revenir du hash au mot de passe. Pour vérifier une connexion, on hache la tentative et on compare.
- Stocker les mots de passe
- HttpOnly et Secure
- Deux attributs de
Set-Cookie.HttpOnlycache le cookie àdocument.cookie.Securene l’envoie qu’enhttps:, sauf sur localhost. - Sessions et cookies
- Id de session
- Une valeur aléatoire dans un cookie qui pointe vers un enregistrement sur le serveur. express-session l’appelle
connect.sidet la tire de 24 octets aléatoires (192 bits) ; l’OWASP demande au moins 64 bits d’entropie. - Sessions et cookies
- Identifiant CVE
- Un nom comme
CVE-2023-38545pour une vulnérabilité, pour que chaque avis, scanner et changelog désigne le même bug. - Lire une CVE
- Identité du signataire
- La paire que
cosign verifycontrôle dans le certificat : le sujet (un email ou l’URL d’un workflow) et l’émetteur OIDC qui s’en porte garant. - Signer ce que tu livres
- IDOR
- Insecure direct object reference : la requête porte un identifiant (
/invoices/1042,user_field_ids=7) et le serveur renvoie l’objet sans vérifier que l’appelant y a droit. - L’autorisation : qui a le droit de faire quoi
- Image distroless
- Une image de base du projet distroless de Google, avec les dépendances d’exécution de l’appli, sans gestionnaire de paquets ni shell.
- Durcir un conteneur
- Indicateur de compromission
- Une trace concrète de l’attaquant que d’autres peuvent chercher : une adresse IP, un chemin de fichier, un hash de fichier, un domaine, une action dans un log d’audit.
- Quand l’intrusion a eu lieu
- Injection SQL
- Une saisie utilisateur est collée dans le texte d’une requête SQL, et des caractères comme
'ou--dans cette saisie changent ce que fait la requête. - L’injection SQL
- Integrity
- Le champ
integrityd’une entrée du lockfile : une chaîne Subresource Integritysha512ousha1de l’archive qui a été décompressée. - Figer ce que tu installes
- Jeton CSRF
- Une valeur aléatoire que le serveur met dans ses propres pages et vérifie à chaque requête non sûre. Une page d’un autre site ne peut pas la lire, donc ne peut pas l’envoyer.
- La falsification de requête intersite (CSRF)
- Jeton de réinitialisation
- La chaîne secrète dans le lien du mail de réinitialisation. Qui la détient peut choisir un nouveau mot de passe pour le compte.
- Modéliser les menaces d’une fonctionnalité
- JWT
- JSON Web Token : trois parties en base64url séparées par des points,
header.payload.signature. Quiconque a le token peut décoder et lire les deux premières. - Les pièges des JWT
- Key authorization
- La chaîne que le challenge vérifie : le token, un point, puis l’empreinte SHA-256 en base64url de la clé de compte du client.
- Des certificats qui se renouvellent seuls
- Liaison à l’origine
- Dans WebAuthn, le navigateur écrit l’origine de la page dans les données de connexion signées, et la clé ne signe que pour le site où elle a été enregistrée. Une réponse produite sur
cloudflare-okta.coméchoue au contrôle decloudflare.com. - La défense en profondeur
- Liste d’autorisation
- Une liste fixe d’entrées acceptées, écrite dans le code, comme
{"name": "last_name", "age": "age"}. Le code refuse toute entrée qui n’est pas une clé de cette liste. - L’injection SQL
- Liste d’autorisation
- La liste des champs et des valeurs que le code accepte. Tout le reste est écarté ou refusé. Le guide sécurité de Rails parle de "permitted list".
- Valider les entrées à la frontière
- Liste de blocage
- Une liste de champs ou de valeurs connus comme dangereux, par exemple
admin. Tout ce qui n’y figure pas passe. Le guide de Rails parle de "restricted list". - Valider les entrées à la frontière
- Lockfile
- Un fichier qui enregistre l’arbre exact produit par une installation : chaque paquet, sa version, sa provenance et un hash. npm écrit
package-lock.json, "intended to be committed into source repositories" : il est fait pour être commité. - Figer ce que tu installes
- Log d’audit
- Un enregistrement des événements de sécurité dans l’ordre du temps : qui a agi, sur quoi, d’où, quand et avec quel résultat. Kubernetes en écrit un par requête API quand kube-apiserver reçoit une audit policy.
- Des logs utiles après une intrusion
- Magasin d’AC
- Le fichier ou le dossier de certificats d’AC racines auxquels un client fait confiance. requests prend le paquet du module
certifi; curl prend celui choisi à la compilation. - TLS en une poignée de main
- Marqueur
- L’emplacement d’une valeur dans une requête paramétrée :
%sdans Django,?dans unPreparedStatementJava. Il remplace une valeur, jamais un nom de table ou de colonne. - L’injection SQL
- Mass assignment
- Passer tout le hash de la requête à un modèle en un seul appel, comme
Person.create(params[:person]). Chaque clé de la requête remplit l’attribut du même nom. - Valider les entrées à la frontière
- Middleware
- Du code qui tourne sur chaque requête avant le handler de la route. Dans Next.js, beaucoup d’applis s’en servaient pour lire le cookie de session et rediriger les visiteurs non connectés.
- Les frontières de confiance
- Mode
- Ce que fait le contrôleur face à une violation :
enforcerejette le Pod,auditajoute une annotation dans le journal d’audit,warnrenvoie un avertissement à l’utilisateur. - Les Pod Security Standards
- Mode report-only
- La même politique envoyée en
Content-Security-Policy-Report-Only. Le navigateur ne bloque rien et signale seulement ce qu’il aurait bloqué. - La Content Security Policy (CSP)
- Modèle de menaces
- La réponse écrite à quatre questions sur un système : sur quoi travaille-t-on, qu’est-ce qui peut mal tourner, que fait-on contre, et a-t-on fait assez bien.
- Modéliser les menaces d’une fonctionnalité
- Moindre privilège
- Chaque processus, utilisateur et jeton ne reçoit que les droits dont sa tâche a besoin, et seulement le temps qu’il en a besoin.
- Le moindre privilège
- NetworkPolicy
- Un objet Kubernetes rattaché à un namespace, qui sélectionne des Pods par label et liste les connexions autorisées vers eux (
ingress) et depuis eux (egress). - Les network policies
- Niveau d’audit
- Ce que Kubernetes garde d’une requête :
None,Metadata(utilisateur, heure, verbe, ressource),Request(plus le corps de la requête) ouRequestResponse(plus le corps de la réponse). - Des logs utiles après une intrusion
- Niveau SLSA Build
- Un échelon de la spec SLSA, de L0 (aucune garantie) à L3 (plateforme de build durcie). Chaque niveau ajoute des exigences sur la provenance et sur la plateforme.
- Les attaques sur la chaîne d’approvisionnement
- no-new-privileges
- Une option de sécurité Docker qui empêche les processus du conteneur d’obtenir de nouveaux privilèges. La doc Docker : des commandes comme
suousudo« no longer work ». - Durcir un conteneur
- Nonce
- Une valeur aléatoire que le serveur place à la fois dans l’en-tête (
script-src 'nonce-R4nd0m') et sur chacune de ses propres balises<script nonce="R4nd0m">. Elle doit changer à chaque réponse. - La Content Security Policy (CSP)
- Nonce
- Une valeur passée à chaque chiffrement, qui ne doit jamais se répéter pour une même clé. AES-GCM utilise 12 octets (96 bits).
- Bien utiliser la crypto
- os.Root
- Un type de Go 1.24 qui garde un dossier ouvert. Ses méthodes refusent tout nom de fichier qui sortirait de ce dossier par
..ou par un lien symbolique. - La traversée de chemin
- Override
- Une entrée du
package.jsonracine qui impose une version d’un paquet partout dans l’arbre, quelle que soit la version que demandent tes dépendances. - Les dépendances vulnérables
- Pas de temps
- Le compteur que TOTP donne au HMAC :
T = floor(unix_time / 30). Au temps Unix 59, T vaut 1. À 60, T vaut 2. - Les seconds facteurs
- Phishing en temps réel
- Une fausse page de connexion qui transmet à l’attaquant, en quelques secondes, ce que tape la victime, pour qu’il utilise un code à usage unique avant son expiration.
- La défense en profondeur
- Pickle
- Le format de sérialisation binaire propre à Python. Charger un pickle peut importer et appeler n’importe quelle fonction nommée dans les données.
- La désérialisation dangereuse
- Plage affectée
- Les versions qui contiennent le bug, ici libcurl de la 7.69.0 à la 8.3.0 incluse. Les versions antérieures à l’arrivée du bug ne sont pas affectées.
- Lire une CVE
- Plugin réseau
- Le composant CNI qui applique les policies. La doc : une NetworkPolicy « without a controller that implements it will have no effect ».
- Les network policies
- Pod isolé
- Un Pod sélectionné par au moins une policy pour une direction. Dans cette direction, seules passent les connexions qu’une policy autorise. Un Pod qu’aucune policy ne sélectionne accepte tout.
- Les network policies
- Pod Security Admission
- Le contrôleur d’admission intégré à l’API server, stable depuis la 1.25. Il compare chaque Pod à un niveau au moment de sa création.
- Les Pod Security Standards
- Pod Security Standards
- Trois niveaux de politique définis par Kubernetes :
privileged(aucune restriction),baseline(bloque les escalades de privilèges connues) etrestricted(les pratiques de durcissement actuelles). - Les Pod Security Standards
- Porte de sortie
- Une fonction du framework qui insère une chaîne sans aucun échappement :
template.HTMLen Go,{@html}en Svelte,dangerouslySetInnerHTMLen React. - Le cross-site scripting (XSS)
- Protected mode
- Un réglage Redis, actif par défaut depuis la 3.2. Quand l’utilisateur par défaut n’a pas de mot de passe, Redis n’accepte que les connexions de 127.0.0.1, de ::1 ou d’un socket Unix.
- Les réglages sûrs par défaut
- Provenance
- Un enregistrement signé de la construction d’un artefact : quelle plateforme de build, depuis quel dépôt et quel commit, avec quels paramètres.
- Les attaques sur la chaîne d’approvisionnement
- Push protection
- Un contrôle de GitHub qui cherche les formats de secrets connus dans un push et le bloque avant que les commits n’arrivent dans le dépôt.
- Les secrets dans git
- Racine web
- Un dossier que le serveur web sert tel quel sous une URL. Dans Flask, c’est
static/, servi sous/static/. - Les envois de fichiers
- Rayon d’impact
- Tout ce qu’un attaquant peut faire avec un identifiant volé avant qu’il expire ou que quelqu’un le révoque.
- Le moindre privilège
- RBAC
- Role-based access control : les permissions sont rattachées à des rôles comme
adminoumoderator, et un utilisateur reçoit les permissions de ses rôles. - L’autorisation : qui a le droit de faire quoi
- Recette
- Une API de haut niveau qui choisit pour toi l’algorithme, le nonce et le format, comme
Ferneten Python oucipher.NewGCMWithRandomNonceen Go. - Bien utiliser la crypto
- ReDoS
- Déni de service par expression régulière : une entrée qui fait revenir en arrière une regex pendant très longtemps, et le processus dépense son CPU sur une seule chaîne.
- Répondre à un avis de sécurité
- Réécriture de l’historique
- Reconstruire les commits sans un fichier, par exemple avec
git-filter-repo, puis faire un force push. Chaque commit suivant reçoit un nouveau SHA. - Les secrets dans git
- Réencodage
- Décoder l’image reçue en pixels, puis écrire un nouveau fichier dans un format que tu choisis, sans les métadonnées d’origine.
- Les envois de fichiers
- Réglage sûr par défaut
- Un réglage dont la valeur d’origine est la valeur sûre : la personne qui n’y touche jamais reste protégée. Le
protected-mode yesde Redis en est un. - Les réglages sûrs par défaut
- Réglage sûr par défaut
- Un réglage dont la valeur, sans aucune configuration, est la valeur sûre. Chez Saleor,
HTTP_IP_FILTER_ENABLEDvautTruetant que tu ne le coupes pas (jour 7). - Projet final : sécuriser une petite boutique
- Règle de détection
- Une condition sur un événement, avec une ligne de sortie et une priorité. Chez Falco :
condition: open_write and container and fd.name endswith release_agent .... - Détecter une attaque
- Rekor
- Le journal de transparence de Sigstore : un journal public en ajout seul, avec chaque signature, son certificat et le digest du fichier signé.
- Signer ce que tu livres
- Requête paramétrée
- Le texte SQL contient des marqueurs comme
%s, et les valeurs partent vers le driver dans une liste à part :cursor.execute(sql, [value]). - L’injection SQL
- Résistant au phishing
- Se dit d’un authentifiant dont la sortie est liée au site où on l’utilise : un faux site ne peut pas la transmettre au vrai. Pour le NIST, aucun code tapé par l’utilisateur n’est résistant au phishing.
- Les seconds facteurs
- Rétroportage
- Un correctif qu’une distribution recopie dans l’ancienne version qu’elle livre. La version du paquet change, par exemple en
7.88.1-10+deb12u4, alors que le numéro amont reste 7.88.1. - Lire une CVE
- Role
- Dans le RBAC de Kubernetes, une liste de verbes permis sur des ressources d’un namespace. Un RoleBinding donne un Role à un utilisateur ou à un ServiceAccount.
- Le moindre privilège
- Rotation
- Émettre un nouveau secret, y passer chaque programme, puis désactiver l’ancien. Ensuite, la copie qui a fuité est refusée partout où elle se trouve.
- Les secrets dans git
- Rotation
- Remplacer un secret par un nouveau et révoquer l’ancien, pour qu’une copie volée ne marche plus.
- Quand l’intrusion a eu lieu
- SafeLoader
- Le loader de PyYAML qu’utilise
yaml.safe_load. Il a des constructeurs pour 12 tags standard (chaînes, nombres, listes, dictionnaires et quelques autres) et refuse tous les autres. - La désérialisation dangereuse
- Same-site
- Deux URL sont same-site quand elles ont le même schéma et le même domaine enregistrable, comme
app.example.cometblog.example.com. Le port ne compte pas. - La falsification de requête intersite (CSRF)
- SameSite
- Un attribut de
Set-Cookiequi décide si le navigateur envoie le cookie sur les requêtes cross-site :Strict,LaxouNone. - Sessions et cookies
- SameSite
- Un attribut de cookie (
Strict,LaxouNone) qui dit au navigateur s’il doit joindre le cookie à une requête venue d’un autre site. - La falsification de requête intersite (CSRF)
- Schéma
- La déclaration des champs, des types et des longueurs maximales qu’une requête peut porter, par exemple un
z.strictObject({ ... })de zod. Lire le corps avec lui renvoie une valeur typée ou une erreur. - Valider les entrées à la frontière
- Secret
- Une chaîne qui donne un accès à elle seule, sans autre contrôle : une clé d’accès AWS, un token d’API, une clé privée SSH.
- Les secrets dans git
- Secret Kubernetes
- Un objet de l’API qui contient quelques valeurs nommées, 1 MiB au plus, que les Pods lisent en variables d’environnement ou en fichiers. Ses valeurs
datasont du texte en base64. - Où vivent les secrets
- Sel
- Une chaîne aléatoire stockée à côté du hash de chaque utilisateur et mêlée à l’entrée. Deux utilisateurs au même mot de passe obtiennent des hashs différents. Les sels de Django font 22 caractères, au moins 128 bits.
- Stocker les mots de passe
- Service de métadonnées
- Un point HTTP présent sur les VM cloud à
169.254.169.254, qui répond sur l’instance elle-même. Chez AWS, ce service s’appelle IMDS. - La falsification de requête côté serveur (SSRF)
- Signature de fichier
- Les premiers octets d’un fichier, qui indiquent son format. Un JPEG commence par les octets
FF D8 FF. - Les envois de fichiers
- Signature keyless
- cosign crée une paire de clés, signe une fois et jette la clé privée. Un certificat de courte durée garde la trace de qui tenait la clé.
- Signer ce que tu livres
- Socket en écoute
- Un port qu’un processus a ouvert pour accepter des connexions.
ss -tlnpliste ceux en TCP avec l’adresse et le processus.0.0.0.0veut dire toutes les interfaces réseau,127.0.0.1cette machine seulement. - La surface d’attaque : ce qu’un attaquant peut atteindre
- SSRF
- Server-side request forgery : l’attaquant donne une URL au serveur, et le serveur envoie la requête depuis son propre réseau.
- La falsification de requête côté serveur (SSRF)
- strict-dynamic
- Un mot-clé de
script-src: un script autorisé par un nonce ou un hash peut charger d’autres scripts, et ceux-là sont autorisés aussi. - La Content Security Policy (CSP)
- STRIDE
- Six questions, une par lettre : Spoofing (usurpation), Tampering (altération), Repudiation (répudiation), Information disclosure (fuite d’information), Denial of service (déni de service), Elevation of privilege (élévation de privilèges). Tu poses chacune à chaque case et chaque flèche du diagramme.
- Modéliser les menaces d’une fonctionnalité
- Surface d’attaque
- Pour l’OWASP : "all of the different points where an attacker could get into a system, and where they could get data out", tous les points par où un attaquant entre ou sort des données. Ports, URL, fichiers reçus, files de messages, et le code derrière chacun.
- La surface d’attaque : ce qu’un attaquant peut atteindre
- Syscall
- Une demande d’un processus au noyau :
openatouvre un fichier,execvelance un programme. Falco lit ces événements dans le noyau et compare chacun à ses règles. - Détecter une attaque
- Système de fichiers racine en lecture seule
- Avec
--read-only, les fichiers propres du conteneur sont montés en lecture seule. Les écritures ne vont que vers les volumes et les tmpfs que tu listes. - Durcir un conteneur
- Tag
- Un marqueur YAML comme
!!python/object/apply:qui indique au loader quel constructeur fabrique la valeur suivante. C’est le loader qui décide pour quels tags il a un constructeur. - La désérialisation dangereuse
- Tarball de release
- Le
.tar.gzqu’un projet publie pour chaque version. Debian a importé le tarball de xz, et non l’arbre git, pour son paquet. Un tarball peut contenir des fichiers qu’aucun commit ne contient. - Les attaques sur la chaîne d’approvisionnement
- Threat model
- Une liste écrite de ce qui peut mal tourner dans une fonctionnalité, de qui le ferait, et du contrôle qui l’arrête (jour 1).
- Projet final : sécuriser une petite boutique
- TOTP
- Time-based one-time password (RFC 6238) : un HMAC du pas de temps de 30 secondes en cours, avec un secret partagé par l’appli du téléphone et le serveur, réduit à 6 chiffres.
- Les seconds facteurs
- Traversée de chemin
- Une attaque où un nom de fichier venu de l’extérieur, comme
../../etc/passwd, fait ouvrir au programme un fichier hors du dossier prévu. - La traversée de chemin
- Typosquatting
- Publier un paquet sous un nom proche d’un paquet populaire, comme
crossenvpourcross-env, pour qu’une faute de frappe l’installe. - Figer ce que tu installes
- Vecteur CVSS
- Une ligne comme
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:Hqui donne une lettre par métrique de base. La note de base, de 0 à 10, se calcule à partir d’elle. - Lire une CVE
- Vérification du nom
- Le client compare le nom de l’URL aux noms DNS du Subject Alternative Name du certificat. Une chaîne valide pour
*.badssl.coméchoue surgithub.com. - TLS en une poignée de main
- Verrouillage de compte
- Refuser les connexions d’un compte après un nombre d’échecs dans une fenêtre d’observation, pendant une durée de verrouillage (OWASP Authentication Cheat Sheet).
- Ralentir les tentatives
- Version corrigée
- La première version qui contient le correctif sur une branche donnée. Pour semver : 7.5.2 pour la 7.x, 6.3.1 pour la 6.x et 5.7.2 pour tout le reste.
- Répondre à un avis de sécurité
- WebAuthn
- L’API du navigateur (
navigator.credentials.get()) par laquelle une clé de sécurité ou une passkey signe le challenge aléatoire d’un serveur avec une clé privée qu’elle ne révèle jamais. - Les seconds facteurs
- XSS réfléchie
- Le script voyage dans la requête, par exemple
/search?q=<script>…, et le serveur le recopie dans la réponse. La victime le reçoit en cliquant sur un lien piégé. - Le cross-site scripting (XSS)
- XSS stockée
- Le script est enregistré sur le serveur, dans un commentaire ou un champ de profil, puis envoyé à chaque visiteur qui ouvre la page qui l’affiche.
- Le cross-site scripting (XSS)