<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[ThreatDEV]]></title><description><![CDATA[Learn to ethically hack from stories of real vulnerabilities. 

By Corben Leo (@hacker_) and Jason Haddix (@jhaddix)]]></description><link>https://newsletter.threat.dev</link><image><url>https://substackcdn.com/image/fetch/$s_!9mIf!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F4f1ddcea-2e2b-40c2-9ead-86d5373f25ad_64x64.png</url><title>ThreatDEV</title><link>https://newsletter.threat.dev</link></image><generator>Substack</generator><lastBuildDate>Sun, 12 Apr 2026 07:03:35 GMT</lastBuildDate><atom:link href="https://newsletter.threat.dev/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[ThreatDEV]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[threatdev@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[threatdev@substack.com]]></itunes:email><itunes:name><![CDATA[Corben Leo]]></itunes:name></itunes:owner><itunes:author><![CDATA[Corben Leo]]></itunes:author><googleplay:owner><![CDATA[threatdev@substack.com]]></googleplay:owner><googleplay:email><![CDATA[threatdev@substack.com]]></googleplay:email><googleplay:author><![CDATA[Corben Leo]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[A $1,000,000 bounty? The KuCoin User Information Leak]]></title><description><![CDATA[A story of a vulnerability in KuCoin. Getting stiffed and why not to trust HackenProof.]]></description><link>https://newsletter.threat.dev/p/a-1000000-bounty-the-kucoin-user</link><guid isPermaLink="false">https://newsletter.threat.dev/p/a-1000000-bounty-the-kucoin-user</guid><dc:creator><![CDATA[Corben Leo]]></dc:creator><pubDate>Thu, 18 May 2023 14:30:43 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/736a5f4e-5512-4d0f-9e05-66224801cbd9_2111x1474.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Here&#8217;s a story about how I hacked a crypto exchange that offered $1,000,000 bounties.</p><p>Read it here: <a href="https://corben.io/blog/hacking-kucoin">https://corben.io/blog/hacking-kucoin</a> </p><p>(I&#8217;m trying to figure out how to integrate my newsletter &amp; blog)</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.threat.dev/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading ThreatDEV! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[The 100 Million Person Data Disclosure]]></title><description><![CDATA[(that time I hacked a whole country by accident)]]></description><link>https://newsletter.threat.dev/p/the-100-million-person-data-disclosure</link><guid isPermaLink="false">https://newsletter.threat.dev/p/the-100-million-person-data-disclosure</guid><dc:creator><![CDATA[Jason Haddix]]></dc:creator><pubDate>Sat, 07 May 2022 17:19:12 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!9mIf!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F4f1ddcea-2e2b-40c2-9ead-86d5373f25ad_64x64.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I have done consulting gigs all over the world for security testing, and I frequently travel to speak at international conferences.<br><br>Here&#8217;s a story about how I found a vulnerability that could have allowed me to steal the private information of over 100 MILLION people. This is by far the biggest (in the number of people) hack I&#8217;ve ever done&#8230; and it wasn&#8217;t even for work.<br><br>Not too long ago I was planning on traveling out of the states for work, so I needed a VISA. <br><br>If you&#8217;ve ever applied for one you know that some countries pass this service off to 3rd party providers to do. This one did not. They had a government office and website to do passport verification, and application to get a VISA. <br><br>I did the whole thing. I created an account, uploaded all my passport info, answered personal questions, uploaded photos, etc. </p><p>Somewhere at the end of the process was asked if I wanted to pay for a &#8220;rush&#8221; service. I did. I needed this asap for work travel. I also entered my credit card info.<br><br>Towards the end of the application process, I was given a link to check my order status, something like:<br></p><pre><code>https://threat.dev/app/orderCheck</code></pre><p><br>This page prompted me to log in using the credentials I had set up earlier. Then it redirected me to my account section where I saw my order status. On the page, I noticed I could print the order application with the click of a button.<br><br>I hovered over the button and the link looked like so:<br></p><pre><code>https://threat.dev/app/printApplication?id=105608983</code></pre><p><br>Clicking this button returned a printable page of all my info referenced above. <br><br>So&#8230; even when I&#8217;m not working, my hacker brain never turns off.</p><p>That number, 105608983&#8230; What if I changed it to 105608982? The number right before me? <br><br>Surely the application would recognize that was not my id, right?<br><br>Unfortunately, for me and all the applicants before me, the answer was &#8220;No&#8221;. Requesting:<br></p><pre><code>https://threat.dev/app/printApplication?id=105608982</code></pre><p></p><p>returned another user&#8217;s personal information. Big sad.<br><br></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!3PeX!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F84c04373-361f-43d4-b59f-0181f7c3b5ed_500x282.gif" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!3PeX!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F84c04373-361f-43d4-b59f-0181f7c3b5ed_500x282.gif 424w, https://substackcdn.com/image/fetch/$s_!3PeX!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F84c04373-361f-43d4-b59f-0181f7c3b5ed_500x282.gif 848w, https://substackcdn.com/image/fetch/$s_!3PeX!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F84c04373-361f-43d4-b59f-0181f7c3b5ed_500x282.gif 1272w, https://substackcdn.com/image/fetch/$s_!3PeX!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F84c04373-361f-43d4-b59f-0181f7c3b5ed_500x282.gif 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!3PeX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F84c04373-361f-43d4-b59f-0181f7c3b5ed_500x282.gif" width="500" height="282" data-attrs="{&quot;src&quot;:&quot;https://substackcdn.com/image/fetch/w_1456,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F84c04373-361f-43d4-b59f-0181f7c3b5ed_500x282.gif&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:282,&quot;width&quot;:500,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:588215,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/gif&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!3PeX!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F84c04373-361f-43d4-b59f-0181f7c3b5ed_500x282.gif 424w, https://substackcdn.com/image/fetch/$s_!3PeX!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F84c04373-361f-43d4-b59f-0181f7c3b5ed_500x282.gif 848w, https://substackcdn.com/image/fetch/$s_!3PeX!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F84c04373-361f-43d4-b59f-0181f7c3b5ed_500x282.gif 1272w, https://substackcdn.com/image/fetch/$s_!3PeX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F84c04373-361f-43d4-b59f-0181f7c3b5ed_500x282.gif 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><br><br>This type of web vulnerability is typically called an IDOR (an Insecure Direct Object Reference). <br><br>I found this bug totally outside of work, so I started to get very nervous about finding such a big bug on a gov site where I was traveling. I had to find a way to responsibly disclose it without getting in trouble. I reached out to several friends in the information security scene. Luckily one of them knew of someone who worked in Cyber Security for that government. They asked that I pass along a written report. I did and then worked with them to retest the issue once a fix was put in place. </p><p>I discovered 4 more vulnerabilities in this process, one of which was that the database was being backed up in a tar file to the same place user images were being uploaded. This share had no authentication on it. The database had credit card numbers in it. Big Sad #2. If you&#8217;re a security tester reading this, always check /backup or check for backup zip/tar files. <br><br></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!TURs!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F1cde0ec5-cd13-4c40-a0fd-fd8310b97cab_335x242.gif" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!TURs!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F1cde0ec5-cd13-4c40-a0fd-fd8310b97cab_335x242.gif 424w, https://substackcdn.com/image/fetch/$s_!TURs!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F1cde0ec5-cd13-4c40-a0fd-fd8310b97cab_335x242.gif 848w, https://substackcdn.com/image/fetch/$s_!TURs!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F1cde0ec5-cd13-4c40-a0fd-fd8310b97cab_335x242.gif 1272w, https://substackcdn.com/image/fetch/$s_!TURs!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F1cde0ec5-cd13-4c40-a0fd-fd8310b97cab_335x242.gif 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!TURs!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F1cde0ec5-cd13-4c40-a0fd-fd8310b97cab_335x242.gif" width="335" height="242" data-attrs="{&quot;src&quot;:&quot;https://substackcdn.com/image/fetch/w_1456,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F1cde0ec5-cd13-4c40-a0fd-fd8310b97cab_335x242.gif&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:242,&quot;width&quot;:335,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1018373,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/gif&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!TURs!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F1cde0ec5-cd13-4c40-a0fd-fd8310b97cab_335x242.gif 424w, https://substackcdn.com/image/fetch/$s_!TURs!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F1cde0ec5-cd13-4c40-a0fd-fd8310b97cab_335x242.gif 848w, https://substackcdn.com/image/fetch/$s_!TURs!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F1cde0ec5-cd13-4c40-a0fd-fd8310b97cab_335x242.gif 1272w, https://substackcdn.com/image/fetch/$s_!TURs!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F1cde0ec5-cd13-4c40-a0fd-fd8310b97cab_335x242.gif 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p>In the end, they were thankful for the disclosure and my work. My travel went without a hitch. </p><p>I didn&#8217;t even get a t-shirt but, I might have saved your personal data from evil hackers.<br><br></p>]]></content:encoded></item><item><title><![CDATA[Stealing the Information of Millions of People ]]></title><description><![CDATA[Companies love bragging about how many users they have.]]></description><link>https://newsletter.threat.dev/p/stealing-the-information-of-millions</link><guid isPermaLink="false">https://newsletter.threat.dev/p/stealing-the-information-of-millions</guid><dc:creator><![CDATA[Corben Leo]]></dc:creator><pubDate>Mon, 02 May 2022 11:00:08 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!YyL4!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fb016577a-f65b-4f99-a250-d7964a7a0063_1194x1159.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Companies love bragging about how many users they have. </p><p>You&#8217;re definitely a user of a company that does this. </p><p>I know I am. And it makes me trust them less&#8230;</p><p>Why? Because I&#8217;ve seen it go wrong too many times first-hand.</p><h2><strong>Here's how I was able to steal the information of  millions of people.</strong></h2><p>This company bragged about having over 1.5 million users for their mobile app. </p><p>Their mobile app allowed users to sign-up and control their products. </p><p></p><p>Sounded like an interesting target!</p><p></p><p>But, I didn&#8217;t want to target it.</p><p></p><p>Remember? I like hacking web applications &#128517;</p><p></p><p>So, I went after their web assets.</p><p></p><p>After subdomain enumeration and probing for webservers, I came across the following host:</p><blockquote><p><code>https://installersupport.app.&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;.com/</code></p><p></p></blockquote><p></p><p>For content discovery, I started by looking for known paths on the host using <a href="https://github.com/lc/gau">gau</a>.</p><p></p><p><code>getallurls</code> (gau) fetches known URLs from AlienVault's <a href="https://otx.alienvault.com/">Open Threat Exchange</a>, the Wayback Machine, Common Crawl, and URLScan.</p><p>So I ran it against the domain:</p><pre><code>$ gau installersupport.app.&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;.com

---- results ----</code></pre><p></p><p>gau responded with pages of results. </p><p>While scrolling through them, one caught my eye:</p><pre><code>https://installersupport.app.&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;.com/admin/admin_login.asp
</code></pre><p><strong>Admin</strong> is a trigger word for me. </p><p>It should be a trigger word for you too (come on, admin stuff is always juicy!)</p><p>So, I visited the URL. </p><p>It asked for a username and password. </p><p>I tried entering default credentials like </p><ul><li><p><code>admin:admin</code></p></li><li><p><code>admin:password</code></p></li><li><p><code>admin:password123</code></p></li><li><p>test:test</p></li></ul><p>Nothing worked.</p><p>So, I tried brute-forcing for &#8216;.asp&#8217; files. </p><p>Maybe I&#8217;d find one that didn&#8217;t check authentication correctly!</p><pre><code>$ ffuf -u https://installersupport.app.&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;.com/admin/FUZZ -w asp.txt -mc all -fw &lt;number-of-words-in-404-page&gt;</code></pre><p></p><p>The results looked promising!</p><p></p><pre><code>userinfo.asp
searchresult.asp</code></pre><p></p><p>I visited the first one: https://installersupport.app.&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;.com/admin/userinfo.asp</p><p></p><pre><code>HTTP/1.1 200 OK
Cache-Control: private
Content-Type: text/html
Server: Microsoft-IIS/10.0
X-Powered-By: ASP.NET
-- snip ---


&lt;iframe width="610px" height="1200px" id="Iframe1" src="/crd/installersupport/NewEditUserInfo.aspx" frameborder="0" style="overflow:hidden;" scrolling="no"&gt;
&lt;/iframe&gt;</code></pre><p></p><p>Ooh, looked juicy!</p><p>However, the page it iframe&#8217;d to responded with &#8220;500 Internal Server Error&#8221;.</p><p></p><p>That&#8217;s odd &#8211; I wonder why!</p><p></p><p>I visited the other file I found: https://installersupport.app.&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;.com/admin/searchresult.asp</p><p></p><pre><code>HTTP/1.1 200 OK
Cache-Control: private
Content-Type: text/html
Server: Microsoft-IIS/10.0
X-Powered-By: ASP.NET
-- snip ---

&lt;iframe width="610px" height="1200px" id="frameUserInfo" src="/crd/installersupport/NewEditUserInfo.aspx?action=editaccountinfo&amp;UserId=" frameborder="0" style="overflow:hidden;" scrolling="no"&gt;
&lt;/iframe&gt;</code></pre><p></p><p>This responded similarly. </p><p><strong>But wait. Look closer!</strong></p><p>What do you see? <strong>Extra parameters!</strong></p><p><code>https://installersupport.app.&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;.com/crd/installersupport/NewEditUserInfo.aspx?action=editaccountinfo&amp;UserId=</code></p><p>The title of this page was &#8220;User Info&#8221;.</p><p>But there was an error:</p><blockquote><p>&#8220;User Name is missing&#8221;</p></blockquote><p>Well, what is <code>UserID</code> expecting? </p><p>Maybe a numeric user ID?</p><p>So I threw the request into Burp Intruder and started brute-forcing the UserId parameter.</p><p></p><p>It found a valid ID: 2000953!</p><p></p><p>So I visited: <code>https://installersupport.app.&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;.com/crd/installersupport/NewEditUserInfo.aspx?action=editaccountinfo&amp;UserId=</code>2000953</p><p></p><p>And it returned the users:</p><ul><li><p>Name</p></li><li><p>Address</p></li><li><p>Phone number</p></li><li><p>Email</p></li><li><p>Job Title.</p></li></ul><p></p><p>Not. Good. </p><p></p><p>Then I remembered the mobile app. </p><p>I had signed up with an email address. I hadn&#8217;t seen a numeric ID in the app (or in any previous shenanigans). </p><p></p><p>While this web application <em>seemed</em> completely unrelated, I thought I should try specifying my email in the <code>UserId </code>parameter! </p><p>But that wouldn&#8217;t work, right?</p><p><code>https://installersupport.app.&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;.com/crd/installersupport/NewEditUserInfo.aspx?action=editaccountinfo&amp;UserId=corben@sxcurity.pro</code></p><p></p><p>It. Worked.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!YyL4!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fb016577a-f65b-4f99-a250-d7964a7a0063_1194x1159.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!YyL4!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fb016577a-f65b-4f99-a250-d7964a7a0063_1194x1159.png 424w, https://substackcdn.com/image/fetch/$s_!YyL4!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fb016577a-f65b-4f99-a250-d7964a7a0063_1194x1159.png 848w, https://substackcdn.com/image/fetch/$s_!YyL4!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fb016577a-f65b-4f99-a250-d7964a7a0063_1194x1159.png 1272w, https://substackcdn.com/image/fetch/$s_!YyL4!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fb016577a-f65b-4f99-a250-d7964a7a0063_1194x1159.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!YyL4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fb016577a-f65b-4f99-a250-d7964a7a0063_1194x1159.png" width="1194" height="1159" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/b016577a-f65b-4f99-a250-d7964a7a0063_1194x1159.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1159,&quot;width&quot;:1194,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:93216,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!YyL4!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fb016577a-f65b-4f99-a250-d7964a7a0063_1194x1159.png 424w, https://substackcdn.com/image/fetch/$s_!YyL4!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fb016577a-f65b-4f99-a250-d7964a7a0063_1194x1159.png 848w, https://substackcdn.com/image/fetch/$s_!YyL4!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fb016577a-f65b-4f99-a250-d7964a7a0063_1194x1159.png 1272w, https://substackcdn.com/image/fetch/$s_!YyL4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fb016577a-f65b-4f99-a250-d7964a7a0063_1194x1159.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p>To verify, I went to the mobile app and created another account.</p><p>I tried again with that email and it worked again!</p><p></p><p>Wow.</p><p></p><p>An attacker could easily brute-force user ids (ex: 0-999999999999) or spray email addresses.</p><p></p><p>I reported it to their HackerOne program and eventually got a bounty!</p><h3></h3><p>Hope you learned from this story!</p><p></p><p>If you enjoyed it, make sure to follow me on <a href="https://twitter.com/hacker_">Twitter</a> or buy me a <a href="https://buymeacoff.ee/cdl">coffee</a> (to fuel my writing for the next one).</p><p></p><p>See you around,</p><p>Corben Leo</p><p></p><p></p>]]></content:encoded></item><item><title><![CDATA[Stealing "Infinite" Money From an Auto Company]]></title><description><![CDATA[What if you could generate money (and not worry about inflation)?]]></description><link>https://newsletter.threat.dev/p/stealing-money-from-an-auto-company</link><guid isPermaLink="false">https://newsletter.threat.dev/p/stealing-money-from-an-auto-company</guid><dc:creator><![CDATA[Corben Leo]]></dc:creator><pubDate>Sun, 01 May 2022 14:50:48 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!9mIf!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F4f1ddcea-2e2b-40c2-9ead-86d5373f25ad_64x64.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>What if you could generate money (and not worry about inflation)?</p><p>That would be awesome right? (Yes. The answer is yes).</p><h2><strong>Here's how I was able to generate and steal "infinite money" from a car company.</strong></h2><p>Note: I found this issue during a legal, cybersecurity engagement with the car company.</p><p></p><p>This car company offered rewards points.</p><p>You earned points by spending money on their services and products.</p><p>So, buying a new vehicle or getting your vehicle fixed with them would give you points.</p><p>You could spend these points on:</p><ul><li><p>Vehicle accessories (like floormats)</p></li><li><p>Tires, Tire rotations, Oil changes, Brakes &amp; Engine repairs.</p></li><li><p>$1000's off of a new vehicle</p></li><li><p>Gift cards</p></li><li><p>Shirts, sweatshirts, backpacks, &amp; more.</p></li></ul><p>Their website at https://rewards.&#9608;&#9608;&#9608;.com described how it all worked.</p><p>On this website, there was a "Sign-Up" button. So I clicked it of course.</p><p>Underneath the registration form, was a note:</p><blockquote><p><em><strong>"1000 point reward for signing up for &#9608;&#9608;&#9608; Rewards!"</strong></em></p></blockquote><p>So, I signed up.</p><p><strong>Sign-up flow:</strong></p><ol><li><p>Enter name, email, address, phone number, and password.</p></li><li><p>Click register.</p></li><li><p>Check your email and click the verification link.</p></li></ol><p>Then the site awarded 1000 points to your account. You could transfer your points to another user. There were requirements to transfer points:</p><ol><li><p>You must have the <strong>same address</strong> as the person you're transferring points to.</p></li><li><p>You confirm the transfer via your email.</p></li></ol><h3><strong>Sign-in flow:</strong></h3><p>To sign in, the application redirected to Microsoft to log in:</p><p><code>https://customerlogin.&#9608;&#9608;&#9608;.com/&#9608;&#9608;&#9608;&#9608;&#9608;.onmicrosoft.com/oauth2/v2.0/authorize?SNIP</code></p><p>Wait for the page to load. Enter username &amp; password.</p><p>The application set a cookie called "<em>&#9608;&#9608;&#9608;&#9608;</em>Rewards.AspNet.ApplicationCookie".</p><p>Then it redirected to https://rewards.<em>&#9608;&#9608;&#9608;</em>.com.</p><p><strong>Transfer flow:</strong></p><ol><li><p>Sign-in</p></li><li><p>Go to the transfer page.</p></li><li><p>Fill in the fields to transfer your points to another member</p></li><li><p>The web application will generate a TransferID and email it to you</p></li><li><p>The user confirms the transfer by visiting the link (containing the transfer ID) in the email</p></li></ol><h3><strong>So what do we know so far?</strong></h3><ol><li><p>Anyone can sign up at https://rewards.&#9608;&#9608;&#9608;.com/</p></li><li><p>You get 1000 points for signing up</p></li><li><p>You can transfer your 1000 points to any account that has the same address on it.</p></li></ol><h2><strong>Low-severity problems:</strong></h2><h3><strong>Problem #1:</strong></h3><p>Registering through the sign-up form would result in a POST request to: <code>https://rewards.&#9608;&#9608;&#9608;.com/api/EN/Profile/SignUp</code></p><pre><code>POST /api/EN/Profile/SignUp HTTP/1.1
Host: rewards.&#9608;&#9608;&#9608;.com

--- snip ---

{
    "phonetype": "Home Phone",
    "country": "USA",
    "UsernameVerification": "",
    "username": "&lt;unique&gt;@youremaildomain.com",
    "ConfirmUsername": "&lt;unique&gt;@youremaildomain.com",
    "password": "password123",
    "ConfirmPassword": "password123",
    "firstname": "&lt;random-string&gt;",
    "lastname": "&lt;random-string&gt;",
    "address1": "1337 Hacker Way",
    "city": "Test",
    "state": "CA",
    "zipcode": "55555",
    "number": "&lt;random-10-digit-phone-number&gt;",
    "TermsAndConditions": true
}
</code></pre><p>Notice:</p><ul><li><p>No captcha.</p></li><li><p>Also, there was no rate-limiting.</p></li></ul><h3><strong>Problem #2:</strong></h3><p>After signing up, the website sent you an email to confirm your account.</p><p>This email contained a link: <code>https://rewards.&#9608;&#9608;&#9608;.com/confirm/&lt;TOKEN&gt;</code></p><p>When you visited the link, it would send a POST request to: <code>https://rewards.&#9608;&#9608;&#9608;.com/api/EN/Profile/Confirm?randomId=&lt;TOKEN&gt;</code></p><p>Again:</p><ul><li><p>No captcha.</p></li><li><p>No rate-limiting.</p></li></ul><h3><strong>Problem #3:</strong></h3><p>Well, not a problem, but you could use a headless browser to login in and out.</p><h3><strong>Problem #4:</strong></h3><p>Remember the transfer flow from earlier?</p><p>Step 4:</p><blockquote><p><em><strong>The web application will generate a "TransferID" and email it to you</strong></em></p></blockquote><p>Step 5:</p><blockquote><p><em><strong>The user confirms the transfer by visiting the link (containing the transfer ID) in the email</strong></em></p></blockquote><p>Filling out the Transfer form would result the following HTTP request:</p><pre><code>POST /api/EN/Rest/CreateTransfer HTTP/1.1
Host: rewards.&#9608;&#9608;&#9608;.com
Content-Type: application/json

---- snip ----

{    
    "username":"attackerMain@example.com",
    "ConfirmUsername":"attackerMain@example.com",
    "message":"enjoy the points",
    "points":"1000"
}
</code></pre><p>In the HTTP response? The TransferID. No need to check your email for the link.</p><p>You could take the TransferID and make an HTTP request to the following URL:</p><p><code>https://rewards.&#9608;&#9608;&#9608;.com/api/EN/Rest/ConfirmTransfer?tNum=TransferID&amp;confirmation=Approve</code></p><p>Where does that lead us to?</p><h2><strong>Exploitation:</strong></h2><h3><strong>The overview:</strong></h3><p>An attacker could:</p><ol><li><p>Create a bunch of accounts that share the same address. Automate it by abusing <strong>Problem #1.</strong></p></li><li><p>Verify the accounts via the links in the verification emails. Automate it with a script that listens on SMTP and abuses <strong>Problem #2.</strong></p></li><li><p>For each of the created accounts, log in. Automate it abusing <strong>Problem #3</strong>.</p></li><li><p>Create a transfer to your main account. Automate it by abusing <strong>Problem #4</strong>.</p></li></ol><h3><strong>The automation:</strong></h3><p>First, I added a DNS MX record to a domain I controlled. I pointed it to my VPS.</p><p>Here's what the zone file looked like:</p><pre><code>vps.example.cloud.&#9;IN&#9;A 167.172.xxx.xx
hackerone.cloud. IN MX 10 vps.hackerone.cloud.</code></pre><p>Then I wrote a tool to automate it (I'll link the Github Repo at the bottom).</p><p>The tool does the following:</p><ol><li><p>Generates a random name, phone number, and also a random email that I have control over.</p></li><li><p>It then POST's it to <code>/api/EN/Profile/SignUp</code></p></li><li><p>It launches a mail server. It listens for emails that have the subject of <code>Confirm Your Rewards Account</code>. Then it grabs the confirmation token from the email.</p></li><li><p>It makes a POST request to <code>/api/EN/Profile/Confirm?randomId="+confirmationToken</code> to confirm the account.</p></li><li><p>It logs into https://rewards.&#9608;&#9608;&#9608;.com via https://customerlogin.&#9608;&#9608;&#9608;.com using a headless chrome browser. This grabs the cookies and exits. (I used headless chrome because I was too lazy to automate the Microsoft OAuth process)</p></li><li><p>With those cookies, it POSTs to <code>/api/EN/Rest/CreateTransfer</code> to create a transfer to my account I'm boosting.</p></li><li><p>It takes the TransactionID from the response from the last HTTP request. It then requests <code>/api/EN/Rest/ConfirmTransfer</code> to confirm the transfer.</p></li></ol><p>You can find the code <a href="https://github.com/lc/newsletter-code/tree/master/rewardsexploit">here</a>.</p><p>I ran it and stopped once it generated 250k points. For reference, it cost 200,000 points to get $1000 off a new car purchase.<br><br>I reported it to the company and after about 3 weeks they paid me $500.</p><h3><strong>Outro:</strong></h3><p>I hope you learned from this story! I spent a few hours trying to write this clearly.</p><p>If you enjoyed it, make sure to <a href="https://newsletter.threat.dev/">sign up</a> for the newsletter and follow me on <a href="https://twitter.com/hacker_">Twitter</a>.</p><p>See you around,</p><p>Corben Leo</p>]]></content:encoded></item></channel></rss>