Skip to content

OctoDevStudios/YellowKiosk

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Project-Yellow-Kiosk : Audit de Sécurité Retail (2026) 🔍

FRANÇAIS 🇫🇷

Brand-YellowKiosk Security Audit Dumped Vulnerability AI-Fail Status PHP PowerShell Région License

Description du Projet 📝

Ce dépôt contient une extraction structurelle (Dump) et une analyse de vulnérabilité d'un système de borne interactive (Kiosk) utilisé en environnement de production par une enseigne majeure du multimédia (Secteur Europe/Suisse). Le but est pédagogique : exposer des patterns d'implémentation et des erreurs fréquentes en environnement retail.

Failles de sécurité identifiées (CWE) ⚠️

  • CWE-798 — Use of Hard-coded Credentials : mot de passe admin exposé côté client / code.
  • CWE-312 — Cleartext Storage of Sensitive Information : mots de passe / identifiants stockés en clair dans data/product.json.
  • CWE-200 — Exposure of Sensitive Information to an Unauthorized Actor : fichiers de configuration et dumps lisibles sur FS.
  • CWE-78 — Improper Neutralization of Special Elements used in an OS Command (OS Command Injection) : exécution de scripts locaux (.bat / powershell) — potentielle / non confirmée : évaluer le risque si des entrées utilisateur sont utilisées.
  • CWE-276 — Incorrect Default Permissions : fichiers JSON et assets potentiellement accessibles/modifiables par le processus web sans durcissement.

Stack technique observé 🧰

  • Frontend / UI : web/product.php (single-file PHP rendering), CSS/JS embarqués.
  • Stockage local : data/product.json (JSON plat) et fichiers texte (ex : web/assets/selected_image.txt).
  • Assets : web/assets/ (images, badges, promos).
  • Scripts / runtime : php/ (binaires PHP fournis dans l'arborescence) et scripts Windows (quit_kiosk.bat), PowerShell utiles pour déploiement local.
  • Environnement ciblé : Windows (kiosk mode) / Edge en mode kiosque.

Structure du dump (extrait) 🗂️

  • data/product.json — données produit, paramètres et translations par langue.
  • web/product.php — point d'entrée de l'UI, logique d'administration et sauvegarde.
  • web/assets/ — images et ressources.
  • web/quit_kiosk.bat — script de terminaison du kiosque (Windows).
  • php/ — binaires redistribués (serveur local).

Recommandations (remédiations) 🛠️

  • Retirer les mots de passe codés en dur et ne jamais les exposer côté client ; implémenter authentification serveur (session).
  • Ne jamais stocker un mot de passe en clair : utiliser password_hash() / password_verify() (PHP) et restreindre l'accès fichier (ACL/permissions).
  • Restreindre les permissions FS du dossier data/ (owned by kiosk user, chmod minimal).
  • Éviter d'exécuter directement des commandes OS depuis le code applicatif ; isoler ce comportement dans un service sécurisé ou utiliser API OS limitée.
  • Ajouter journalisation et alerting, surveiller accès et modifications de product.json.
  • Valider et encoder toutes les entrées utilisateur (même dans l'admin local).

Méthodologie 🔬

  • Analyse statique du code source disponible, inspection des fichiers dumpés et des scripts.
  • Pas de tests d'intrusion actifs ni d'exploitation en production dans ce dépôt — l'analyse est limitée au contenu fourni.

Impact 📉

  • Hard-coded credentials & mots de passe en clair : sévérité élevée — accès administrateur facile si l'attaquant peut lire les fichiers ou accéder à l'UI.
  • Exposition des données produit : sévérité moyenne (confidentialité, fuite de pricing).

Limitations ⚖️

  • Audit basé sur artefacts statiques fournis dans le dépôt ; état réel du système en production (permissions OS, réseaux, politiques de déploiement) non vérifié.

Disclaimer ⚖️ Ce projet est une étude de cas en cybersécurité. Tous les noms de marques, identifiants réels et données sensibles ont été anonymisés ou modifiés ([Enseigne originale] -> YellowKiosk). L'auteur n'encourage aucune activité illégale et décline toute responsabilité quant à l'usage de ces informations.

Licence / Usage 📚

Usage éducatif seulement — voir badge Licence en entête.

Mode d'emploi (Kiosk — FR) 🧭

  • Mot de passe admin (par défaut): Admin_1025. Si vous changez le mot de passe via l'interface admin, la nouvelle valeur est persistée dans data/product.json sous settings.admin_pwd.
  • Accès au panneau admin: triple-cliquez sur le titre du produit (haut à gauche). Une boîte de saisie de mot de passe s'ouvre ; saisissez le mot de passe admin pour afficher le panneau d'édition.
  • Changer le mot de passe admin: dans le panneau admin, onglet "Accès Administration", renseignez un nouveau mot de passe dans le champ "Modifier le mot de passe admin" puis cliquez sur "💾 Mettre à jour l'étiquette" pour sauvegarder.
  • Modifier le produit: depuis le panneau admin (formulaire), vous pouvez modifier et sauvegarder les champs suivants (chemins JSON entre parenthèses) :
    • Code Article (SKU): article.code_article
    • Désignation / Titre affiché (par langue): article.designation et translations[<lang>].article.designation
    • Taille Écran (par langue): article.ecran et translations[<lang>].article.ecran
    • RAM: pc.ram_gb
    • Système (par langue): pc.systeme et translations[<lang>].pc.systeme
    • Processeur (par langue): pc.processeur et translations[<lang>].pc.processeur
    • Carte Graphique (par langue): pc.carte_graphique et translations[<lang>].pc.carte_graphique
    • Stockage (par langue): pc.stockage et translations[<lang>].pc.stockage
    • Accessoires (par langue): pc.accessoires et translations[<lang>].pc.accessoires
    • Chargeur: valeur canonique dans pc.chargeur_key (ex: included) et étiquette localisée dans pc.chargeur / translations[<lang>].pc.chargeur
    • Prix de base / Prix promo: article.prix_yellowkiosk, article.prix_promo
    • Type de prix: clé canonique dans article.type_prix_key (libellés localisés)
    • Devise d'affichage: settings.devise (chf ou eur)
    • Langue d'administration: settings.lang (fr, en, de, es) — changer la langue pré-remplit les champs depuis translations[lang] si disponibles.
  • Sauvegarde: le bouton "💾 Mettre à jour l'étiquette" envoie les modifications au serveur (POST vers web/product.php) qui met à jour data/product.json et web/assets/selected_image.txt de façon atomique.
  • Images: placer les images dans web/assets/ ; la sélection se fait dans le panneau admin. web/assets/selected_image.txt contient les deux images sélectionnées (haut / bas).
  • Changer la langue côté affichage:
    • Temporaire (URL): ajouter ?lang=fr|en|de|es à l'URL.
    • Permanent: sélectionner la langue dans le panneau admin et sauvegarder (settings.lang).
  • Devise d'affichage:
    • URL: ?devise=chf|eur force l'affichage en CHF ou EUR.
    • Permanent: sélectionner la devise dans le panneau admin et sauvegarder (settings.devise).
  • Quitter le kiosque: bouton "Quitter le kiosk" → confirmation → déclenche POST quit_kiosk vers web/product.php. Sur Windows, web/quit_kiosk.bat est exécuté pour forcer l'arrêt de msedge.exe, php.exe et cmd.exe. ⚠️ Action destructive.
  • Démarrer localement:
# depuis la racine du dépôt (si php dans le PATH)
cd web
php -S localhost:8000

ou sous Windows avec le binaire fourni :

cd web
..\\php\\php.exe -S localhost:8000
  • Sécurité / Remarques importantes:
    • Le mot de passe admin est stocké en clair dans data/product.json : risque majeur. Pour un déploiement sécurisé, utiliser password_hash() / password_verify(), restreindre les permissions FS et ne jamais exposer les secrets côté client.
    • L'action "Quitter le kiosk" exécute des commandes système ; vérifier les droits et l'environnement avant d'exposer cette fonctionnalité.

ENGLISH 🇬🇧

Brand-YellowKiosk Security Audit Dumped Vulnerability AI-Fail Status PHP PowerShell Region License

Project Description 📝

This repository contains a structural extraction (dump) and a vulnerability analysis of an interactive kiosk system used in production by a major multimedia retailer (Europe/Switzerland). The work is academic/pedagogical and highlights common insecure patterns.

Identified security issues (CWE) ⚠️

  • CWE-798 — Use of Hard-coded Credentials.
  • CWE-312 — Cleartext Storage of Sensitive Information.
  • CWE-200 — Exposure of Sensitive Information to an Unauthorized Actor.
  • CWE-78 — OS Command Injection (potential) when executing local scripts.
  • CWE-276 — Incorrect Default Permissions.

Observed stack 🧰

  • web/product.php (single-file PHP app), local JSON data store, assets folder, Windows batch/PowerShell scripts, PHP runtime packaged in repository.

Dump structure (excerpt) 🗂️

  • data/product.json — product data, settings, translations.
  • web/product.php — UI and admin endpoints.
  • web/assets/ — images.
  • web/quit_kiosk.bat — shutdown helper script.

Recommendations 🛠️

  • Remove hard-coded and client-exposed credentials; implement server-side auth and session management.
  • Never store plaintext passwords; use secure hashing and protect file permissions.
  • Harden file/directory permissions and limit write access to the kiosk service account.
  • Avoid executing arbitrary shell commands; if required, run through hardened privileged service.

Methodology 🔬

Static code review + artifact inspection. No active exploitation performed.

Disclaimer ⚖️

This is a case study. All brand names and sensitive data have been anonymized. No illegal actions are endorsed.

Usage Instructions (Kiosk — EN) 🧭

  • Default admin password: Admin_1025. If changed via the admin panel, the new value is persisted in data/product.json under settings.admin_pwd.
  • Access the admin panel: triple-click on the product title (top left). A password input box appears; enter the admin password to open the edit panel.
  • Change the admin password: in the admin panel, "Administration Access" tab, fill in the new password and click "💾 Update label" to save.
  • Edit the product: from the admin panel, the following fields can be edited (JSON paths in parentheses):
    • SKU: article.code_article
    • Designation / Display title (per language): article.designation and translations[<lang>].article.designation
    • Screen size (per language): article.ecran and translations[<lang>].article.ecran
    • RAM: pc.ram_gb
    • OS (per language): pc.systeme and translations[<lang>].pc.systeme
    • CPU (per language): pc.processeur and translations[<lang>].pc.processeur
    • GPU (per language): pc.carte_graphique and translations[<lang>].pc.carte_graphique
    • Storage (per language): pc.stockage and translations[<lang>].pc.stockage
    • Accessories (per language): pc.accessoires and translations[<lang>].pc.accessoires
    • Charger: canonical key in pc.chargeur_key (e.g. included), localized label in pc.chargeur / translations[<lang>].pc.chargeur
    • Base price / Promo price: article.prix_yellowkiosk, article.prix_promo
    • Price type: canonical key in article.type_prix_key (localized labels)
    • Display currency: settings.devise (chf or eur)
    • Admin language: settings.lang (fr, en, de, es) — changing language pre-fills text fields from translations[lang] if available.
  • Save: the "💾 Update label" button sends changes to the server (POST to web/product.php), which atomically updates data/product.json and web/assets/selected_image.txt.
  • Images: place images in web/assets/; selection is done via the admin panel. web/assets/selected_image.txt holds the two selected images (top / bottom).
  • Change display language:
    • Temporary (URL): append ?lang=fr|en|de|es to the URL.
    • Permanent: select language in admin panel and save (settings.lang).
  • Display currency:
    • URL: ?devise=chf|eur forces CHF or EUR display.
    • Permanent: select currency in admin panel and save (settings.devise).
  • Quit kiosk: "Quit kiosk" button → confirmation → triggers POST quit_kiosk to web/product.php. On Windows, web/quit_kiosk.bat is executed to force-kill msedge.exe, php.exe and cmd.exe. ⚠️ Destructive action.
  • Run locally:
# from the repository root (if php is in PATH)
cd web
php -S localhost:8000

Or on Windows with the bundled binary:

cd web
..\\php\\php.exe -S localhost:8000
  • Security notes:
    • The admin password may be stored in plaintext in data/product.json — major risk. For secure deployment, use password_hash() / password_verify(), restrict FS permissions and never expose secrets client-side.
    • The "Quit kiosk" action executes system commands; verify rights and execution environment before exposing this feature.

DEUTSCH 🇩🇪

Brand-YellowKiosk Security Audit Dumped Vulnerability AI-Fail Status PHP PowerShell Region License

Projektbeschreibung 📝

Dieses Repository enthält einen strukturellen Dump und eine Verwundbarkeitsanalyse eines interaktiven Kiosk-Systems, eingesetzt in Produktion bei einem großen Multimedia-Händler (Europa/Schweiz). Ziel ist die Aufdeckung typischer Sicherheitsfehler.

Gefundene Schwachstellen (CWE) ⚠️

  • CWE-798 — Hard-coded Credentials.
  • CWE-312 — Speicherung sensibler Daten im Klartext.
  • CWE-200 — Offenlegung sensibler Informationen.
  • CWE-78 — Potentielle OS-Befehls-Injektion beim Ausführen lokaler Skripte.
  • CWE-276 — Falsche Standardberechtigungen.

Beobachteter Stack 🧰

PHP (single-file UI), lokale JSON-Daten, Windows-Batch/PowerShell-Skripte, Assets-Ordner.

Empfehlungen 🛠️

  • Entfernen von Hard-coded-Credentials, sichere Server-seitige Authentifizierung.
  • Keine Speicherung sensibler Passwörter im Klartext; Hashing + restriktive Dateiberechtigungen.

Haftungsausschluss ⚠️

Dieses Projekt ist eine Fallstudie; Markennamen und sensible Daten wurden anonymisiert.

Bedienungsanleitung (Kiosk — DE) 🧭

  • Standard-Admin-Passwort: Admin_1025. Bei Änderung über das Admin-Panel wird der neue Wert in data/product.json unter settings.admin_pwd gespeichert.
  • Admin-Panel öffnen: dreifach auf den Produkttitel (oben links) klicken. Ein Passwortfeld erscheint; Admin-Passwort eingeben, um das Bearbeitungspanel zu öffnen.
  • Passwort ändern: im Admin-Panel, Tab "Zugang Administration", neues Passwort eingeben und "💾 Etikett aktualisieren" klicken.
  • Produkt bearbeiten: folgende Felder sind über das Admin-Formular editierbar (JSON-Pfade in Klammern):
    • SKU: article.code_article
    • Bezeichnung / Angezeigter Titel (pro Sprache): article.designation und translations[<lang>].article.designation
    • Bildschirmgröße (pro Sprache): article.ecran und translations[<lang>].article.ecran
    • RAM: pc.ram_gb
    • Betriebssystem (pro Sprache): pc.systeme und translations[<lang>].pc.systeme
    • Prozessor (pro Sprache): pc.processeur und translations[<lang>].pc.processeur
    • Grafikkarte (pro Sprache): pc.carte_graphique und translations[<lang>].pc.carte_graphique
    • Speicher (pro Sprache): pc.stockage und translations[<lang>].pc.stockage
    • Zubehör (pro Sprache): pc.accessoires und translations[<lang>].pc.accessoires
    • Ladegerät: kanonischer Schlüssel in pc.chargeur_key (z.B. included), lokalisiertes Label in pc.chargeur / translations[<lang>].pc.chargeur
    • Basis-/Aktionspreis: article.prix_yellowkiosk, article.prix_promo
    • Preistyp: kanonischer Schlüssel in article.type_prix_key (lokalisierte Labels)
    • Anzeigewährung: settings.devise (chf oder eur)
    • Admin-Sprache: settings.lang (fr, en, de, es) — Sprachwechsel füllt Textfelder aus translations[lang] vor, falls verfügbar.
  • Speichern: Schaltfläche "💾 Etikett aktualisieren" sendet Änderungen an den Server (POST an web/product.php), der data/product.json und web/assets/selected_image.txt atomar aktualisiert.
  • Bilder: Bilder in web/assets/ ablegen; Auswahl erfolgt im Admin-Panel. web/assets/selected_image.txt enthält die zwei ausgewählten Bilder (oben / unten).
  • Anzeigesprache ändern:
    • Temporär (URL): ?lang=fr|en|de|es an die URL anhängen.
    • Permanent: Sprache im Admin-Panel auswählen und speichern (settings.lang).
  • Anzeigewährung:
    • URL: ?devise=chf|eur erzwingt CHF- oder EUR-Anzeige.
    • Permanent: Währung im Admin-Panel auswählen und speichern (settings.devise).
  • Kiosk beenden: Schaltfläche "Kiosk beenden" → Bestätigung → löst POST quit_kiosk an web/product.php aus. Unter Windows wird web/quit_kiosk.bat ausgeführt, um msedge.exe, php.exe und cmd.exe zu beenden. ⚠️ Destruktive Aktion.
  • Lokal starten:
# vom Repository-Stammverzeichnis (wenn php im PATH)
cd web
php -S localhost:8000

Oder unter Windows mit dem mitgelieferten Binary:

cd web
..\\php\\php.exe -S localhost:8000
  • Sicherheitshinweise:
    • Das Admin-Passwort kann im Klartext in data/product.json gespeichert sein — hohes Risiko. Für sichere Deployments password_hash() / password_verify() verwenden, FS-Berechtigungen einschränken und Secrets niemals client-seitig exponieren.
    • Die Aktion "Kiosk beenden" führt Systembefehle aus; Rechte und Ausführungsumgebung vor Einsatz prüfen.

About

Security audit & vulnerability analysis of a retail interactive kiosk system. Educational case study — CWE-798, CWE-312, CWE-200, CWE-78, CWE-276.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages