Sujet officiel
Cas Puces’in — Session 2025, U7/E7 (SLAM), durée 4h, coef 4, sur 80 points (3 dossiers : 32 + 18 + 30 pts). 📄 Télécharger le sujet officiel Puces’in (réseaucerta.org)
Lockbay n’héberge pas le sujet : ce corrigé est une production originale Lockbay qui répond aux questions du sujet officiel. Sujet © Éducation nationale.
Le cas Puces’in (rachat-revente de livres d’occasion) couvre trois dossiers : sécuriser les applications (VerifColis, Rachète, API REST + JWT), gérer les droits RGPD, et résoudre des incidents sur le site web. Corrigé question par question.
Dossier A — Sécuriser les applications 32 pts
Mission A1 — VerifColis (client lourd)
Conséquence de la malveillance
Un employé a validé des prix de rachat supérieurs au prix de revente : Puces’in rachète plus cher qu’elle ne revend → perte financière directe (achat à perte) sur chaque livre concerné.
Modifications de traiterUnLivre
Ajouter un contrôle (côté applicatif/serveur) avant l’enregistrement : n’enregistrer le prix de rachat proposé que si le livre est dans un état « acceptable » et que ce prix ne dépasse pas 10 % du prix de revente ; sinon, refuser/bloquer l’enregistrement et signaler. La règle ne doit pas reposer sur l’interface seule (contournable) mais être vérifiée à l’enregistrement.
Mission A2 — Puces’in Rachète (mobile / API REST)
Deux conséquences (colis vides des concurrents)
- Coûts logistiques inutiles : Puces’in traite des colis vides (réception, tri, manutention) sans aucun livre à racheter.
- Détournement/abus du service : les concurrents obtiennent des bordereaux d’expédition gratuits et faussent le fonctionnement — perte de temps et atteinte à la disponibilité du service pour les vrais vendeurs.
Compléter validerColis (limite de 4 bordereaux/mois)
Avant de valider le colis, appeler getNbBordereauDuMois(idVendeur) ; si le résultat est ≥ 4, refuser la validation (retourner false/erreur) ; sinon valider. Le contrôle est fait côté API (serveur), pas seulement dans l’application mobile.
Mission A3 — API REST et jetons JWT
Tests vulnérables
authentifierUtilisateur est-elle sécurisée ?
Elle ne l’est que si elle compare des empreintes (mots de passe hachés avec sel) via une requête préparée. Si elle compare des mots de passe en clair ou construit la requête par concaténation (injection SQL possible), elle n’est pas sécurisée.
Limiter le nombre de requêtes
Mettre en place un rate limiting (limitation de débit) : on compte les requêtes par utilisateur/URI sur une fenêtre de temps et on rejette au-delà d’un seuil (réponse HTTP 429). (Sa mise en œuvre n’est pas demandée.)
HMAC garantit l’intégrité du JWT
La signature du jeton est calculée avec HMAC à partir d’une clé secrète connue du seul serveur. Toute modification du contenu du jeton (en-tête ou charge utile) invalide la signature : le serveur recalcule le HMAC et détecte l’altération. Un attaquant ne peut pas forger un jeton valide sans la clé → l’intégrité (et l’authenticité) du jeton est assurée.
Pourquoi HTTPS reste nécessaire malgré le jeton
Le JWT prouve l’identité mais ne chiffre pas son transport : en HTTP, un attaquant peut intercepter le jeton (écoute) et le rejouer pour usurper la session. HTTPS (TLS) chiffre le canal → il protège le jeton (et les données) contre l’écoute et le vol.
Cause de l’échec du second test
Le second test échoue parce que le jeton n’est pas valide au moment de la requête : typiquement un jeton expiré (durée de vie dépassée), absent, ou dont la signature ne correspond pas (jeton modifié / mauvaise clé) — l’API le rejette donc.
Dossier B — Droits RGPD 18 pts
a) Deux droits manquants : le droit de rectification et le droit à l’effacement (« droit à l’oubli »).
b) Mme Mathy dispose d’un délai réglementaire d’un mois pour répondre (extensible à trois mois pour les demandes complexes, avec information de la personne) — son délai actuel de 2 mois est hors délai.
Conservation des pièces d’identité depuis 2018
Non, ce n’est pas conforme. Le RGPD impose une limitation de la durée de conservation : les copies des pièces d’identité ne doivent être conservées que le temps nécessaire au traitement de la demande, puis supprimées. Les garder indéfiniment « par précaution » est une conservation excessive (manquement au principe de minimisation/limitation).
Document décrivant le traitement
Le traitement de saisie des demandes d’exercice de droits doit être décrit dans le registre des activités de traitement (registre RGPD tenu par le responsable de traitement).
Adapter la base de données
Compléter le schéma pour gérer le délai, les statistiques et la traçabilité :
- une table
Demandeavec son type de droit et ses dates (date de saisie, dates de changement d’état) → permet le calcul du délai et des statistiques par type ; - une table
Echange(date, description, origine =Ddemandeur ouPDPO), reliée à la demande → conserve la trace des échanges.
Dossier C — Incidents sur pucesin.com 30 pts
Mission C1 — Attaques et contre-mesures
Ticket S-C-1092
b) L’employé a donc été victime d’une attaque par hameçonnage (phishing).
Deux moyens de sensibiliser les employés
- Formations et campagnes de simulation d’hameçonnage régulières.
- Diffuser des réflexes simples : vérifier l’expéditeur et les liens, ne jamais communiquer ses identifiants, signaler tout message suspect au service informatique.
Ticket S-A-0095 : deux contre-mesures
Selon l’attaque décrite par le ticket, deux mesures préventives adaptées — par exemple mises à jour/correctifs des composants exposés et filtrage/durcissement des accès (politique « tout interdit par défaut », authentification forte) — afin d’empêcher la réédition de l’incident.
Compléter le programme de surveillance du domaine (Whois)
Ajouter, en plus des alertes à 3 mois et 1 mois avant l’expiration, un rappel supplémentaire à 1 semaine avant la date d’expiration : on ajoute une condition testant si la date courante atteint « date d’expiration − 7 jours » et, le cas échéant, on déclenche l’alerte.
Mission C2 — Analyse de traces
Type d’attaque
L’analyse du fichier auth.log (nombreuses tentatives d’authentification échouées puis une réussie) révèle une attaque par force brute (brute force) sur l’authentification.
Deux raisons du succès
- Des mots de passe faibles (devinables).
- Aucun verrouillage du compte après échecs répétés (et pas de MFA) → l’attaquant peut essayer indéfiniment.
Risque par principe de sécurité
- Confidentialité : accès et fuite des données (clients, ventes) une fois le compte compromis.
- Intégrité : modification frauduleuse des données (privilèges, contenus).
- Disponibilité : blocage/altération du service (suppression de données, indisponibilité du site).
Fuite de données (journal d’audit MySQL)
b) La fuite doit être consignée dans le registre des violations de données.
c) Pour préserver l’intégrité des preuves : conserver les journaux sans les modifier (copie en lecture seule, horodatage/empreinte/hachage des fichiers) et isoler les systèmes concernés en l’état pour l’enquête.
Supprimer les privilèges attribués abusivement
REVOKE ALL PRIVILEGES, GRANT OPTION
ON pucesin.* FROM 'compte_compromis'@'%';(On retire ensuite/recrée le compte avec les seuls droits légitimes.)
Mission C3 — Sécuriser l’accès à la base
a) Créer le compte statistiques, limité à l’adresse 95.10.2.54, en lecture seule sur les seules tables utiles aux statistiques :
CREATE USER 'statistiques'@'95.10.2.54' IDENTIFIED BY '<mot_de_passe_fort>';
GRANT SELECT ON pucesin.Livre TO 'statistiques'@'95.10.2.54';
GRANT SELECT ON pucesin.Publication TO 'statistiques'@'95.10.2.54';
-- (uniquement les tables nécessaires aux statistiques)b) Solution technique différente : exposer aux statistiques une vue SQL (ou un rôle) ne contenant que les colonnes/tables utiles → le compte n’accède qu’à cette vue, jamais aux données complètes.
Points de barème (rappel)
| Dossier | Attendu | Points |
|---|---|---|
| A | Règles de gestion serveur, limite bordereaux, API/JWT (HMAC, HTTPS) | 32 |
| B | Droits RGPD (rectification/effacement, délai 1 mois, conservation, registre), schéma | 18 |
| C | Phishing/sensibilisation, surveillance domaine, brute force, REVOKE, compte SQL restreint | 30 |
| Total | 80 |