Free Link 🎈

My coffee went cold β˜•.

My Wi-Fi disconnected for no reason.

My life choices felt questionable.

And somehow… the application felt too confident.

That's when I knew β€” this wasn't going to be a loud hack.

This was going to be a slow emotional breakdown β€” for the app.

🧠 Chapter 1: When Bug Hunting Feels Like Adulting

Some days you exploit.

Some days you brute-force.

And some days… you just sit there, staring at the screen, wondering why you didn't choose farming instead 🌾.

This was that kind of day.

The scope was clean. The app was mature. Security headers were flexing like they went to the gym.

But logic flaws don't lift weights.

They skip leg day.

πŸ” Chapter 2: Mass Recon, But With Trust Issues

Instead of hunting parameters, I hunted flows.

Because parameters lie.

Flows tell the truth.

I mapped:

  • Login β†’ dashboard β†’ upgrade β†’ verify β†’ logout
  • Web vs mobile API behavior
  • Feature unlock timing
  • "Why am I allowed here?" moments

Buried inside a JavaScript file like a forgotten side quest:

POST /api/v2/account/verify-context

It didn't scream danger.

It whispered "trust me".

https://infosecwriteups.com/everyone-tested-the-login-page-i-tested-the-logout-button-instead-3500c4168b67

None
Gif

🧩 Chapter 3: The App That Trusted Me Like a Childhood Friend

I verified my account once.

The server replied confidently:

{
  "context_id": "9f81e3",
  "trust_level": "HIGH",
  "expires_at": "handled_by_frontend"
}

Frontend logic:

"This expires soon."

Backend logic:

"Once verified, always verified ❀️."

That emotional dependency was my entry point.

πŸ”„ Chapter 4: Replaying Trust Like Rewatching a Bad Movie

I logged out.

Cleared cookies.

Cleared sessions.

Felt productive.

Then I reused the trust:

X-Context-ID: 9f81e3

Response:

trust_level: HIGH

No session. No authentication.

Just pure trust and bad decisions.

πŸšͺ Chapter 5: Walking Past Login Like I Owned the Place

With zero authentication, I accessed:

GET /api/v2/user/dashboard

It loaded.

At that moment, authentication wasn't broken.

It had simply given up.

🧠 Chapter 6: When Logic Met Cache (And Both Panicked)

Then things escalated.

The trusted response was cached:

Cache-Control: max-age=600
X-Cache: HIT

Trust decisions β€” cached.

User identity β€” not cached.

Which means:

Whoever hits this endpoint next… inherits trust like a family heirloom.

πŸ’₯ Chapter 7: Cache-Assisted Privilege Confusion

I primed the cache with:

X-Context-ID: high_trust_context
X-User-Role: internal

Backend logic:

"Seems legit."

CDN logic:

"I'll remember this forever."

Next user request?

Admin UI elements appeared.

Sensitive endpoints unlocked.

πŸ’° Chapter 8: Sensitive Data = Real Money

The response exposed:

  • Internal user IDs
  • Feature flags
  • Debug metadata
  • Support impersonation tokens

Using one token:

GET /support/impersonate?token=REDACTED

Full account access.

No alerts. No brute force.

Just logic trusting logic too much.

🚨 Why This Was Severity

This wasn't one bug.

It was:

  • Trust replay
  • Authentication bypass
  • Cache poisoning
  • Privilege escalation

I didn't break the app.

I let its logic break itself πŸ”“πŸ§©

Happy hunting 🧠πŸ”₯

Connect with Me!

#EnnamPolVazhlkaiπŸ˜‡

#BugBounty, #CyberSecurity, #InfoSec, #Hacking, #WebSecurity, #CTF.