Alerts, support requests and sync data share the path.
ConfirmedThe trust-all logic is present and used by three workflows.
LimitThe packaged endpoint is invalid, so no live MITM was demonstrated.
FixUse platform certificate and hostname validation. Add pinning only if operationally justified.
Finding 2 · Demo-context risk
Credentials and authentication decisions live in the APK
Embedded valuesstudent Connect2026!
1
APK exposes the credentials
Anyone who receives the APK can recover constants from the client.
2
Login is checked locally
No server-issued session proves the user identity.
3
Local state opens the dashboard
The demo login continues to work without a network connection.
Evidence boundary: the assignment supplied these teaching credentials and the data is fictional. This demonstrates an unsafe production design, not an undisclosed bypass of the classroom build.
Finding 3 · Information disclosure
A failed login reveals internal authentication details
An unauthenticated user gains endpoint names, network structure, a service-account identifier and implementation detail that can guide later reconnaissance.
Technical fix
Return a generic login failure to the user. Send diagnostic detail to protected logs with access control and retention limits.
This finding does not reveal a password or establish backend access. Its confirmed impact is reconnaissance.
Finding 4 · Predictable recovery code
Public inputs determine the recovery code offline
Student ID and dateSCU-2026-1842 2026-09-11
=
Generated valueRC-014261
Root cause
ReferenceCalculator combines yyDDD, the student ID characters and Java hash arithmetic. It uses no server secret, secure randomness or one-time state.
Attack path
An attacker obtains or guesses a student ID, extracts the algorithm from the APK, and computes the same value without intercepting email or SMS.
Mitigation
Generate a random server token, store only its digest, bind it to one request, enforce expiry and single use, and rate-limit attempts.
Verification: the same input always produced the same code. Moving the date to 2026-09-12 produced RC-086614. No redemption path was present in the APK, so account takeover remains conditional on an external service accepting this value.
Finding 5 · Local access-control bypass
An exported activity unlocks the hidden service panel
1 · External app
Sends an explicit intent to the exported MainActivity.
2 · Crafted extra
Places a Base64 value in profile_bundle.
3 · Client comparison
The decoded text matches svc:lantern:42.
4 · Persistent state
workspace_state=true reveals the hidden panel.
Demonstrated impact
A malicious application can bypass the intended navigation flow and persist access to the hidden panel.
Limitation
The investigation did not establish that the panel performs privileged backend operations.
Fix
Set the activity to exported=false unless required. Remove Base64 authorization and enforce authenticated server-side checks.
Overall security assessment
Priorities, evidence boundaries and the common root cause
F1TLS authentication bypassTop priority
F5Exported activity access bypassConfirmed
F4Predictable recovery codeConditional
F3Internal error disclosureRecon
F2Embedded demo credentialsDemo risk
What the evidence confirms
Trust-all TLS logic, deterministic code generation, unauthenticated diagnostic output, local credential checks and an exported intent path.
What remains unproven
A live backend MITM, recovery-code redemption, real account takeover and privileged server actions from the hidden panel.
Most findings arise because the client makes or stores security decisions that an attacker can inspect or influence. Move identity, recovery and authorization decisions to a trusted server boundary.