<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by 0Xmannaf on Medium]]></title>
        <description><![CDATA[Stories by 0Xmannaf on Medium]]></description>
        <link>https://medium.com/@0xmannaf?source=rss-4a8d16510d7b------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/1*a5pdtTBslha9HYhD1ctROQ.png</url>
            <title>Stories by 0Xmannaf on Medium</title>
            <link>https://medium.com/@0xmannaf?source=rss-4a8d16510d7b------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Sat, 14 Nov 2026 22:48:09 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@0xmannaf/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com/" rel="hub"/>
        <item>
            <title><![CDATA[Four Vulnerabilities With Ai-Agent, One Subdomain : Exploring the Hidden Attack Surface of a…]]></title>
            <link>https://medium.com/@0xmannaf/four-vulnerabilities-with-ai-agent-one-subdomain-exploring-the-hidden-attack-surface-of-a-9a7d073f785c?source=rss-4a8d16510d7b------2</link>
            <guid isPermaLink="false">https://medium.com/p/9a7d073f785c</guid>
            <category><![CDATA[bug-bounty-writeup]]></category>
            <category><![CDATA[bug-bounty]]></category>
            <category><![CDATA[bug-bounty-tips]]></category>
            <category><![CDATA[bug-hunting]]></category>
            <category><![CDATA[cybersecurity]]></category>
            <dc:creator><![CDATA[0Xmannaf]]></dc:creator>
            <pubDate>Sun, 08 Nov 2026 08:01:59 GMT</pubDate>
            <atom:updated>2026-11-08T08:01:59.751Z</atom:updated>
            <content:encoded><![CDATA[<h3>Four Vulnerabilities With Ai-Agent, One Subdomain : Exploring the Hidden Attack Surface of a Pricing Research Platform</h3><p>Hey, amazing hackers!</p><p>My name is <strong>Momen Samir (0xmannaf)</strong>. Today, I’ll be discussing four bugs that I recently found on a public target on Bugcrowd. We’ll refer to it as <strong>target.com</strong>.</p><p>I have a monitoring service that collects new subdomains for several targets and immediately notifies me when it finds one.</p><p>One day, it discovered a new subdomain on my favorite target:</p><p><a href="https://cognitive.dell.com/">https://cognitive.</a>target.com</p><p>The first time I opened this subdomain, I realized that it looked like it had been built using vibe coding because of its styling, features, and overall design.</p><p>But before telling you about the four bugs I found, let me first explain what this subdomain is and what service it provides.</p><p>It’s a pricing research and customer intelligence platform. Its purpose is to help the company understand how customers value its products and services, how much they are willing to pay, and which product configurations or service options they prefer.</p><p>Let’s get into the findings!</p><blockquote><em>F1 — Unauthenticated Persistent Study Injection in Internal Pricing Research Platform </em><em>P3</em></blockquote><p>The agent found an endpoint named /saveFirstForm that uses a POST request.</p><p>Normally, this endpoint creates a study from one of the 12 existing study templates (users can choose only one template at a time) so participants can provide their opinions about the company’s products.</p><p>The agent found a parameter named studyName with a value of null.</p><p>By changing this parameter to any value, the submitted name would be saved and rendered in the UI for other users as a trusted study.</p><p>But it was still low-hanging fruit, so I continued manually from there.</p><p>I found another parameter named businessJustification. Its value was displayed throughout the study process to users, and it also rendered URLs as clickable links.</p><p>For example, I could insert an attacker-controlled URL:</p><p><a href="https://evil.com/">https://evil.com</a></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/584/1*hxliOpXJ4TM4tBLO5978yg.png" /></figure><p>The report was initially triaged as P4, but I contacted the customer directly and explained the impact. They updated the priority from P4 to P3.</p><p><strong>And I got $750!</strong></p><blockquote><em>F2 — Unauthenticated Study Status Change on target Pricing Research Platform </em><em>P2</em></blockquote><p>After the previous bug was resolved, I went back to retest the target.</p><p>The fix was that they restricted the study creation process to specific users who received invitations from an admin. The admin would then review the study and approve or reject it.</p><p>This bug was quite simple.</p><p>The agent found an endpoint:</p><pre>GET /api/conjoint-studies</pre><p>It returned the studies’ data and their current statuses:</p><ul><li>Approved</li><li>Rejected</li><li>Finished</li><li>Submitted</li></ul><p>By changing the request method to PUT, the agent was able to change the status of any study from Approved to Rejected, an operation that required admin privileges.</p><p>The vulnerable endpoint was:</p><pre>PUT /conjoint/study-status</pre><p>With a request like:</p><pre>{<br>  &quot;FormId&quot;: &quot;&lt;study-id&gt;&quot;,<br>  &quot;status&quot;: &quot;Rejected&quot;<br>}</pre><p>The server accepted the request and persisted the status change without requiring authentication.</p><p><strong>I submitted the report and got $1,500!</strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/621/1*QUuX5l4jvvyG8DDCoTg7tQ@2x.jpeg" /></figure><blockquote><em>F3 — Injection of Fake Pricing Data Into target Production Surveys </em><em>P3</em></blockquote><p>The agent found this bug during the same session in which it found the previous one.</p><p>As I mentioned earlier, the fix restricted the study creation process to specific users. However, participant verification was still missing.</p><p>An external user could create their own participant ID and submit responses without proving they were a legitimate survey participant.</p><p>The process involved several API endpoints:</p><p><strong>1. Retrieve active studies</strong></p><pre>GET /api/conjoint-studies</pre><p>Returns available production studies and their IDs.</p><p><strong>2. Reserve a participant slot</strong></p><pre>POST /reservation/{FormId}</pre><p>By sending an arbitrary participantId, the server returned a valid groupId without verifying the participant&#39;s identity.</p><p><strong>3. Retrieve pricing options</strong></p><pre>GET /getTaskAndOptionByGroupId/{groupId}</pre><p>Returns the pricing options associated with the reserved study.</p><p><strong>4. Submit fabricated responses</strong></p><pre>PUT /conjoint/makeSelectedBatch</pre><p>The attacker could submit their own selections using the generated groupId and participantId.</p><p>The server accepted the submission and returned:</p><pre>{<br>  &quot;ok&quot;: true,<br>  &quot;totalRowsAffected&quot;: 18,<br>  &quot;fulfilled&quot;: true<br>}</pre><p>This confirmed that the backend had processed the submitted responses and marked the participant group as completed.</p><p>An attacker could introduce fabricated responses into legitimate research, potentially influencing pricing analysis, customer preference measurements, and other business insights derived from the collected data.</p><p>Unfortunately, this report was marked as a <strong>duplicate two days later</strong>.</p><blockquote><em>F4 — Unauthenticated Access to Live Audience-Align Completion &amp; Termination Credentials for Every Approved Pricing Study via POST /redirect </em><em>P2</em></blockquote><p>The agent found that the company’s pricing research platform allowed unauthenticated users to obtain valid survey completion and termination credentials for every approved study.</p><p>The first endpoint allowed us to enumerate the available study combinations:</p><pre>GET /api/form-url-combinations</pre><p>The vulnerable endpoint was:</p><pre>POST /redirect</pre><p>By providing an approved study’s formId and requesting either complete or terminate, the server returned a credential without requiring authentication or a valid participant session.</p><p>The credentials were also static: repeating the same request returned identical values.</p><p>To verify their validity, I tested them against Audience-Align’s external respondent API:</p><pre>POST /webservices/user/updateRespondentData</pre><p>The external platform recognized the two credential types differently:</p><ul><li>resstatus: 1 — Completion.</li><li>resstatus: 2 — Termination.</li></ul><p>I was able to obtain both credential types for all four approved studies identified during testing.</p><p>This confirmed that the credentials weren’t just arbitrary redirect values; the external platform actually recognized them.</p><p><strong>Impact</strong></p><p>An external attacker could obtain credentials recognized by the external survey platform as completion or termination signals, potentially allowing unauthorized interference with survey workflows and compromising the integrity of the research process.</p><p>The root cause was missing authentication and participant-level authorization when generating these credentials.</p><p>I verified the credential recognition using a dummy respondent ID; the final respondent credit or incentive state was not established.</p><p><strong>And I got another $1,500!</strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*SvEmnCwHwTk947jNwJ11dg.png" /></figure><p>in the end i can’t stop saying:</p><p><strong>Thank god | الْحَمْدُ لِلَّهِ</strong></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=9a7d073f785c" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[0 click Account Takeover (ATO) via Cross-Event Identity Confusion]]></title>
            <link>https://medium.com/@0xmannaf/0-click-account-takeover-ato-via-cross-event-identity-confusion-12a42a84f027?source=rss-4a8d16510d7b------2</link>
            <guid isPermaLink="false">https://medium.com/p/12a42a84f027</guid>
            <category><![CDATA[bug-bounty]]></category>
            <category><![CDATA[bug-bounty-tips]]></category>
            <category><![CDATA[cybersecurity]]></category>
            <category><![CDATA[penetration-testing]]></category>
            <category><![CDATA[job-hunting]]></category>
            <dc:creator><![CDATA[0Xmannaf]]></dc:creator>
            <pubDate>Mon, 23 Mar 2026 06:40:01 GMT</pubDate>
            <atom:updated>2026-04-03T19:05:45.911Z</atom:updated>
            <content:encoded><![CDATA[<p>بِسْمِ اللَّـهِ الرَّحْمَـٰنِ الرَّحِيمِ | In the name of God, the most gracious, the most merciful</p><p>Hey amazing hackers, my name is <strong>Momen Samir (0xmannaf)</strong>. Today I’ll be discussing a bug that I recently found on a target on Bugcrowd. We will refer to it as <strong>target.com</strong>.</p><p>This ATO was very tricky, and I reported it twice to finally get it triaged.So happy reading</p><p>First, after fuzzing, I found a subdomain named <strong>create.target.com</strong>, but this subdomain responded with no content.</p><p>So I went to the Wayback Machine and found some URLs, and I noticed a <strong>create account</strong> URL:</p><p><a href="https://create.target.com/flow/target/create26/register-interest/createaccount">https://create.target.com/flow/target/create26/register-interest/createaccount</a></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*XbdgbLCjO0UbmOPyCcT4ag.png" /></figure><p>After registering, it redirected me to the home page and it didn’t ask for verification. I tried many things here, but none of them worked.</p><p>So I stuck with the subdomain for a few days, testing the functions and trying to understand what it does. I found that this subdomain is for company events and has two user options:</p><blockquote>1- <strong>Interest</strong>: Can see the event online for free<br> 2- <strong>In-person</strong>: Can go to the event offline for <strong>$400</strong></blockquote><p>I also tried to make a <strong>privilege escalation</strong> from Interest to In-person for free, but I came up with nothing.</p><p>I was almost giveing up on this subdomain, but I looked at the URL and said, <strong>“What if I changed create26 to create25?”</strong></p><p>It opened a <strong>2025 event registration portal</strong> (which is an ended event). So I tried to register with the same account that I had registered with in the <strong>2026 event</strong>, and it registered normally.</p><p>To explain it more, imagine that we have two sessions:</p><blockquote>1- <strong>victim@gmail.com</strong> → registered with:<br> https://create.target.com/flow/target/create<strong>&quot;26&quot;</strong>/register-interest/createaccount</blockquote><blockquote>And the attacker, in another session, uses <strong>victim@gmail.com</strong> to register in:<br> https://create.target.com/flow/target/create<strong>&quot;25&quot;</strong>/register-interest/createaccount</blockquote><p>Now, from the <strong>attacker session</strong>, I tried to navigate to <strong>create26</strong> (which is a valid and working event), hoping that it would open the victim’s account. But I found that every time I tried to navigate to <strong>26</strong> from <strong>25</strong>, it logged me out.</p><p>I kept digging and found that when I register the email, it takes an <strong>invalid session</strong>.</p><p>Because of that, it logs me out, but once I log in with <strong>OTP</strong>, it verifies the account and gives me access to navigate to <strong>26</strong> from the <strong>25 account</strong>.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Du_I8u67ZOfikxu_jLrnUQ.png" /></figure><p>But here is the problem: as an attacker, I can’t log in using OTP because I don’t have access to the victim’s email account. So I tried to change the account email to one I control to be able to log in with OTP and verify the account, then navigate to the <strong>2026 victim account</strong>.</p><p>To understand it more, the attacker will do the Next:</p><blockquote>— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — -</blockquote><blockquote>1- Create an account with the <strong>victim’s email address</strong> in the <strong>create25 portal</strong> (for example: victim@gmail.com)</blockquote><blockquote>— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — —-<br> 2- Change the victim account email to <strong>attacker@gmail.com</strong> to be able to verify the account using OTP login</blockquote><blockquote>— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — -<br> 3- Navigate to <strong>Create26</strong>, and <strong>boom</strong>, the victim account is there.</blockquote><blockquote>— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — -</blockquote><p>So the subdomain logic does the following:</p><p>The backend links attendee identities across events for the <strong>same email</strong>, but at the same time allows registering with the <strong>same email in the 2025 event</strong> without saying <strong>“Email already exists”</strong> or asking for authorization.</p><p>It also does <strong>not enforce ownership verification</strong> when the email address is modified in the <strong>CREATE25 profile</strong>,</p><p>Allowing an attacker to <strong>rebind the identity to a different email address</strong>, which allows them to navigate to the <strong>2026 event</strong> and see the connected email there (<strong>the victim’s email</strong>).</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*1RRPJ51KNy1mLDtwZYh0ZA.jpeg" /></figure><p>But it was a third-party vendor and thanks god it’s has a private bug bounty program on bugcrow</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*RcsPdGD5QiB8V-0-iGYnqw.jpeg" /></figure><p>I send the finding to thim and in 4 day i was awarded the bounty but as a P3 finding</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Ym8ncEa_aPWQ2-fIK8FQ3A.jpeg" /></figure><p>in the end i can’t stop saying:</p><p><strong>Thank god | الْحَمْدُ لِلَّهِ</strong></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=12a42a84f027" width="1" height="1" alt="">]]></content:encoded>
        </item>
    </channel>
</rss>