start the security application (#85759) #104

Open
bdauvergne wants to merge 2 commits from wip/85759-Avoir-une-section-Securite-pour into main
Owner

Nouvelle page dans /security/ on peut y poser une politique CSP ou CSP uniquement pour rapport, on peut y voir les derniers rapports reçus classé par ordre anti-chronologique du dernier rapport reçu. Un bouton permet de nettoyer les rapports enregistrés, par ailleurs les rapports pas vu depuis plus d'1j sont supprimés.

Le middleware pose automatiquement les politiques dans les réponses, sauf si l'entête est déjà présent par ailleurs, il ajoute l'URL de rapport si celle-ci est manquante. L'URL du endpoint de rapport accepte un paramètre ?error qui lèvera une erreur dans sentry si nécessaire. L'erreur est unique par tenant hobo (le template de log contient le hostname en dur).

L'API est ouverte à tous (on ne peut pas vraiment faire autrement) mais après 1000 rapports/jour ça n'en accepte plus, sait-on jamais si quelqu'un veut nous pourrir la vie.

Nouvelle page dans /security/ on peut y poser une politique CSP ou CSP uniquement pour rapport, on peut y voir les derniers rapports reçus classé par ordre anti-chronologique du dernier rapport reçu. Un bouton permet de nettoyer les rapports enregistrés, par ailleurs les rapports pas vu depuis plus d'1j sont supprimés. Le middleware pose automatiquement les politiques dans les réponses, sauf si l'entête est déjà présent par ailleurs, il ajoute l'URL de rapport si celle-ci est manquante. L'URL du endpoint de rapport accepte un paramètre ?error qui lèvera une erreur dans sentry si nécessaire. L'erreur est unique par tenant hobo (le template de log contient le hostname en dur). L'API est ouverte à tous (on ne peut pas vraiment faire autrement) mais après 1000 rapports/jour ça n'en accepte plus, sait-on jamais si quelqu'un veut nous pourrir la vie.
bdauvergne added 1 commit 2024-01-17 01:22:27 +01:00
gitea/hobo/pipeline/head There was a failure building this commit Details
beee0c221d
start the security application (#85759)
bdauvergne force-pushed wip/85759-Avoir-une-section-Securite-pour from beee0c221d to ff5c43b460 2024-01-17 01:31:27 +01:00 Compare
bdauvergne force-pushed wip/85759-Avoir-une-section-Securite-pour from ff5c43b460 to 4f050e211c 2024-01-17 14:28:59 +01:00 Compare
bdauvergne force-pushed wip/85759-Avoir-une-section-Securite-pour from 4f050e211c to 23c2f650fe 2024-01-17 14:34:16 +01:00 Compare
bdauvergne changed title from WIP: start the security application (#85759) to start the security application (#85759) 2024-01-17 14:58:35 +01:00
bdauvergne force-pushed wip/85759-Avoir-une-section-Securite-pour from 23c2f650fe to 57a917d02b 2024-01-17 15:44:46 +01:00 Compare
bdauvergne force-pushed wip/85759-Avoir-une-section-Securite-pour from 57a917d02b to b28ec05a84 2024-01-17 15:58:48 +01:00 Compare
Author
Owner
fpeters requested changes 2024-01-26 08:36:01 +01:00
Dismissed
fpeters left a comment
Owner

(jenkins en erreur)

(jenkins en erreur)
fpeters dismissed fpeters’s review 2024-01-26 08:36:19 +01:00
Reason:

(je notais juste)

bdauvergne force-pushed wip/85759-Avoir-une-section-Securite-pour from b28ec05a84 to ace70e2fef 2024-01-27 15:29:35 +01:00 Compare
bdauvergne force-pushed wip/85759-Avoir-une-section-Securite-pour from ace70e2fef to fb8a50b4a8 2024-02-28 07:51:56 +01:00 Compare
tnoel requested changes 2024-04-26 11:20:35 +02:00
tnoel left a comment
Owner

Première passe, rien de très méchant.

Je me pose quand même la question de l'utilité d'avoir /api/csp-report/, je me dis que les gens qui connaissent ça ont déjà des outils...? Comme ça me semble un domaine "mouvant", je me demande si on gagne à avoir un lecteur de rapports. Mais ne connaissant rien à ces affaires, je te laisse me dire ce que tu en penses, Benjamin.

Première passe, rien de très méchant. Je me pose quand même la question de l'utilité d'avoir /api/csp-report/, je me dis que les gens qui connaissent ça ont déjà des outils...? Comme ça me semble un domaine "mouvant", je me demande si on gagne à avoir un lecteur de rapports. Mais ne connaissant rien à ces affaires, je te laisse me dire ce que tu en penses, Benjamin.
@ -0,0 +28,4 @@
content_security_policy_report_uri = getattr(settings, 'CONTENT_SECURITY_POLICY_REPORT_URI', None)
if content_security_policy and CSP_HEADER_NAME not in response.headers:
response[CSP_HEADER_NAME] = content_security_policy
Owner

Comme on joue en Django 3.2 on peut maintenant utiliser
response.headers[CSP_HEADER_NAME] = content_security_policy
qui est moins perturbant que response[CSR_HEADER_NAME] (enfin, pour moi).

Idem sur les lignes suivantes.

Comme on joue en Django 3.2 on peut maintenant utiliser ` response.headers[CSP_HEADER_NAME] = content_security_policy ` qui est moins perturbant que `response[CSR_HEADER_NAME]` (enfin, pour moi). Idem sur les lignes suivantes.
@ -0,0 +35,4 @@
if content_security_policy_report_uri:
if policy := response.headers.get(CSP_HEADER_NAME):
if 'report-uri' not in policy:
Owner

Je vois que report-uri est un vieux truc (https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/report-uri) et qu'il faut maintenant utiliser le système report-to (https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/report-to).

Mais cette affaire de report semble un profond puits dont le fond est plein de vase, est-ce qu'on a vraiment besoin d'implémenter quelque chose (je pense surtout à /api/csp-report/) ? N'y a-t-il pas des outils existants qui savent déjà consommer ces rapports et que les experts connaissent déjà ? (j'ai rien vu mais je ne sais pas vraiment comment chercher). En d'autre termes, est-ce que si on n'a pas cet analyseur de rapports, on a vraiment une solution inacceptable ?

Je vois que report-uri est un vieux truc (https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/report-uri) et qu'il faut maintenant utiliser le système report-to (https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/report-to). Mais cette affaire de report semble un profond puits dont le fond est plein de vase, est-ce qu'on a vraiment besoin d'implémenter quelque chose (je pense surtout à /api/csp-report/) ? N'y a-t-il pas des outils existants qui savent déjà consommer ces rapports et que les experts connaissent déjà ? (j'ai rien vu mais je ne sais pas vraiment comment chercher). En d'autre termes, est-ce que si on n'a pas cet analyseur de rapports, on a vraiment une solution inacceptable ?
Author
Owner

Il n'y a rien à analyser dans ces rapports c'est juste une liste des URLs bloquées et la raison (la partie de la règle csp qui a bloqué), c'est vraiment tout l'utilité du ticket je trouve.

Il n'y a rien à analyser dans ces rapports c'est juste une liste des URLs bloquées et la raison (la partie de la règle csp qui a bloqué), c'est vraiment tout l'utilité du ticket je trouve.
Author
Owner

Je vois que report-uri est un vieux truc (https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/report-uri) et qu'il faut maintenant utiliser le système report-to (https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/report-to).

Le fait est que report-uri est géré partout et pas report-to (voir les matrices de compat en bas de chaque page), donc à tout prendre j'ai implémenté le plus courant, on pourra toujours changer ça facilement dans le futur. J'ai pas implémenté les deux parce que rien n'indique que report-uri sera déprécié bientôt.

> Je vois que report-uri est un vieux truc (https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/report-uri) et qu'il faut maintenant utiliser le système report-to (https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/report-to). Le fait est que report-uri est géré partout et pas report-to (voir les matrices de compat en bas de chaque page), donc à tout prendre j'ai implémenté le plus courant, on pourra toujours changer ça facilement dans le futur. J'ai pas implémenté les deux parce que rien n'indique que report-uri sera déprécié bientôt.
@ -0,0 +1,98 @@
# hobo - portal to configure and deploy applications
# Copyright (C) 2015-2022 Entr'ouvert
Owner

(pour bien montrer que je relis, tu peux poser 2024 ou retirer les mentions d'années)

(pour bien montrer que je relis, tu peux poser 2024 ou retirer les mentions d'années)
Author
Owner

Ok.

Ok.
@ -0,0 +61,4 @@
for directive in directives:
head, rest = directive.split(' ', 1)
if head not in HEADS:
raise ValidationError(_('Invalid CSP directive "%s"') % head)
Owner

(pas de couverture par les tests de ce raise)

(pas de couverture par les tests de ce raise)
@ -0,0 +72,4 @@
if needle == source:
break
else:
raise ValidationError(_('Invalid CSP source "%s" in directive "%s"') % (source, head))
Owner

(ici non plus, pas de couverture par les tests de ce raise)

(ici non plus, pas de couverture par les tests de ce raise)
@ -0,0 +25,4 @@
UPDATE_LAST_SEEN_PERIOD = datetime.timedelta(minutes=10)
def get_content(self):
return {key.replace('-', '_'): value for key, value in self.content.items()}
Owner

Ici et sur d'autres parties de ce fichier, pépins de couverture par les tests.

Ici et sur d'autres parties de ce fichier, pépins de couverture par les tests.
@ -0,0 +7,4 @@
def common_domains(urls):
'''Compute fewest common domains between urls'''
common = None
for url in urls:
Owner

Le résultat des tests indique un manque de couverture de cette fonction.

Le résultat des tests indique un manque de couverture de cette fonction.
Author
Owner

Première passe, rien de très méchant.

Je me pose quand même la question de l'utilité d'avoir /api/csp-report/, je me dis que les gens qui connaissent ça ont déjà des outils...? Comme ça me semble un domaine "mouvant", je me demande si on gagne à avoir un lecteur de rapports. Mais ne connaissant rien à ces affaires, je te laisse me dire ce que tu en penses, Benjamin.

Je n'ai pas l'impression que les gens aient des outils, ni que quiconque y connaissent quoi que ce soit; mais le but vraiment de pouvoir tester une politique et de voir les URLs qui sont bloquées en vrai quand un rapport de pentest nous dit de poser telle ou telle politique; pas plus pas moins. Normalement les rapports devraient être vides, sinon ça veut dire que la politique n'est pas la bonne, on reçoit des rapports même sur une politique en mode content-security-policy-report-only (ça rapporte les blocages mais en vrai ça ne bloque rien).

> Première passe, rien de très méchant. > > Je me pose quand même la question de l'utilité d'avoir /api/csp-report/, je me dis que les gens qui connaissent ça ont déjà des outils...? Comme ça me semble un domaine "mouvant", je me demande si on gagne à avoir un lecteur de rapports. Mais ne connaissant rien à ces affaires, je te laisse me dire ce que tu en penses, Benjamin. Je n'ai pas l'impression que les gens aient des outils, ni que quiconque y connaissent quoi que ce soit; mais le but vraiment de pouvoir tester une politique et de voir les URLs qui sont bloquées en vrai quand un rapport de pentest nous dit de poser telle ou telle politique; pas plus pas moins. Normalement les rapports devraient être vides, sinon ça veut dire que la politique n'est pas la bonne, on reçoit des rapports même sur une politique en mode content-security-policy-report-only (ça rapporte les blocages mais en vrai ça ne bloque rien).
All checks were successful
gitea/hobo/pipeline/head This commit looks good
This pull request can be merged automatically.
This branch is out-of-date with the base branch
You are not authorized to merge this pull request.
You can also view command line instructions.

Step 1:

From your project repository, check out a new branch and test the changes.
git checkout -b wip/85759-Avoir-une-section-Securite-pour main
git pull origin wip/85759-Avoir-une-section-Securite-pour

Step 2:

Merge the changes and update on Gitea.
git checkout main
git merge --no-ff wip/85759-Avoir-une-section-Securite-pour
git push origin main
Sign in to join this conversation.
No reviewers
No Label
No Milestone
No Assignees
3 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: entrouvert/hobo#104
No description provided.