Révision Glossaire EN

Taille

Yeux

Termine une partie dans un dojo pour débloquer les yeux suivants.

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) ou fe80::/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) ou HS256 (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) ou CAP_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-01 demande un fichier à http://<domain>/.well-known/acme-challenge/<token>, dns-01 un 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 avec deploy=True, qui testent des réglages comme DEBUG, ALLOWED_HOSTS et SECRET_KEY.
Les réglages sûrs par défaut
Chemin canonique
La forme absolue unique d’un chemin, avec . et .. résolus. os.path.realpath en 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-apiserver un fichier EncryptionConfiguration.
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.IsLocal en 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/rand en Go et secrets en Python en sont ; math/rand et random n’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 podSelector vide 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 semver affiche 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.json ou de go.mod require que 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 nil veut 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 /actuator pour l’exploitation : health, env, threaddump, heapdump, et gateway dans 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, des aliases comme la CVE, et des entrées affected qui nomment un paquet et les plages de versions vulnérables.
Les dépendances vulnérables
Envoi multipart
Le corps multipart/form-data qu’envoie un formulaire. Chaque partie fichier porte un filename et un en-tête Content-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 exp n’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 est health.
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/shadow pendant 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. HttpOnly cache le cookie à document.cookie. Secure ne l’envoie qu’en https:, 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.sid et 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-38545 pour 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 verify contrô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 integrity d’une entrée du lockfile : une chaîne Subresource Integrity sha512 ou sha1 de 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 de cloudflare.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 : %s dans Django, ? dans un PreparedStatement Java. 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 : enforce rejette le Pod, audit ajoute une annotation dans le journal d’audit, warn renvoie 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) ou RequestResponse (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 su ou sudo « 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.json racine 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) et restricted (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.HTML en Go, {@html} en Svelte, dangerouslySetInnerHTML en 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 admin ou moderator, 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 Fernet en Python ou cipher.NewGCMWithRandomNonce en 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 yes de 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_ENABLED vaut True tant 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.com et blog.example.com. Le port ne compte pas.
La falsification de requête intersite (CSRF)
SameSite
Un attribut de Set-Cookie qui décide si le navigateur envoie le cookie sur les requêtes cross-site : Strict, Lax ou None.
Sessions et cookies
SameSite
Un attribut de cookie (Strict, Lax ou None) 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 data sont 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 -tlnp liste ceux en TCP avec l’adresse et le processus. 0.0.0.0 veut dire toutes les interfaces réseau, 127.0.0.1 cette 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 : openat ouvre un fichier, execve lance 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.gz qu’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 crossenv pour cross-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:H qui 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 sur github.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)