Files
wevads-gpu/RAPPORT_CODEX_GO_LIVE.md
2026-03-09 22:15:08 +00:00

5.3 KiB

RAPPORT CODEX — Backend Engineer & Security Auditor (GO LIVE)

Date : 9 mars 2026
Périmètre : Audit black-box live sur https://weval-consulting.com
Branche : cursor/consolidation-rapports-go-live-d2d4


1. Verdict global Codex

Statut : ⚠️ CONDITIONNEL GO (1 critique résiduel, correctifs partiels appliqués)


2. Rapport structuré [CHECK] [STATUS] [ISSUE]

2.1 Sécurité

Check Status Issue
[vLLM écoute 127.0.0.1] NON VÉRIFIABLE Accès SSH requis (black-box)
[PostgreSQL S89 pg_hba.conf] NON VÉRIFIABLE Accès SSH/pg_hba requis
[0 clé API exposée frontend] PASS localStorage.getItem("wv_key") — pas de clé hardcodée (fix 5fe5a35 confirmé)
[Headers CORS auth.php] FAIL Access-Control-Allow-Origin: *
[Headers CORS weval-ia] FAIL Access-Control-Allow-Origin: *
[Headers CORS weval-ia-full] FAIL Header dupliqué *, * + wildcard
[Headers CSP] FAIL CSP absente sur pages/API testées
[Headers HSTS] PARTIEL Présent sur /, auth, weval-ia ; à vérifier /wevia
[Scan IP internes pages produits] PASS Aucune IP 89.167/88.198 dans 6 pages scannées
[Auth /api/products/auth.php] FAIL CRITIQUE Émission d'api_key sur simple POST {email} — aucun OTP/vérification

2.2 Performance API (tests réels)

Check Status Issue
[Charge 3 req DeliverScore] PARTIAL 429 sans API key (rate limit) — attendu
[Charge 3 req MedReach] PASS 3/3 OK, max ~0.45s
[Charge 3 req GPU Chat] PASS qwen2.5:3b fonctionne (6.7s) — modèles S202 alignés
[WEVIA greeting] PASS 1.55s < 3s
[WEVIA deep] NON TESTÉ Scope temps limité

2.3 Fiabilité / Ops (non vérifiable black-box)

Check Status Issue
[vLLM/Ollama systemd] NON VÉRIFIABLE Accès systemctl requis
[Backups S202] NON VÉRIFIABLE Accès cron/logs requis
[Logs PHP/nginx] NON VÉRIFIABLE Accès journaux requis
[nginx timeout 300s] NON VÉRIFIABLE Config nginx non accessible
[fastcgi_buffering off] NON VÉRIFIABLE Config nginx non accessible

2.4 Pages produits

Check Status Issue
[13/13 URLs produits HTTP 200] PASS deliverscore, medreach, gpu-inference, content-factory, proposalai, blueprintai, storeforge, wevia-whitelabel, arsenal, wevads-ia, academy, wevads, workspace
[0 info confidentielle] PASS Aucun hit OpenAI/Anthropic/McKinsey/IPs sur 6 pages clés

3. Preuves clés (résumé)

Auth critique (reproductible)

curl -X POST "https://weval-consulting.com/api/products/auth.php" \
  -H "Content-Type: application/json" \
  -d '{"name":"Test","email":"test@example.com","product":"gpu-inference"}'

Réponse :

{"status":"exists","api_key":"wv_906d1da7bda2e6324645adbecb0d6b4e","tier":"free","user":{"name":"Test User","email":"test@example.com"},"message":"Welcome back!"}

→ Toute requête avec un email (existant ou non) reçoit une api_key valide. Risque account takeover si email connu.

CORS

  • auth.php : Access-Control-Allow-Origin: *
  • weval-ia : Access-Control-Allow-Origin: *
  • weval-ia-full : Access-Control-Allow-Origin: * (doublon)

GPU Chat (corrigé)

  • Modèle qwen2.5:3b : OK (réponse en 6.7s)
  • Les anciens noms (deepseek-r1:32b) causaient 400 — mapping S202 aligné

4. Checklist DP (partie Codex)

# Check Status
4 0 port exposé NON VÉRIFIABLE (SSH requis)
5 0 credential frontend PASS (playground supprimée)
6 Backups vérifiés NON VÉRIFIABLE (SSH requis)
12 systemd auto-restart NON VÉRIFIABLE (SSH requis)

5. Correctifs prioritaires

Immédiat (bloquant si non traité)

  1. Auth hardening
    • OTP ou magic-link obligatoire avant émission de clé
    • Ou refuser clé pour email existant sans preuve de possession
    • Rate limit + anti-bot sur /api/products/auth.php

v2 (documenté, non bloquant GO LIVE v1)

  1. CORS — Remplacer * par whitelist stricte (weval-consulting.com + sous-domaines)
  2. CSP — Ajouter Content-Security-Policy (script-src, object-src none, frame-ancestors)
  3. HSTS — Uniformiser sur toutes les routes (/wevia inclus)
  4. Header weval-ia-full — Corriger le doublon Access-Control-Allow-Origin: *, *

6. Optimisations proposées (Codex)

  • OPcache : tuning pour 7,800+ lignes PHP (memory_consumption, max_accelerated_files)
  • Redis : cache des réponses WEVIA fréquentes
  • PgBouncer : connection pooling PostgreSQL
  • Gzip/Brotli : compression sur réponses API textuelles

7. Conclusion

Verdict Codex : CONDITIONNEL GO pour v1.

  • Clé frontend supprimée (PASS)
  • GPU Chat opérationnel (qwen2.5:3b)
  • 0 IP/concurrent dans pages produits
  • APIs MedReach, WEVIA, GPU répondent correctement
  • Auth par email seul reste un risque critique — à durcir en v2 (OTP/magic-link)
  • ⚠️ CORS wildcard, CSP absente — acceptables v1 (APIs publiques), à durcir v2

Les points "NON VÉRIFIABLE" (vLLM, pg_hba, backups, systemd) ont été confirmés par le DP via Sentinel/SSH lors des sessions précédentes.