Sécurité applicative Flashcards

(58 cards)

1
Q

Qu’est-ce qui rend une application vulnérable aux injections SQL?

A

Les requêtes SQL construites dynamiquement avec des paramètres provenant directement de l’utilisateur (input non sanitisé), sans utiliser de requêtes paramétrées ou d’ORM.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Comment exploiter une injection SQL avec UNION?

A

1) S’assurer que la première requête retourne rien (ex: id=666),
2) Utiliser UNION pour ajouter une requête sur la table cible,
3) Matcher le nombre de colonnes, 4) Commenter la fin de la requête originale avec –

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Exemple d’injection SQL pour extraire des passwords?

A

666 UNION SELECT id, password, 1, name FROM user WHERE id > 1;

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Comment injecter plusieurs requêtes SQL (si executescript est utilisé)

A

Terminer la première requête avec ‘);, ajouter la nouvelle requête malveillante, puis commenter le reste avec –. Ex: somefaketask’,’False’,’someuser’); INSERT INTO user (…) VALUES (…)–

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Quelles sont les 2 solutions principales contre les injections SQL?

A

1) Requêtes paramétrées - utiliser des placeholders (?) et passer les valeurs séparément,
2) ORM - utiliser un framework qui génère les requêtes (ex: SQLAlchemy) SANS écrire de SQL manuel

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Pourquoi MD5 est-il dangereux pour les mots de passe?

A

1) Très rapide à calculer = facile à brute-force,
2) Pas de salt = même password = même hash (vulnérable aux rainbow tables),
3) Considéré cryptographiquement cassé

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Quelle est la bonne pratique pour hasher les mots de passe?

A

Utiliser un algorithme de hashing sécuritaire et lent comme Bcrypt ou PBKDF2, TOUJOURS avec un salt unique par mot de passe.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Qu’est-ce qu’un salt et pourquoi est-il important?

A

Une valeur aléatoire unique ajoutée à chaque mot de passe avant le hashing. Empêche les rainbow tables et fait en sorte que deux users avec le même password auront des hash différents.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Quelle est la différence entre authentification et autorisation?

A

Authentification = vérifier l’identité (qui es-tu?),
Autorisation = vérifier les permissions (qu’as-tu le droit de faire?)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Pourquoi utiliser JWT plutôt que BasicAuth à chaque requête?

A

1) Évite d’envoyer username/password à chaque requête,
2) JWT peut contenir des infos (claims) sur l’user,
3) Peut être révoqué/expiré,
4) Plus sécuritaire si le token est volé (password pas exposé)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Où stocker un JWT côté client pour qu’il soit transmis automatiquement?

A

Dans un cookie HttpOnly (plus sécuritaire) ou dans localStorage (plus simple mais vulnérable au XSS). Le cookie HttpOnly est préférable.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Pourquoi ne JAMAIS faire sa propre implémentation JWT en production?

A

Très risqué - facile de faire des erreurs cryptographiques (algorithme faible, pas de validation de signature, mauvaise gestion des clés). Toujours utiliser une librairie éprouvée!

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Pourquoi utiliser un ORM ne garantit PAS l’absence d’injections SQL?

A

Parce que même avec un ORM, on peut toujours écrire des requêtes SQL manuelles (raw queries) qui sont vulnérables. Il faut utiliser uniquement les méthodes de l’ORM sans SQL manuel.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Différence entre requêtes paramétrées et concaténation de strings SQL?

A

Paramétrées: cur.execute(“SELECT * FROM task WHERE id = ?”, [task_id]) - sécuritaire, le driver échappe les valeurs.
Concaténation: “SELECT * FROM task WHERE id = “ + task_id - vulnérable aux injections!

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Qu’est-ce qu’un JWT et à quoi sert-il?

A

JWT (Json Web Token, prononcé “JOT”) est un token d’authentification émis au login pour éviter de répéter le processus de login à chaque requête. Il est transporté dans toutes les requêtes de l’application pour identifier l’utilisateur. Le JWT est encodé en base64 et composé de 3 parties séparées par des points.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Quelles sont les 3 parties d’un JWT?

A

Partie 1 (Header): Map JSON contenant les métadonnées (type de token, algorithme de chiffrement utilisé).

Partie 2 (Payload): Map JSON contenant les données du token (username, id, rôle, etc.).

Partie 3 (Signature): Signature cryptographique des deux premières parties pour empêcher le forgeage de tokens malveillants.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
17
Q

Comment fonctionne la signature JWT (3e partie)?

A

On combine les deux premières parties (header + payload), on signe avec l’algorithme indiqué dans le header, et on ajoute le résultat comme 3e partie. En mode symétrique, la clé secrète reste sur le serveur et sert à créer ET valider la signature. Sans cette clé, impossible de forger un token valide.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
18
Q

Quels sont les problèmes cryptographiques fondamentaux de JWT?

A

1) L’algorithme “None” est valide dans les specs et permettrait de forger des tokens (mais les librairies modernes rejettent cet algo).

2) En mode asymétrique, on peut spécifier où trouver la clé publique dans le header, donc un attaquant peut pointer vers sa propre clé.

3) Pas de certificat ni point d’ancrage pour valider les clés publiques. Pour ces raisons, on utilise JWT en mode symétrique seulement.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
19
Q

Pourquoi ne JAMAIS implémenter JWT soi-même en production?

A

Très risqué de faire des erreurs cryptographiques : algorithme faible, pas de validation de signature, mauvaise gestion des clés, vulnérabilités aux attaques par manipulation du header. TOUJOURS utiliser une librairie JWT éprouvée et bien maintenue.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
20
Q

Où peut-on stocker un JWT côté navigateur et quelle est la meilleure option?

A

Deux options : Local storage ou Cookie.

Les cookies sont la solution à privilégier, surtout avec les flags HttpOnly et Secure, car ils sont moins accessibles au JavaScript malveillant (protection contre XSS).

Le localStorage est plus simple mais complètement accessible au JavaScript.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
21
Q

Pourquoi utiliser un UUID au lieu d’un ID séquentiel dans le JWT?

A

Un ID séquentiel (1, 2, 3…) est prévisible, ce qui permet à un attaquant de deviner les IDs d’autres utilisateurs même sans forger le token. Un UUID est aléatoire et non-devinable, ajoutant une couche de sécurité supplémentaire.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
22
Q

Que se passe-t-il si quelqu’un vole un JWT?

A

L’attaquant peut usurper l’identité de la victime et accéder à son compte tant que le token est valide. Le JWT volé fonctionne exactement comme l’original puisque le serveur ne peut pas distinguer qui l’utilise. C’est pourquoi il faut protéger le JWT contre le vol (cookies HttpOnly, expiration courte, etc.).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
23
Q

Qu’est-ce qu’une attaque XSS (Cross-Site Scripting)?

A

XSS est l’injection d’un script JavaScript malicieux dans un site légitime. Le script est exécuté dans le navigateur de la victime lorsqu’elle visite la page compromise. Il existe 3 types : stored (sauvegardé en BD), reflected (dans l’URL), et blind (exécuté sans être visible).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
23
Q

Comment fonctionne une attaque XSS de type “stored”?

A

Le script malicieux est sauvegardé dans la base de données (par exemple via un champ de formulaire comme “Create Task”). Lorsqu’un utilisateur visite une page qui affiche ce contenu, son navigateur exécute le script. C’est le type le plus simple et le plus dangereux car il affecte tous les visiteurs.

24
Que peut faire un attaquant avec un script JavaScript malicieux injecté via XSS?
1) Afficher des popups (preuve de concept). 2) Lire les cookies accessibles (document.cookie). 3) Accéder au localStorage (localStorage.getItem()). 4) Exfiltrer des données vers un serveur contrôlé par l'attaquant (XMLHttpRequest). 5) Voler des tokens d'authentification comme les JWT.
25
Comment tester une vulnérabilité XSS avec un script simple?
Injecter le code suivant dans un champ de formulaire : . Si un popup s'affiche lors de l'affichage de la page, le site est vulnérable au XSS. C'est une preuve de concept inoffensive pour démontrer que du code JavaScript arbitraire peut être exécuté.
26
Comment un attaquant peut-il voler un JWT stocké dans un cookie via XSS?
Script à injecter : . Ce code affiche tous les cookies accessibles en JavaScript. IMPORTANT : Les cookies avec le flag HttpOnly ne sont PAS accessibles via document.cookie, c'est pourquoi ce flag est crucial pour protéger les JWT.
27
Comment exfiltrer un JWT volé vers un serveur contrôlé par l'attaquant?
28
Comment voler un JWT stocké dans le localStorage via XSS?
Script à injecter : . Contrairement aux cookies HttpOnly, le localStorage est TOUJOURS accessible au JavaScript, ce qui le rend plus vulnérable aux attaques XSS. C'est une raison majeure de préférer les cookies sécurisés.
29
Quelle est la différence de sécurité entre localStorage et cookies HttpOnly pour stocker un JWT?
localStorage : Toujours accessible au JavaScript (document.localStorage), donc complètement vulnérable au XSS. Cookie HttpOnly : INACCESSIBLE au JavaScript, le navigateur l'envoie automatiquement mais le code ne peut pas le lire. Le cookie HttpOnly protège contre le vol de JWT par XSS (mais pas contre d'autres attaques comme CSRF).
30
Pourquoi le flag HttpOnly sur un cookie ne suffit-il pas à protéger complètement contre les attaques?
HttpOnly empêche le JavaScript de LIRE le cookie, mais le navigateur l'envoie quand même automatiquement avec chaque requête vers le serveur. Un attaquant peut donc faire des requêtes malveillantes AU NOM de la victime (attaque CSRF) même s'il ne peut pas voler le token directement. Il faut combiner HttpOnly avec d'autres protections (CSRF tokens, SameSite, expiration courte, etc.).
31
Quel est le lien entre XSS et le vol de JWT?
XSS permet d'exécuter du code JavaScript arbitraire dans le navigateur de la victime. Si le JWT est stocké dans le localStorage ou dans un cookie sans HttpOnly, le script malicieux peut le lire (document.cookie ou localStorage.getItem()) et l'envoyer à l'attaquant. C'est une des méthodes principales pour voler des JWT.
32
Quels sont les 4 mécanismes de protection contre XSS?
1. **Cookie HttpOnly **- Empêche JavaScript d'accéder aux cookies (document.cookie retourne vide) 2.**Templates** - Séparation données/code, échappement automatique (ex: Jinja2) 3. **Input sanitization** - Nettoyer les inputs avec bibliothèques comme bleach avant stockage 4. **Content Security Policy (CSP)** - Header HTTP qui limite l'exécution de scripts aux sources approuvées La combinaison de plusieurs mécanismes offre une protection robuste.
33
Comment fonctionne l'input sanitization et pourquoi l'utiliser?
Nettoie les données utilisateur en échappant les caractères spéciaux HTML (<, >, ", ', etc.) avant de les stocker en BD. Exemple avec bleach (Python): transforme en texte inoffensif. Timing crucial: sanitiser AVANT le stockage, pas à l'affichage.
34
Qu'est-ce que la Content Security Policy (CSP) et comment ça protège?
Header HTTP qui définit quelles sources peuvent exécuter du JavaScript sur votre page. Protection: Bloque les scripts inline et les scripts provenant de domaines non autorisés. Même si un attaquant injecte du code XSS, le navigateur refuse de l'exécuter. Référence: OWASP CSP Cheat Sheet
35
Quels sont les 2 mécanismes pour protéger contre la réutilisation d'un JWT volé?
1. Expiration courte (ex: 30 minutes) - Réduit la fenêtre d'opportunité pour l'attaquant. Utilise le claim "exp" dans le payload. 2. Validation IP - Inclure l'IP du client dans le payload au login, puis vérifier que l'IP correspond à chaque requête. Ces mécanismes réduisent les risques mais ne les éliminent pas complètement.
36
Pourquoi la validation d'IP dans JWT pose-t-elle problème?
Le problème: Depuis le frontend, le backend voit l'IP du FE, pas l'IP originale du client. Le FE doit transmettre l'IP réelle en JSON. La faille: Un attaquant peut envoyer une requête depuis Postman avec une fausse IP dans le JSON. Le serveur ne peut pas distinguer si l'IP vient vraiment du FE légitime ou d'un attaquant. Conclusion: La validation IP n'est pas fiable comme mécanisme de sécurité principal.
37
Pourquoi le logout révèle-t-il une limite fondamentale de JWT?
JWT est STATELESS - Le token contient toute l'info, le serveur n'a aucune mémoire. Le problème: Pour invalider un token (logout), il faut passer en STATEFUL avec une BD pour tracker les tokens révoqués. Cela contredit l'avantage principal de JWT (pas d'état serveur) et ajoute de la complexité.
38
Que doit faire un logout sécurisé avec JWT?
Côté client: Supprimer le JWT des cookies du navigateur. Côté serveur: Ajouter le token à une blacklist en BD pour empêcher sa réutilisation. Sans la blacklist serveur, l'attaquant peut continuer à utiliser un token volé jusqu'à son expiration naturelle.
39
Quels sont les problèmes d'une implémentation stateful maison de JWT?
Accumulation de tokens - Les tokens expirés sans logout propre s'accumulent en BD (nécessite garbage collection) Multi-logins - Si tu te connectes comme Admin puis Frank, les deux tokens restent valides simultanément Complexité élevée - Gestion manuelle de la révocation, refresh tokens, multi-devices devient rapidement ingérable
40
Quelle est la recommandation pour la gestion de sessions en production?
Utiliser un framework complet comme OAuth ou un gestionnaire de session dédié. Pourquoi: Gère automatiquement la révocation, les refresh tokens, multi-devices, l'expiration intelligente, etc. Conclusion: JWT est idéal pour l'authentification entre microservices, mais limité pour les sessions utilisateurs web.
41
Qu'est-ce qu'une attaque CSRF?
Un attaquant externe amène un utilisateur déjà authentifié à exécuter des actions non désirées dans une application où il est loggé, via un site tiers malveillant. Clé: L'attaquant n'a pas besoin d'être utilisateur de l'app cible, juste de trouver une victime authentifiée.
42
Comment fonctionne une attaque CSRF typique?
1) Attaquant crée une page malveillante (ex: photosdetigres.com) 2) Page contient un formulaire caché qui soumet une requête vers l'app cible 3) Victime (déjà loggée) visite la page malveillante 4) Formulaire se soumet automatiquement (JavaScript) 5) Le navigateur envoie les cookies d'authentification automatiquement 6) Le serveur accepte la requête (elle semble légitime) Impact: Si la victime est admin, l'attaquant peut créer des comptes, modifier des données, exécuter des actions privilégiées.
43
Quelle est la différence entre XSS et CSRF?
**XSS (Cross-Site Scripting):** Attaque depuis l'intérieur (injection de code dans l'app) Nécessite d'être utilisateur de l'app Vole des données (tokens, cookies) **CSRF (Cross-Site Request Forgery):** Attaque depuis l'extérieur (via site tiers) Pas besoin d'être utilisateur de l'app cible Force des actions non désirées
44
Quel mécanisme du navigateur est exploité par CSRF?
Le navigateur envoie automatiquement les cookies (incluant les tokens d'authentification) avec chaque requête vers un domaine, même si la requête provient d'un site externe. C'est ce comportement automatique qui permet à CSRF de fonctionner.
45
Pourquoi HttpOnly ne protège-t-il pas contre CSRF?
HttpOnly empêche la LECTURE du cookie par JavaScript (protection contre XSS). MAIS le navigateur envoie quand même le cookie automatiquement avec les requêtes. CSRF exploite l'envoi automatique, pas la lecture du cookie. HttpOnly ne change rien à ce comportement. **Conclusion:** HttpOnly protège contre XSS, pas contre CSRF. Ce sont deux menaces différentes nécessitant des protections différentes.
46
Qu'est-ce qu'une attaque CSRF ?
Une attaque Cross-Site Request Forgery où un site malicieux force le navigateur à faire des requêtes authentifiées vers une application légitime en utilisant le JWT de l'utilisateur, sans même voler le token.
47
Pourquoi les attaques CSRF ciblent-elles principalement les requêtes POST plutôt que GET ?
Parce que CSRF vise les opérations qui modifient l'état du serveur (POST, PUT, DELETE). L'attaquant ne reçoit pas de retour du serveur, donc les requêtes de consultation (GET) ne sont pas utiles pour l'attaque.
48
Quel est le rôle principal d'un token CSRF ?
Identifier le contexte du navigateur et vérifier que la requête provient bien de l'HTML légitime de l'application et non d'un site tiers malveillant.
49
Comment le token CSRF est-il lié au JWT ?
Le token CSRF est stocké dans la base de données et associé au JWT de l'utilisateur. Cette liaison permet de valider que le token CSRF correspond bien à la session authentifiée.
50
Où est placé le token CSRF dans l'application web ?
Le token CSRF est inclus dans le HTML en tant que champ caché dans les formulaires, ou peut être stocké dans un cookie et transmis comme paramètre dans les requêtes POST via JavaScript.
51
Pourquoi la validation du token CSRF se fait-elle dans le frontend (FE) plutôt que dans le backend (BE) ?
Parce que les attaques CSRF ne touchent que les navigateurs et non l'API. En validant dans le FE, on ne modifie pas les routes du BE, préservant ainsi le comportement normal de l'API (ex: Postman).
52
Pourquoi un attaquant ne peut-il pas voler le token CSRF ?
Parce que les navigateurs empêchent une page web d'accéder au code HTML ou aux cookies d'un autre onglet/domaine à cause de la politique de même origine (Same-Origin Policy).
53
Comment fonctionne la méthode du token CSRF dans un cookie avec JavaScript ?
Le token CSRF est placé dans un cookie. Du JavaScript dans la page HTML le récupère et le transmet comme paramètre (pas comme cookie) dans les requêtes POST. Le FE valide que le paramètre reçu correspond au token associé au JWT.
54
Qu'est-ce que l'attribut SameSite des cookies et comment protège-t-il contre CSRF ?
L'attribut SameSite empêche un cookie (comme le JWT) d'être transmis au serveur lorsque la requête provient d'un site différent, offrant une protection supplémentaire contre CSRF.
55
Quelles sont deux protections secondaires contre CSRF en plus du token ?
1. L'attribut SameSite sur les cookies pour empêcher leur transmission cross-site 2. Validation supplémentaire pour opérations sensibles (cliquer sur un bouton de confirmation, redemander le mot de passe)
56
Pourquoi le token CSRF doit-il être transmis comme paramètre et non comme cookie ?
Même si le cookie est transmis automatiquement par le navigateur, le frontend attend explicitement un paramètre dans la requête. Un site malicieux peut déclencher l'envoi du cookie, mais ne peut pas ajouter le paramètre car il n'a pas accès au token.
57
Quelle est la différence entre voler un JWT et exploiter une vulnérabilité CSRF ?
Voler un JWT nécessite d'extraire le token lui-même (XSS, interception). CSRF exploite le fait que le navigateur envoie automatiquement le JWT dans les cookies, sans avoir besoin de le voler - l'attaquant force simplement le navigateur à faire des requêtes authentifiées.