Security: le SAST rapporte mais ne bloque rien, et 2 findings restent a traiter
Suite directe de #178 (closed) (INC-069). Une fois le bruit retire, le SAST est passe de 829 findings sur 19 666 fichiers a 2 findings sur 327 fichiers, tous deux sur du code du projet. Ils sont desormais lisibles, donc traitables.
Constat principal : allow_failure: false ne bloque rien ici
semgrep-sast est declare allow_failure: false et sort quand meme en success avec un finding High. Ce n'est pas un bug : un job SAST rapporte, il ne juge pas. Le mecanisme qui bloquerait une MR sur un finding est le Security Dashboard et les merge request approval rules, tous deux Ultimate.
Etat reel apres #178 (closed) : les analyses tournent au bon moment et sur le bon perimetre, mais rien n'empeche de merger un finding High. Le allow_failure: false donne l'illusion d'une barriere qui n'existe pas. Meme famille que CODEOWNERS qui n'empeche pas de merger en Free.
A trancher : accepter que le SAST soit informatif, ou ajouter un gate maison (job qui lit gl-sast-report.json et echoue au-dela d'un seuil).
Les 2 findings
1. frontend/src/api.js:44 — SSRF, High — faux positif de categorie
const res = await fetch(`${API_BASE_URL}${path}`, {...})Regle nodejs_scan.javascript-ssrf-rule-node_ssrf. Le SSRF suppose qu'un attaquant fait emettre une requete par un serveur vers une cible interne. Ce code s'execute dans le navigateur. La regle vise du Node.js cote serveur, appliquee ici a du front.
Traitement propose : exception documentee dans .gitlab/sast-ruleset.toml (fichier absent aujourd'hui, le job le signale). Pas de modification du code.
2. scripts/gen_status.py:50 — bandit B310, Medium — vrai, inoffensif, corrigeable
with urllib.request.urlopen(req, timeout=20) as r:B310 signale que urlopen accepte aussi file:// et ftp://. Ici API est une constante et path vient du code : aucune entree externe, donc pas d'exploitation possible.
Traitement propose : valider le schema avant l'appel (rejeter tout ce qui n'est pas https). Trois lignes, supprime le finding sans exception a maintenir. Preferable a une derogation.
Done when
- Le sort du gate est tranche : soit un gate maison existe, soit la nature informative du SAST est ecrite dans la doc
- Le finding SSRF est traite par exception documentee, avec sa justification
-
gen_status.pyvalide le schema de l'URL - Un nouveau pipeline montre 0 finding, ou seulement des findings dont l'acceptation est ecrite