Gaps de sécurité connus
Principe de transparence
Cette page liste publiquement (en interne et aux auditeurs) les surfaces qu'on n'a pas encore renforcées. Sa raison d'être : éviter les angles morts, prioriser explicitement, fournir une preuve d'honnêteté à l'audit. Ne pas masquer un gap connu.
Format
| Champ | Sens |
|---|---|
| Gap | Description courte du manque ou de la faiblesse |
| Sévérité | Critical / High / Medium / Low (CVSS-style) |
| Composant | Service, app ou couche concernée |
| Impact | Conséquence si exploité ou audité |
| Mitigation actuelle | Ce qui réduit le risque en attendant |
| Plan | Action prévue + cible temporelle |
| Ticket | Référence Jira (à créer) |
Backend
B1 — CORS permissif
| Sévérité | High |
| Composant | services/auth/src/main.ts (et probablement autres) |
| Impact | Toute origine peut faire des requêtes credentialed → fuite potentielle si XSS sur un site tiers |
| Mitigation actuelle | Cloudflare WAF en façade |
| Plan | Whitelist explicite des origins (apps + dashboards Nex). Q3 2026. |
| Ticket | à créer |
B2 — Headers de sécurité manquants
| Sévérité | Medium |
| Composant | Tous les services NestJS |
| Impact | Pas de Helmet, pas de CSP, pas de X-Frame-Options, pas de Permissions-Policy. Surface XSS / clickjacking accrue. |
| Mitigation | Cloudflare peut injecter certains headers à l'edge (à configurer) |
| Plan | Activer Helmet sur tous les services + définir CSP par app. Q3 2026. |
| Ticket | à créer |
B3 — Admin endpoints ledger sans double-entrée
Critical (compliance)
Violation directe du principe de partie double. À résoudre avant tout audit bancaire formel.
| Sévérité | Critical (compliance) |
| Composant | services/ledger-wallets — endpoints PUT /accounts/:id/balance/* |
| Impact | Modifications de solde sans écriture compensatoire = piste d'audit corrompue, violation principe double-entrée |
| Mitigation actuelle | Restriction d'accès par rôle |
| Plan | Refactor admin → toujours via intent + écriture ledger. Voir audit ledger 2026. |
| Ticket | NEX-331 (cf. compliance ledger) |
B4 — ledgers.created_by non rempli
| Sévérité | High (compliance) |
| Composant | services/ledger-wallets |
| Impact | Audit trail incomplet — impossible de prouver qui a déclenché une écriture |
| Mitigation | Logs applicatifs JSON (mais pas dans la table immuable) |
| Plan | Propager userId du caller jusqu'à l'insert ledger. |
| Ticket | NEX-332 |
B5 — Pas de correlation_id / request_id propagé
| Sévérité | Medium |
| Composant | Tous les services (orchestrator → downstream) |
| Impact | Tracing inter-services difficile, debug et forensics coûteux |
| Mitigation | Logs structurés JSON, recherche manuelle |
| Plan | Header X-Request-Id propagé partout + logué |
| Ticket | NEX-333 |
B6 — Maker-checker non enforced sur paiements bulk
| Sévérité | High (compliance) |
| Composant | services/service-catalog — mass-payments |
| Impact | Une seule personne peut initier ET valider un paiement de masse → violation séparation des tâches |
| Mitigation | Volumétrie limitée actuellement |
| Plan | Workflow maker-checker enforced (DB check makerId != checkerId) |
| Ticket | NEX-334 |
Mobile
M1 — Pas de SSL pinning
| Sévérité | Critical |
| Composant | 3 apps mobiles (Nex, Nex Pro, Nex Business) |
| Impact | MITM possible si un root cert tiers est installé sur le device (corporate proxy, malware) |
| Mitigation | TLS 1.2+ + Cloudflare |
| Plan | react-native-ssl-pinning ou Network Security Config natif. Q3 2026. |
| Ticket | à créer |
Critical
Toutes les apps mobiles concernées. MITM facile dès qu'un root cert tiers est installé sur le device.
M2 — Pas de jailbreak / root detection
| Sévérité | High |
| Composant | 3 apps mobiles |
| Impact | App tourne sur device compromis sans signal — vol de PIN, replay QR plus facile |
| Mitigation | PIN vault SecureStore + lockout |
| Plan | jail-monkey ou équivalent. Comportement : warning soft sur Nex, blocage des opérations sensibles sur Nex Pro / Nex Business. |
| Ticket | à créer |
M3 — Code obfuscation à confirmer
| Sévérité | Medium |
| Composant | 3 apps mobiles |
| Impact | Reverse engineering plus facile → compréhension de la logique métier et identification de surfaces d'attaque |
| Mitigation | Hermes bytecode partiel |
| Plan | Vérifier / activer obfuscator Metro + Hermes. |
| Ticket | à créer |
M4 — Logs console en production possibles
| Sévérité | Medium |
| Composant | 3 apps mobiles |
| Impact | Leak d'information sensible via console.log non strippés |
| Mitigation | Convention "pas de log de secret" |
| Plan | babel-plugin-transform-remove-console activé en build production. |
| Ticket | à créer |
Infrastructure & secrets
I1 — Rotation des secrets non formalisée
| Sévérité | High |
| Composant | Doppler — DB, providers, JWT, Firebase service accounts |
| Impact | Secret long-lived = surface d'attaque grandissante avec le temps |
| Mitigation | Audit logs Doppler, accès restreint |
| Plan | Politique formalisée par catégorie de secret (cf. secrets-management §5) + outillage rotation semi-auto. |
| Ticket | à créer |
I2 — MFA admin à confirmer / généraliser
| Sévérité | High |
| Composant | Doppler, AWS, Cloudflare, GitLab, Firebase |
| Impact | Compromission d'un compte admin = accès complet plateforme |
| Mitigation | Mots de passe forts uniques |
| Plan | MFA obligatoire (TOTP ou WebAuthn) pour tous les outils admin. Audit trimestriel. |
| Ticket | à créer |
I3 — Encryption at-rest RDS / Redis / EBS à confirmer
| Sévérité | Medium-High |
| Composant | RDS PostgreSQL, ElastiCache Redis, EBS EKS |
| Impact | Si AWS dérapage ou backup leak, données lisibles |
| Mitigation | RDS encryption activée par défaut depuis 2023 mais à confirmer pour les instances Nex |
| Plan | Audit explicite et documentation du résultat. |
| Ticket | à créer |
I4 — Pas d'audit centralisé des actions admin internes
| Sévérité | High (compliance) |
| Composant | services/logs-reporting (service stub v0.0.1) |
| Impact | Pas de trace pour reconstruire qui a fait quoi côté admin / compliance |
| Mitigation | Logs applicatifs dispersés |
| Plan | Implémentation du service logs-reporting avec ingestion d'événements et requêtes compliance. |
| Ticket | à créer |
I5 — Localisation et chiffrement file-service à documenter
| Sévérité | Medium |
| Composant | services/file-service (Firebase Cloud Storage) |
| Impact | Document KYC/KYB stockés sans documentation explicite de la région et du chiffrement |
| Mitigation | Firebase encryption at-rest par défaut + signed URLs |
| Plan | Documenter région des buckets, chiffrement at-rest, politique de rétention, droit à l'oubli RGPD. |
| Ticket | à créer |
I6 — mTLS inter-services K8s absent
| Sévérité | Medium |
| Composant | K8s nex-staging / nex-production |
| Impact | Si un pod est compromis, il peut potentiellement appeler d'autres services dans le même namespace |
| Mitigation | NetworkPolicy default-deny + JWT internal-service obligatoire |
| Plan | Évaluer service mesh léger (Linkerd) pour mTLS sans complexité. À chiffrer en valeur métier vs effort. |
| Ticket | à créer |
CI / CD / Supply chain
C1 — Pas de SCA continu (Snyk / Dependabot / Renovate)
| Sévérité | High |
| Composant | Tous services et apps |
| Impact | Vulnérabilités dépendances non détectées en temps réel |
| Mitigation | Trivy (containers), pnpm audit ponctuel |
| Plan | Intégrer Renovate avec auto-merge si tests OK pour patch versions. |
| Ticket | à créer |
C2 — Pas de gitleaks en pre-commit / CI
| Sévérité | Medium-High |
| Composant | Repo Git monorepo |
| Impact | Secret pushé accidentellement |
| Mitigation | Convention dev + .gitignore |
| Plan | gitleaks pre-commit (husky) + CI. Q3 2026. |
| Ticket | à créer |
C3 — Pas de SAST en CI
| Sévérité | Medium |
| Composant | Code applicatif |
| Impact | Patterns à risque non détectés automatiquement |
| Mitigation | ESLint security rules basiques |
| Plan | Évaluer Semgrep avec rules OWASP. |
| Ticket | à créer |
C4 — Pas de SBOM publié
| Sévérité | Low-Medium |
| Composant | Tous les services |
| Impact | Inventaire dépendances non auditable |
| Mitigation | Trivy peut générer SBOM |
| Plan | Générer SBOM CycloneDX au build et stocker (S3 dédié ou release artefact). |
| Ticket | à créer |
Compliance documentaire
D1 — Pas de mapping ANSSI / ISO 27001 / PCI-DSS formalisé
| Sévérité | Medium |
| Composant | Documentation |
| Impact | Audits banque sans support de mapping → temps d'audit allongé |
| Mitigation | Cette doc (sections /compliance/) |
| Plan | SoA ISO 27001 gap analysis + mapping si scope PCI / ANSSI. |
| Ticket | à créer |
D2 — Pas de DPIA risk-engine
| Sévérité | Medium |
| Composant | services/risk-engine |
| Impact | RGPD : un scoring algorithmique sans DPIA est un risque réglementaire |
| Mitigation | Décisions explicables (rules-based, pas ML opaque) |
| Plan | DPIA formalisée si RGPD applicable. |
| Ticket | à créer |
D3 — Pentest externe jamais réalisé
| Sévérité | High |
| Composant | Plateforme entière |
| Impact | Surface d'attaque jamais validée par un tiers indépendant |
| Mitigation | Code review interne, audits documentaires |
| Plan | Premier pentest cible Q3-Q4 2026. Annuel ensuite. |
| Ticket | à créer |
D4 — Email security@paywithnex.com non provisionné
| Sévérité | Low |
| Composant | Communication externe |
| Impact | Disclosure responsable difficile pour un chercheur externe |
| Mitigation | — |
| Plan | Provisionner l'email + publier .well-known/security.txt (RFC 9116). |
| Ticket | à créer |
Suivi
- Cette page est rafraîchie à chaque revue trimestrielle de sécurité.
- Chaque gap doit avoir un ticket Jira ouvert dans le projet
INFRAouNEXselon le scope. - Quand un gap est résolu : déplacer la ligne vers une section "Historique" en bas (à créer) avec date de résolution et ticket fermé.
Historique
(À enrichir au fur et à mesure des résolutions.)