Press enter or click to view image in full size
Hello Hackers! Today, I want to share a recent bug bounty experience. This isn’t just about a technical vulnerability; it’s a story of how a “Critical P1” bug gets trapped in the triage process, gets downgraded to a “P5 Informational,” and how defending a valid technical finding ended up earning me a “Warning Point” from the platform!
If you’re active in bug bounties, you can probably relate to the frustration of having solid evidence dismissed. So, grab a coffee, and let’s dive into the technical details and the triage drama.
The target was a highly secure, anonymity-focused platform (Let’s call it Target X). Its primary mission is to protect sensitive users, such as journalists and whistleblowers.
Its threat model is completely different from your average e-commerce site. The official documentation proudly states that the system is specifically designed to withstand state-level surveillance and “Forensic Seizure” (i.e., if a user’s laptop falls into the hands of law enforcement or advanced threat actors). There are no email addresses or standard usernames here; users are assigned a randomly generated 7-word passphrase, which acts as their sole “Master Credential.”
I was conducting a source code review and testing the application on a local environment, focusing heavily on authentication and session management.
When a user creates a new account, the backend provides them with this 7-word passphrase. Naturally, I wanted to see how the backend handled this highly sensitive session data. The application was built on Flask, which uses client-side sessions (cookies) by default.
I noticed something shocking in the code:
# Anonymized Code Snippet
codenames[tab_id] = secret_passphrase # The 7-word master password
session["codenames"] = fit_into_cookie(codenames) # Stuffed directly into the session!Wait, what?! The developers were pushing the plaintext master password directly into a client-side cookie?
I immediately opened the browser’s DevTools, copied the ss (session) cookie, and wrote a simple Python script to Base64 decode and zlib decompress it (since Flask sessions are only signed by default, not encrypted).
Boom! 💥 The output of my script was the exact 7-word plaintext master password.
If you understand this platform’s core threat model, this was a massive architectural flaw:
According to the program’s bounty table, an “Authentication Bypass” on this specific interface was worth a top-tier reward. Thrilled, I recorded a flawless Video PoC, wrote a detailed report, and submitted it.
A few days later, I received a message from the platform’s triage team. The result? State changed to Informational (P5) Disclosure of Known Public Information.
Join Medium for free to get updates from this writer.
Wait, public information? Since when is a user’s master password considered public information?
The triager’s argument was: “In order to exploit this, an attacker needs access to the victim’s session cookies, which requires compromising the device. This is highly unrealistic.”
I politely pushed back. I referenced Target X’s official threat model, which explicitly stated that device compromise and forensic seizure were their primary threat scenarios. If the platform itself requires users to operate on Tails OS and Tor to mitigate these exact risks, how could device compromise be deemed “unrealistic”?
I utilized the platform’s “Request Response” feature to escalate the issue to the actual developers.
When I expressed my frustration (professionally) in a support ticket, pointing out that a valid credential leak was being ignored based on flawed technical logic and noting the broader industry issue of “silent fixes” the platform handed me a little gift: A Coaching Message for “Disruptive Behavior” with 1 Penalty Point. 😅
The reason? Continuing to contest decisions without providing new technical information.
This experience was incredibly frustrating, but it taught me several valuable lessons that I want to share with the community:
Finding bugs is a technical skill, but getting them successfully triaged is an entirely different art form. Sometimes you are 100% technically correct, but the process simply works against you. It’s all part of the game. Keep hacking, keep learning, and don’t let one bad triage experience stop your momentum!
Have you ever faced a similar situation where a critical bug was marked as informational? Let me know in the comments! 👇
#BugBounty #BugBountyTips #CyberSecurity #InfoSec #EthicalHacking #AppSec #OffensiveSecurity #HackerCommunity #WebSecurity