Security Review

Analyse de sécurité — ITYLOS

Cible : itylos.com  ·  Auteur : Mehdi Kachouri (Genève, CH)  ·  Date : 3 avril 2026

B+
Solide pour un projet indie. La cryptographie est correcte et les headers HTTP sont mieux configurés que 90 % des SaaS. Deux faiblesses techniques identifiées méritent attention : le nonce CSP possiblement statique et l'absence de SRI sur les scripts.

Cryptographie côté client

ComposantImplémentationStatut
ChiffrementAES-256-GCM (AEAD)✓ Optimal
KDF principalArgon2id (time=3, mem=64 MB, hashLen=32)✓ Optimal
KDF fallbackPBKDF2-SHA256, 300 000 itérations✓ Acceptable
IV96 bits, crypto.getRandomValues✓ Conforme
Clé URL256 bits aléatoires (32 octets)✓ Fort
API cryptoWeb Crypto API native — pas de lib tierce✓ Recommandé
AAD{ v:"2.0", alg:"AES-256-GCM", ttl:X }✓ Anti-replay

# Dérivation de clé — flux complet urlKey (32 octets aléatoires) │ ├─ sans mot de passe ──→ SHA-256(urlKey) ──→ AES-256-GCM key │ └─ avec mot de passe ──→ Argon2id(password, salt_16B) ──→ pwdKey SHA-256(urlKey ‖ pwdKey) ──→ AES-256-GCM key

Padding anti-analyse de trafic

Taille originaleTaille après paddingNote
0 – 1 KoNormalisé à 1 KoTaille réelle masquée
1 – 10 KoNormalisé à 10 KoTaille réelle masquée
> 10 Ko+512 octets de bruitTaille encore inférable

Headers HTTP (serveur)

HeaderValeurStatut
HSTSmax-age=63072000; includeSubDomains; preload✓ Optimal (2 ans)
Content-Security-Policydefault-src 'none' + nonce⚠ Voir findings
X-Frame-OptionsDENY✓ Anti-clickjacking
X-Content-Type-Optionsnosniff✓ Anti-MIME sniffing
Referrer-Policyno-referrer✓ Aucune fuite URL
Permissions-PolicyCaméra, micro, géo… tout désactivé✓ Minimal
ServerApache (version non masquée)⚠ Mineur

Findings

Élevé

Nonce CSP possiblement statique

Le nonce mc/Bz4z+4JUOrK0qg14qkA== semble identique à chaque réponse HTTP. Un nonce CSP doit être régénéré à chaque requête — s'il est statique, il ne protège de rien contre le XSS car un attaquant peut le réutiliser.

Élevé

Absence de Subresource Integrity (SRI)

crypto.js et jszip.min.js sont chargés sans attribut integrity=. Si le serveur est compromis, un attaquant peut injecter du JavaScript malveillant sans que le navigateur le détecte.

Moyen

Padding insuffisant pour les gros fichiers

Pour les contenus supérieurs à 10 Ko, seuls 512 octets de bruit sont ajoutés. La taille réelle reste largement inférable par un observateur réseau, ce qui contredit partiellement l'objectif anti-analyse de trafic.

Faible

Version Apache exposée

Le header Server: Apache révèle le type de serveur. Sans ServerTokens Prod dans la config Apache, la version complète peut être exposée — information utile pour cibler des CVE connues.

Info

Bug potentiel — btoa sur grands tableaux

L'appel btoa(String.fromCharCode.apply(null, array)) dans padContent() peut lever une exception Maximum call stack size exceeded sur de gros fichiers. Non critique en prod avec les paliers actuels, mais fragile.