E7: IT services cybersecurity

Kirassur - SLAM, 2025 session

Methodology and annotated worked solution: E7: IT services cybersecurity, BTS SIO.

  • Duration 4h
  • Pathway SLAM
  • Session 2025

Lockbay annotated solution

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

A1.1

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.

A1.2

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

A2.1

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

B1.1

Choosing HTTPS

a) Under HTTP (plaintext), the feared event is theinterception of the API key or authentication token (network eavesdropping) -> an attacker replays these secrets to hijack access.

b) HTTPS (TLS) encrypts traffic: the key/token is no longer transmitted in plain text, protecting against eavesdropping and replay.

B1.2

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.

B1.3

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).

B1.4

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.

B1.5

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)

B2.1

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.

B2.2

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.

B2.3

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

C1.1

Logging sensitive actions (MVC)

a) The method 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)
C2.1

Data modelling (alerts and permissions)

The model is extended to handle profiles, alerts, and monitoring of sensitive actions:

  • table Action with attribute estSensible, and - for each sensitive action - a monitoring interval (nbJours) and a maximum number of calls within that interval;
  • table Profil + Profil-Action association (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)

SectionExpectationPoints
AAnti-fraud trigger (aVerifier, cover 3), claims list query20
BHTTPS, API key vs token, token hashing, validity period, IDOR, GDPR35
CMVC logging (logAction), profile/alert modelling25
Total80
Official exam paper © Éducation nationale - published by Réseau CERTA - Éducation nationale (source link). Annotated solutions and methodology © Lockbay Academy.