Simulation Betclic · DevSecOps Portfolio
Framework : OWASP Top 10 (2021) appliqué à une plateforme de paris sportifs en tokens
Durée estimée : 15 min · Contexte : Portfolio alternance Bachelor Systèmes & Réseaux, Cloud & Cybersécurité
tokenybet-owasp-audit/
├── README.md ← ce fichier
├── partie-1-architecture/ ← Stack technique & schéma infra
├── partie-2-backend-frontend/ ← .NET / Kotlin / React / MongoDB
└── partie-3-owasp-audit/
├── README.md ← rapport d'audit complet
├── owasp-matrix.md ← matrice de risques
└── remediation/
├── A01-access-control.cs ← correctif JWT .NET
├── A05-api-gateway.yaml ← Cognito Authorizer AWS SAM
├── A07-waf-throttling.json ← règle AWS WAF rate limiting
└── A09-audit-trail.py ← DynamoDB append-only logging
Tokenybet est une application fictive de paris sportifs basée sur un système de tokens numériques, conçue dans le cadre d'une simulation DevSecOps inspirée de l'environnement Betclic.
Elle s'appuie sur :
- Un backend
.NET C#etKotlin - Un frontend
React / Redux / TypeScript - Une base de données
MongoDB Atlas(cluster AWS Paris) - Une infrastructure serverless
AWS Lambda + API Gateway - Une authentification
JWT(partiellement implémentée — vulnérabilités identifiées)
Cet audit applique le référentiel OWASP Top 10 (2021) pour identifier, évaluer et prioriser les vulnérabilités de sécurité applicative, avec des recommandations alignées sur les exigences réglementaires de l'ANJ (Autorité Nationale des Jeux).
| # | Risque OWASP | Vulnérabilité dans Tokenybet | Criticité | Mesure corrective |
|---|---|---|---|---|
| A01 | Broken Access Control | Un joueur peut POST /api/bets avec le userId d'un autre joueur |
🔴 Critique | Valider que userId payload = claim JWT côté serveur |
| A02 | Cryptographic Failures | Solde de tokens stocké en clair dans localStorage (Base64) |
🔴 Critique | Stockage côté serveur uniquement · TLS obligatoire |
| A03 | Injection | Champ minute du pari → injection SQL si non paramétré |
🟠 Haute | EF Core parameterized queries .NET / JPA côté Kotlin |
| A05 | Security Misconfiguration | API Lambda sans auth — API Gateway sans Authorizer | 🔴 Critique | AWS Cognito Authorizer ou API Key sur API Gateway |
| A06 | Vulnerable Components | Dépendances npm React non auditées | 🟡 Moyenne | npm audit fix en pipeline CI/CD |
| A07 | Authentication Failures | Pas de rate limiting sur /api/bets → brute force de tokens |
🔴 Critique | AWS WAF + throttling API Gateway (100 req/min/IP) |
| A09 | Security Logging Failures | Aucun log d'audit sur les transactions de tokens | 🟠 Haute | CloudWatch structured logging + DynamoDB audit trail |
| A10 | SSRF | Ghost Bet Heatmap appelle des URLs externes non validées | 🟡 Moyenne | Whitelist stricte des endpoints autorisés |
ℹ️ Mise à jour OWASP 2025 — La version publiée fin 2025 fait monter la Security Misconfiguration en A02 et introduit les Software Supply Chain Failures en A03. La SSRF est absorbée dans A01. Cet audit est basé sur la version 2021 ; les priorités identifiées restent valides et sont renforcées par la nouvelle édition.
┌─────────────────────────────────────────────────────────────────┐
│ PRIORITÉ 1 — A05 : API Lambda sans authentification │
│ Porte ouverte publique sur toutes les transactions │
│ ✅ Fix : Cognito Authorizer sur API Gateway — 15 min │
├─────────────────────────────────────────────────────────────────┤
│ PRIORITÉ 2 — A07 : Absence de rate limiting │
│ Un bot peut inonder /api/bets de faux paris │
│ ✅ Fix : AWS WAF · règle throttling 100 req/min/IP │
├─────────────────────────────────────────────────────────────────┤
│ PRIORITÉ 3 — A01 : Broken Access Control │
│ Usurpation d'identité joueur via userId falsifié │
│ ✅ Fix : validation JWT systématique côté serveur │
└─────────────────────────────────────────────────────────────────┘
"Sur Tokenybet, j'ai mené un audit OWASP Top 10. Les risques prioritaires sont A01 (contrôle d'accès brisé sur les paris), A05 (API Lambda non authentifiée), et A07 (absence de rate limiting — un bot pourrait inonder le système de faux paris). Je recommande en priorité : JWT côté API Gateway AWS, WAF avec règle de throttling, et un audit trail DynamoDB pour la traçabilité réglementaire ANJ."
// ❌ Vulnérable : userId vient du payload, non vérifié
[HttpPost("/api/bets")]
public IActionResult PlaceBet(BetRequest request) { ... }
// ✅ Corrigé : userId extrait du token JWT, non falsifiable
[HttpPost("/api/bets")]
[Authorize]
public IActionResult PlaceBet(BetRequest request) {
var userId = User.FindFirst(ClaimTypes.NameIdentifier)?.Value;
if (userId != request.UserId) return Forbid();
// suite du traitement...
}# AWS SAM — ajout Cognito Authorizer
ApiGateway:
Type: AWS::Serverless::Api
Properties:
Auth:
DefaultAuthorizer: CognitoAuthorizer
Authorizers:
CognitoAuthorizer:
UserPoolArn: !GetAtt UserPool.Arn{
"Name": "RateLimitBets",
"Priority": 1,
"Action": { "Block": {} },
"Statement": {
"RateBasedStatement": {
"Limit": 100,
"AggregateKeyType": "IP"
}
}
}import boto3, uuid, datetime
def log_bet_transaction(user_id, bet_id, amount, action):
table = boto3.resource('dynamodb').Table('tokenybet-audit-trail')
table.put_item(Item={
'eventId': str(uuid.uuid4()),
'timestamp': datetime.datetime.utcnow().isoformat(),
'userId': user_id,
'betId': bet_id,
'amount': amount,
'action': action, # 'BET_PLACED', 'BET_CANCELLED'...
'source': 'API_GATEWAY'
})L'Autorité Nationale des Jeux impose aux opérateurs agréés en France :
| Exigence ANJ | Vulnérabilité concernée | Statut |
|---|---|---|
| Traçabilité complète des transactions | A09 — Absence d'audit trail | ❌ Non conforme |
| Authentification des accès opérateurs | A05 — API sans auth | ❌ Non conforme |
| Protection contre la fraude et l'usurpation | A01 — Broken Access Control | ❌ Non conforme |
| Protection des joueurs vulnérables (Betclic Protect) | A07 — Absence de rate limiting |
Sans les correctifs identifiés, Tokenybet serait non conforme ANJ et ne pourrait pas obtenir d'agrément opérateur en France.
PROBABILITÉ
Faible Moyenne Haute
┌─────────────┬─────────────┬─────────────┐
Haute │ │ A03 · A09 │ A01 · A05 │
Impact │ │ │ A07 │
├─────────────┼─────────────┼─────────────┤
Moyen │ │ A02 │ │
├─────────────┼─────────────┼─────────────┤
Faible │ │ A06 · A10 │ │
└─────────────┴─────────────┴─────────────┘
- OWASP Top 10 2025 — Dernière édition officielle
- OWASP Top 10 2021 — Version utilisée dans cet audit
- AWS WAF — Rate Based Rules
- AWS Cognito — API Gateway Authorizer
- ANJ — Cadre réglementaire
- Betclic Protect — Jeu responsable
Li-Lise R. — Étudiante Bachelor Systèmes & Réseaux, Cloud & Cybersécurité
Sup de Vinci Bordeaux · Recherche alternance septembre 2026
Domaines cibles : DevSecOps · FinTech · Secteur bancaire · ESN
Simulation DevSecOps · Inspiration : environnement technique Betclic Group · Bordeaux
Données et scénarios entièrement fictifs — usage portfolio uniquement