Sécurité & durcissement

La sécurité est intégrée à chaque couche.

Authentification & chiffrement #

  • JWT d'accès courts + refresh tokens opaques en cookie HttpOnly.
  • Mots de passe en Argon2id ; données sensibles en AES-256-GCM.
Flux : navigateur, core (vérifie le JWT) puis module via en-têtes injectés
Le core authentifie, puis proxifie en injectant l'identité ; le module ne voit jamais les jetons.

Isolation #

  • Bac à sable seccomp : les modules ne peuvent pas exécuter de processus (execve interdit).
  • Un schéma PostgreSQL par module ; aucune table hors périmètre.
  • Routes internes protégées par X-Internal-Secret ; en-têtes HSTS / X-Frame-Options ; durcissement anti-DDoS.
Bonne pratique

Tout le code est libre (AGPLv3) et auditable. Gardez vos secrets hors des dépôts. Le secret de signature des jetons (jwt_secret) peut être changé à tout moment — cela déconnecte tout le monde, rien de plus. Les données chiffrées, elles, dépendent d'une clé distincte (/var/lib/kubuno/data.key) : si vous soupçonnez qu'elle a été faible ou exposée, renouvelez-la avec kubuno security:rekey, qui re-chiffre tout ce qu'elle protège. kubuno security:rekey --check vérifie, sans rien écrire, que l'instance sait encore lire ses propres secrets.