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:
+39
-34
@@ -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é.
|
||||
|
||||
Reference in New Issue
Block a user