Official exam paper
Kirassur case study - 2025 session, U7/E7 (SLAM), duration 4h, coefficient 4, out of 80 points (3 parts: 20 + 35 + 25 pts). 📄 Download the official Kirassur exam paper (réseaucerta.org)
Lockbay does not host the exam paper: this model answer is an original Lockbay production answering the questions from the official paper. Exam paper © Éducation nationale.
The Kirassur case study (insurance) covers three parts: preventing fraud (anti-false-declaration trigger), opening the IS to partners (API key, tokens, IDOR), and logging access (MVC). Question-by-question solutions.
Part A - Feared events 20 pts
Mission A1 - Countering false "Glass breakage" claims
Why use a trigger rather than application code
The trigger runs at DBMS level, regardless of the application or access method (interface, API, direct query). The check is therefore centralised and tamper-proof: it cannot be bypassed by attacking the application. A purely application-level check, by contrast, could be bypassed.
a) The query (lines 15-20) counts the number of "Glass breakage" claims already reported for the same policy over the reference period (90 days, nbJoursPeriode), to compare it against limit nbMaxSinistresPeriode (= 2).
b) Processing to mark the claim as "to verify":
IF v_nbSinistres > v_nbMax THEN
SET NEW.aVerifier = 'O'; -- O = à vérifier (N sinon)
END IF;c) To check only the "Glass breakage" cover (id = 3 based on the excerpt from Garantie), wrap the processing in a condition checking the new claim's cover:
IF NEW.idGarantie = 3 THEN -- 3 = « Bris de glace »
-- ... (comptage + mise à 'O' si dépassement)
END IF;Mission A2 - Detecting the suspicious event
Modify the claims list query
Keep only "Glass breakage" claims, place those to verify first (aVerifier = 'O'), sort by declaration date, and display the policyholder's name (joins):
SELECT s.idContrat, s.numero, s.dateDeclaration, s.aVerifier,
a.nom, a.prenom
FROM Sinistre s
JOIN Contrat c ON s.idContrat = c.id
JOIN Assure a ON c.idAssure = a.id
WHERE s.idGarantie = 3 -- Bris de glace
ORDER BY s.aVerifier DESC, s.dateDeclaration ASC; -- 'O' avant 'N' Part B - Opening to partners 35 pts
Choosing HTTPS
b) HTTPS (TLS) encrypts traffic: the key/token is no longer transmitted in plain text, protecting against eavesdropping and replay.
Why not return the partner's API key to the policyholder
The API key is a permanent secret granting access to all partner resources. Sending it to the policyholder would expose it: they could access all policies managed by that partner (privilege escalation). The policyholder therefore only receives a temporary token, restricted to their own policy.
Do tokens grant access to personal data?
Yes: a token grants access to a policyholder's policy, and therefore to personal data (identity, vehicle, claims). The token is therefore sensitive data that must be protected (secure storage and transmission).
Best practice from tokenEnregistrer not followed by tokenCharger
tokenEnregistrer hashes the token before storing it (the token is never stored in plain text in the database). tokenCharger, on the other hand, handles and compares the token in plain text instead of comparing hashes -> in the event of a database leak, the tokens could be reused directly. Best practice (hashing) must be applied on both sides.
a) The validity period check ensures that an expired token no longer grants access: even if stolen, it becomes unusable after 10 minutes -> the window of exploitation is reduced.
b) The DAO class instructions calculate the expiry date (current date + 600 s, using a date function such as DATE_ADD/SUBDATE) and store it in the database in the tokens table, under the validity/expiration date field.
Mission B2 - Unauthorised access (IDOR)
Does the code allow unauthorised access?
Yes. The partner increments the policy number in the URL or API call and retrieves policies they did not create: this is an IDOR vulnerability (Insecure Direct Object Reference - OWASP A01: Broken Access Control). The code does not verify resource ownership. Fix (without code): verify, on every request, that the requested policy is indeed linked to the authenticated partner or policyholder (via the token or key) before returning the data.
Invalidate an IP address showing abnormal behaviour
At network level, block the IP address on the firewall / IPS (blacklisting), for example using an automated mechanism like fail2ban that bans an IP after an abnormal number of attempts.
GDPR obligations following a breach
Tecassur must notify the CNIL within 72 hours, inform affected policyholders if the risk is high, and record the breach in the data breach register.
Part C - Logging and alerts 25 pts
Logging sensitive actions (MVC)
logAction of ActionManager must write to table Action the executed action with the user ID and timestamp (NOW()), using a prepared statement.b) In the controller, enregistrerActionSensible must test action.estSensible and, if true, call logAction to log the action:
si uneAction.estSensible == true :
actionManager.logAction(utilisateurConnecté, uneAction, maintenant)Data modelling (alerts and permissions)
The model is extended to handle profiles, alerts, and monitoring of sensitive actions:
- table
Actionwith attributeestSensible, and - for each sensitive action - a monitoring interval (nbJours) and a maximum number of calls within that interval; - table
Profil+Profil-Actionassociation (a profile groups multiple authorised actions); - one-off authorisation (user, action, start/end period) and assignment of a profile to a user (period) - without logging renewal history;
- table
Alerte: user, action, trigger date/time, status ("new", "assigned", "resolved", "closed"), and handler + assignment date.
(Claims and policyholders are unaffected by these changes.)
Marking scheme points (reminder)
| Section | Expectation | Points |
|---|---|---|
| A | Anti-fraud trigger (aVerifier, cover 3), claims list query | 20 |
| B | HTTPS, API key vs token, token hashing, validity period, IDOR, GDPR | 35 |
| C | MVC logging (logAction), profile/alert modelling | 25 |
| Total | 80 |