Traduction française complète + courriel de divulgation responsable

- README, PROTOCOL, FINDINGS, endpoints, rapport et outils traduits en français
- docs/DISCLOSURE.md : courriel prêt à envoyer à hello@boti.education
  (compte démo codé en dur, transmission en clair, logging de production)
- extract_endpoints.py vérifié après traduction (100 points d'accès toujours extraits)
This commit is contained in:
2026-09-01 17:29:25 +01:00
parent 358027bf27
commit b6f22ad7c1
8 changed files with 329 additions and 224 deletions
+39 -34
View File
@@ -1,49 +1,54 @@
# Security findings (com.botieducation.greenwood 2.4.14)
# Constats de sécurité (com.botieducation.greenwood 2.4.14)
Vendor: Boti Education (boti.education). All findings from static analysis of
the publicly distributed APK; one live login call used to verify the protocol.
Éditeur : Boti Education (boti.education). Tous les constats proviennent de
l'analyse statique de l'APK distribué publiquement ; un seul appel de
connexion réel a servi à vérifier le protocole.
## F1. Hardcoded credentials in the shipped production build [HIGH]
## F1. Identifiants codés en dur dans la build de production [GRAVE]
extracted/assets/public/1028.js (login page component) contains:
extracted/assets/public/1028.js (composant de la page de connexion) contient :
this.reconnectUser = {id:12745, phone:"0649014703", password:"0649014703"}
reconnectUser={id:12745, phone:"0649014703", password:"0649014703"}
This is a leftover dev/demo biometric-reconnect account with phone number as
password, compiled into the production bundle. Anyone with the APK has a
username and password. Status of this account on the server unknown; report to
vendor recommended.
Il s'agit d'un compte de démonstration oublié (reconnexion biométrique) avec
le numéro de téléphone comme mot de passe, compilé dans le bundle de
production. Quiconque possède l'APK connaît donc un identifiant et un mot de
passe. Statut réel de ce compte côté serveur : inconnu ; signalement à
l'éditeur recommandé.
## F2. Plaintext credential transmission [MEDIUM]
## F2. Transmission des identifiants en clair [MOYEN]
POST /login sends the password as a plaintext form field (password=...).
TLS protects the transport, but the credential sits in plaintext in any
intermediary logging form data, and the same pattern is reused by
forgot-password / change-password. No client-side hashing. Common for this
class of app, still worth flagging.
POST /login envoie le mot de passe comme champ de formulaire en clair
(password=...). TLS protège le transport, mais l'identifiant reste en texte
clair dans tout journal intermédiaire qui enregistre les données de
formulaire ; même schéma dans forgot-password et change-password. Pas de
hachage côté client. Courant pour cette classe d'application, à signaler
quand même.
## F3. Verbose production logging [LOW]
## F3. Journalisation verbeuse en production [FAIBLE]
The ApiService logs request payloads, headers and the access token to
console.log in the release build (visible via adb logcat / remote WebView
debugging if enabled).
L'ApiService journalise (console.log) les paramètres, les en-têtes et le
jeton d'accès dans la build release (visibles via adb logcat / débogage
WebView distant s'il est activé).
## F4. No certificate pinning, no obfuscation [INFO]
## F4. Pas d'épinglage de certificat, pas d'obfuscation [INFO]
No pinning config in the bundle, no network_security_config restrictions
beyond defaults, JS bundle fully readable. RE cost: about an hour.
Aucune configuration de pinning dans le bundle, aucune restriction
network_security_config au-delà des valeurs par défaut, bundle JS entièrement
lisible. Coût de la rétro-ingénierie : environ une heure.
## F5. Broad but plausible permissions [INFO]
## F5. Permissions larges mais plausibles [INFO]
CAMERA, fine+coarse LOCATION, microphone (voice recorder plugin), external
storage, FCM. Location use case is bus tracking (pick endpoints); camera for
photo upload. No SMS, contacts, or accessibility permission abuse observed.
CAMERA, localisation fine+grossière, micro (plugin enregistreur vocal),
stockage externe, FCM. Cas d'usage de la localisation : suivi des trajets
(points d'accès pick*) ; caméra pour l'envoi de photos. Aucun abus observé
(SMS, contacts, accessibilité).
## Responsible disclosure notes
## Notes de divulgation responsable
- Vendor contact is via boti.education; the school itself (Green Wood School,
tel 0520744100 per the official welcome message) can escalate.
- F1 is the only finding with direct account-takeover potential and is
trivially verifiable by the vendor.
- Do not test F1 against the live server beyond confirming it exists in the
bundle; that crosses into unauthorized access.
- Contact éditeur via boti.education ; l'école (Green Wood School,
tél 0520744100 d'après le message officiel d'accueil) peut relayer.
- F1 est le seul constat avec un potentiel de prise de contrôle de compte et
il est trivialement vérifiable par l'éditeur.
- Ne pas tester F1 contre le serveur réel au-delà de confirmer sa présence
dans le bundle : au-delà, cela devient un accès non autorisé.