5.3 KiB
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é)
- 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)
- CORS — Remplacer
*par whitelist stricte (weval-consulting.com + sous-domaines) - CSP — Ajouter Content-Security-Policy (script-src, object-src none, frame-ancestors)
- HSTS — Uniformiser sur toutes les routes (/wevia inclus)
- 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.