<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by D3v!lXØr on Medium]]></title>
        <description><![CDATA[Stories by D3v!lXØr on Medium]]></description>
        <link>https://medium.com/@d3vilx0r?source=rss-10568e96f200------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/1*PhAMV8Z7hjaPiS98sHHI_g.png</url>
            <title>Stories by D3v!lXØr on Medium</title>
            <link>https://medium.com/@d3vilx0r?source=rss-10568e96f200------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Sat, 14 Nov 2026 04:25:50 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@d3vilx0r/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com/" rel="hub"/>
        <item>
            <title><![CDATA[Android Components]]></title>
            <link>https://d3vilx0r.medium.com/android-components-e7c5dacb046d?source=rss-10568e96f200------2</link>
            <guid isPermaLink="false">https://medium.com/p/e7c5dacb046d</guid>
            <category><![CDATA[android-components]]></category>
            <category><![CDATA[cybersecurity]]></category>
            <category><![CDATA[android-development]]></category>
            <category><![CDATA[android]]></category>
            <category><![CDATA[android-pentesting]]></category>
            <dc:creator><![CDATA[D3v!lXØr]]></dc:creator>
            <pubDate>Mon, 20 Apr 2026 12:00:11 GMT</pubDate>
            <atom:updated>2026-04-20T12:00:11.475Z</atom:updated>
            <content:encoded><![CDATA[<p>السلام عليكم ورحمه الله وبركاته 🌿</p><p>من فترة مش كبيرة بدأت اندرويد وكنت حابب اذاكر من بداية الـ Android Development عشان افهم الدنيا أكثر لما ادخل على الـ Android Pentest.</p><p>في البوست ده هكتب المنظور السريع عن الـ Four Android Components وكل تعريفها ايه، نبذة عنها وكيفية عملها.</p><p>━━━━━━━━━━━━━━━━━━━━━</p><p>🧩 أولاً: Activities</p><p>الـ Activities عبارة عن الواجهة الرئيسية اللي المستخدم بيتعامل معها سواء تطبيقات أو actions أو غيره، اي حاجة تقريبا المستخدم شايفها قدامه على الـ Android screen تعتبر activity. (بس من المنظور الخارجي عشان لسه هنتطرق لما وراء الـ activity وبتشتغل ازاي)</p><p>الـ Activity ليها حاجة اسمها Life-Cycle ودي معناها دورة الحياة بتاعتها، وهي عبارة عن كيفية عمل الـ activity من أول ما تبدأ حتى تنتهي.</p><p>وعندنا كذا تعريف للـ Life-Cycle:</p><p>▪️ onCreate() — تعني عند إنشاء الـ activity، أو بالعامية أول لما نعمل activity ايه اللي هيحصل بناء على ذلك.</p><p>▪️ onStart() — تعني عند البدء، أو لما الـ activity دي تبدأ ايه اللي هيحصل. مثال: لما بتفتح تطبيق معين ممكن يظهرلك إشعار أو notification، دي بتكون رد فعل لوجود onStart function في الكود — اللي هو أول ما البرنامج يبدأ اعمل كذا.</p><p>▪️ onResume() ▪️ onPause() ▪️ onStop() ▪️ onDestroy()</p><p>كل واحدة بتشرح معناها عموما، وهسيبلك مصدر تحت لشرح كل واحدة لو مش فاهم أو في حاجة واقفة معاك عشان نختصر.</p><p>━━━━━━━━━━━━━━━━━━━━━</p><p>⚙️ ثانياً: Services</p><p>الباشا ده عبارة عن الـ Back-end code اللي بيتطبق ويتم من خلاله تشغيل برامج بدون استخدام الـ UI، وفي نفس الوقت بيتم ترتيب أولوية التشغيل بناء على نوعه.</p><p>بالبلدي كده: الـ Activity هي الـ Front-end والـ Service هي الـ Back-end بتاعته.</p><p>وهي عبارة عن كود بيتم تنفيذه بدون UI، وتتكون من 3 أنواع:</p><p>▪️ Background Service — بيشتغل بشكل كامل في الـ background بدون اي ارتباط بالـ UI.</p><p>▪️ Foreground Service — بيشتغل في الـ background بس في شيء بيربطه بالـ UI، زي مثلا لما يكون مشغل record بيظهرلك الـ notification بتاعته في الـ UI وبتسمحلك انك تتحكم فيها.</p><p>▪️ Bound Service — بتكون مرتبطة بالـ Activity اللي شغالة في الـ UI.</p><p>وبيتم ترتيب الأنواع دي بناء على أولوياتها والترتيب هو:</p><ol><li>Bound Service</li><li>Foreground Service</li><li>Background Service</li></ol><p>ليه؟ عشان النوع الأول والتاني هو عبارة عن رسالة للـ System أن الـ notification دي مهمة بالنسبة ليا، حتى لو قفلت التطبيق هيفضل الـ record شغال. على عكس الـ Background Service فبمجرد ما تقفل التطبيق الـ Service هتوقف.</p><p>━━━━━━━━━━━━━━━━━━━━━</p><p>📡 ثالثاً: Broadcast Receiver</p><p>هو عبارة عن إذاعة للـ System.</p><p>هتقولي بتهزر؟ هقولك لا والله هو عبارة عن كده فعلا، بس بشكل تقني شوية.</p><p>هو عبارة عن بث بيحصل نتيجة حدوث action معين وبيتم استقباله من apps موجود فيها Broadcast Receiver.</p><p>مثال: انت لما تيجي تركب headphones في الموبايل مش بيظهرلك notification أن تم الاقتران؟ جميل، بناء على كده في apps بتعرف ان الـ headphones اتركبت برده صح؟ زي SoundCloud وWhatsApp وMessenger وغيره — لأنك بالبديهي هتسمع وتتكلم من خلالها.</p><p>طب الـ apps دي عرفت ازاي؟ لأن الـ System بعت رسالة لكل الـ apps على الجهاز أن الـ headphones اتركبت، وكل app عنده Broadcast Receiver استقبل الرسالة دي وتعامل معاها. وفي طبعا apps مفهاش Broadcast Receiver لأنها مش هتحتاجه، زي الـ Calendar مثلا.</p><p>دي ببساطة فكرة الـ Broadcast Receiver.</p><p>━━━━━━━━━━━━━━━━━━━━━</p><p>🗄️ رابعاً: Content Provider</p><p>ببساطة هو عبارة عن API بتُستخدم في نقل الـ data من app للتاني.</p><p>طبيعة عمله تتمحور حول الوصول لبيانات تطبيق ونقلها لتطبيق آخر بيكون محتاج الداتا دي.</p><p>في كذا سؤال هنا:</p><p>❓ ليه التطبيق اللي محتاج الداتا مش بياخدها من database الجهاز نفسه وبيروح ياخدها من تطبيق آخر؟</p><p>❓ وازاي التطبيق اللي بيـshare الـ data بيعملها share أصلاً؟</p><p>بالنسبة للسؤال الأول: انت لو عندك database خاصة بالأسماء وجهات الاتصال على الفون بتاعك، وطبعا الـ Phone app ليه الصلاحية يـaccess عليها. لما تيجي تنزل Truecaller المفروض انه بيحتاج الداتا دي، وعشان ياخدها في طريقين:</p><p>▪️ يا من الداتا بيس بتاعة الجهاز نفسه. ▪️ يا من Phone app.</p><p>طب ليه بياخدها من Phone app ومش من database الجهاز مباشرة؟ حفاظاً على أمان الجهاز والداتا بتاعته، لأن ممكن يكون في خطر لو app خارجي وصل للـ database المحلية مباشرة. بالتالي انا كـ Phone app هديك يا Truecaller الداتا اللي انت محتاجها عن طريق Content Provider، وأي تحديث في الداتا دي هيوصلك.</p><p>بالتالي الـ Content Provider هو عبارة عن حلقة وصل بين الـ apps عشان تـshare specific data مع app معين، لأنك مش محتاج تديله صلاحية الوصول للداتا كاملة طالما تقدر تديله اللي هو عاوزه من خلال Content Provider.</p><p>━━━━━━━━━━━━━━━━━━━━━</p><p>ده كان شرح مختصر للـ Four Android Components بناءً على فهمي 📖 طبعا وارد يكون في خطأ لأني بشر.</p><p>وإن أخطأت فمن عندي ومن الشيطان، وإن أصبت فمن الله والله المستعان.</p><p>ادعوا لأخوكم بظهر الغيب يرزقه الله فضلاً 🌹</p><p>#AndroidDevelopment #AndroidPentest #MobileSecurity #CyberSecurity</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=e7c5dacb046d" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Android Components]]></title>
            <link>https://d3vilx0r.medium.com/android-components-d66a898a848b?source=rss-10568e96f200------2</link>
            <guid isPermaLink="false">https://medium.com/p/d66a898a848b</guid>
            <category><![CDATA[andorid-app-development]]></category>
            <category><![CDATA[android-pentesting]]></category>
            <category><![CDATA[cybersecurity]]></category>
            <category><![CDATA[android-components]]></category>
            <category><![CDATA[android]]></category>
            <dc:creator><![CDATA[D3v!lXØr]]></dc:creator>
            <pubDate>Mon, 20 Apr 2026 11:57:31 GMT</pubDate>
            <atom:updated>2026-04-20T11:57:31.414Z</atom:updated>
            <content:encoded><![CDATA[<p>Not long ago, I started Android Development, and I wanted to study from the very beginning to better understand things before getting into Android Pentesting.</p><p>In this post, I’ll write a quick overview of the Four Android Components — what each one is, a brief about it, and how it works.</p><p>━━━━━━━━━━━━━━━━━━━━━</p><p>🧩 First: Activities</p><p>Activities are the main interface that the user interacts with — whether it’s apps, actions, or anything else. Almost anything the user sees on the Android screen is considered an Activity. (From an external perspective for now, since we’ll get into what’s behind the Activity and how it works later.)</p><p>The Activity has something called a Life-Cycle, which means its life cycle — basically how the Activity works from the moment it starts until it ends.</p><p>We have several definitions within the Life-Cycle:</p><p>▪️ onCreate() — Called when the Activity is created. In simple terms: the first time we create an Activity, what happens based on that.</p><p>▪️ onStart() — Called when the Activity starts. Example: when you open a specific app and a notification pops up — that’s a reaction to the onStart() function in the code, meaning “as soon as the app starts, do this.”</p><p>▪️ onResume() ▪️ onPause() ▪️ onStop() ▪️ onDestroy()</p><p>Each one explains itself by its name. I’ll leave a resource below to explain each one in detail if something isn’t clear, just to keep this short.</p><p>━━━━━━━━━━━━━━━━━━━━━</p><p>⚙️ Second: Services</p><p>This one is the back-end code that runs in the background — it executes processes without using the UI, and the running priority is determined based on its type.</p><p>Simply put: the Activity is the Front-end, and the Service is its Back-end.</p><p>It’s basically code that runs without a UI, and it comes in 3 types:</p><p>▪️ Background Service — Runs completely in the background with no connection to the UI.</p><p>▪️ Foreground Service — Runs in the background but has something tying it to the UI. For example, when a voice recorder is running, its notification appears in the UI and lets you control it.</p><p>▪️ Bound Service — Bound to a currently running Activity in the UI.</p><p>These types are prioritized in this order:</p><ol><li>Bound Service</li><li>Foreground Service</li><li>Background Service</li></ol><p>Why? Because the first two send a signal to the system that “this notification is important to me” — even if you close the app, the recording keeps going. Unlike a Background Service, which stops as soon as you close the app.</p><p>━━━━━━━━━━━━━━━━━━━━━</p><p>📡 Third: Broadcast Receiver</p><p>It’s basically a broadcast to the System.</p><p>You might think I’m joking — but I’m not, that’s literally what it is, just in a slightly technical sense.</p><p>It’s a broadcast that happens as a result of a certain action, and it’s received by apps that have a Broadcast Receiver.</p><p>Example: When you plug headphones into your phone, don’t you get a notification that they’ve been connected? Right — and based on that, other apps also know the headphones were plugged in. Apps like SoundCloud, WhatsApp, Messenger, and others — because naturally, you’re going to listen and talk through them.</p><p>How did those apps know? Because the System sent a message to all apps on the device that headphones were connected, and every app with a Broadcast Receiver picked up that message and reacted accordingly. Of course, some apps don’t have a Broadcast Receiver because they simply don’t need it — like the Calendar, for example.</p><p>That’s the idea behind Broadcast Receiver in simple terms.</p><p>━━━━━━━━━━━━━━━━━━━━━</p><p>🗄️ Fourth: Content Provider</p><p>Simply put, it’s an API used to transfer data from one app to another.</p><p>Its main purpose revolves around accessing one app’s data and passing it to another app that needs it.</p><p>A couple of questions here:</p><p>❓ Why doesn’t the app that needs the data just get it directly from the device’s database instead of going through another app?</p><p>❓ And how does the app sharing the data share it in the first place?</p><p>For the first question: Say you have a database of names and contacts on your phone, and obviously the Phone app has permission to access it. When you install Truecaller, it needs that data — and to get it, there are two ways:</p><p>▪️ Directly from the device’s local database. ▪️ From the Phone app itself.</p><p>So why get it from the Phone app and not directly from the database? To keep the device and its data safe — because allowing an external app direct access to the local database could be a security risk. So as the Phone app, I’ll give Truecaller exactly the data it needs through a Content Provider, and any updates to that data will be passed along too.</p><p>So the Content Provider is basically a link between apps to share specific data with a specific app — because you don’t need to give it full access to all your data when you can just give it exactly what it needs through a Content Provider.</p><p>━━━━━━━━━━━━━━━━━━━━━</p><p>That was a brief explanation of the Four Android Components based on my own understanding Of course, there’s a chance I got something wrong — I’m only human.</p><p>If I’m wrong, it’s from me and from the devil. If I’m right, it’s from God, and God is the one we seek help from.</p><p>Please keep me in your prayers 🌹</p><p>#AndroidDevelopment #AndroidPentest #MobileSecurity #CyberSecurity</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=d66a898a848b" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[[Two Chaining IDOR] Critical Broken Access Control Allowing Unauthorized Participant Deletion In…]]></title>
            <link>https://d3vilx0r.medium.com/how-a-broken-access-control-2-idor-chain-allowed-deleting-other-users-conversation-303ab5aa891d?source=rss-10568e96f200------2</link>
            <guid isPermaLink="false">https://medium.com/p/303ab5aa891d</guid>
            <category><![CDATA[idor]]></category>
            <category><![CDATA[idor-poc]]></category>
            <category><![CDATA[improper-access-control]]></category>
            <category><![CDATA[broken-access-control]]></category>
            <category><![CDATA[idor-vulnerability]]></category>
            <dc:creator><![CDATA[D3v!lXØr]]></dc:creator>
            <pubDate>Fri, 20 Feb 2026 22:16:05 GMT</pubDate>
            <atom:updated>2026-03-29T13:12:55.039Z</atom:updated>
            <content:encoded><![CDATA[<h3>[Two Chaining IDOR] Critical Broken Access Control Allowing Unauthorized Participant Deletion In Other Users’ Conversations In Any Account</h3><p>In this write-up, I’ll walk you through a juicy <strong>Broken Access Control</strong> vulnerability I discovered during a security assessment. It allowed me to <strong>delete participants from any conversation</strong> belonging to other users — without authorization.</p><p>Let’s break it down.</p><p>. . .</p><h3>🧠 Summary</h3><p>An <strong>Insecure Direct Object Reference (IDOR)</strong> vulnerability was discovered in the participant management endpoint of a <strong>private bug bounty program</strong>. By abusing this flaw, an attacker could delete participants from conversations they do not own, even across any Personal account.</p><p>To perform the attack, the following values are needed:</p><ul><li>conversationId</li><li>participantsUuids</li><li>victim_uuid</li></ul><p>. . .</p><h3>🔧 Accounts Setup</h3><p>To exploit this, I used a total of <strong>3 accounts</strong>:</p><ul><li>👾 <strong>Attacker Accounts:</strong> 2</li><li>👤 <strong>Victim Account:</strong> 1</li></ul><h3>🔒 Attacker Side</h3><ol><li>Create <strong>Attacker #1</strong>.</li><li>Create <strong>Attacker #2</strong>.</li><li>Create messages from both attacker accounts.</li></ol><h3>🎯 Victim Side</h3><ol><li>Victim creates an <strong>account</strong>.</li><li>Victim creates a conversation and invites <strong>Attacker #1</strong>.</li><li><strong>Attacker #1</strong> now has visibility into the victim’s conversation.</li></ol><p>. . .</p><h3>🔍 Step 1 — Gathering the Conversation ID</h3><p>From inside the <strong>victim’s conversation</strong>, using <strong>Attacker #1</strong>, I accessed any message and intercepted the request using Burp Suite:</p><pre>GET /api/conversations HTTP/2<br>Host: [REDACTED]</pre><p>The response revealed:</p><ul><li>conversationId</li></ul><blockquote><em>This satisfies </em><strong><em>Requirement #1</em></strong><em>.</em></blockquote><p>. . .</p><h3>🔍 Step 2 — Extracting the Victim’s UUID via IDOR</h3><p>While still authenticated as the attacker, I made a request to this vulnerable endpoint:</p><pre>GET /api/contacts/{victim@email.com} HTTP/2<br>Host: [REDACTED]</pre><p>The API response revealed:</p><ul><li>user_id</li><li>uuid</li></ul><p>💡 <strong>Note:</strong> Although this endpoint appears to be a simple contact lookup, it exposes sensitive user identifiers to any authenticated user — with zero ownership validation.</p><h3>📋 Example Response</h3><pre>{<br>  &quot;email&quot;: &quot;victim@email.com&quot;,<br>  &quot;uuid&quot;: &quot;xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx&quot;,<br>  &quot;display_name&quot;: &quot;victim&quot;<br>}</pre><blockquote><em>This satisfies </em><strong><em>Requirement #2</em></strong><em>.</em></blockquote><p>. . .</p><h3>📦 Step 3 — Triggering the Unauthorized Deletion</h3><p>I switched to <strong>Attacker #2</strong>, opened any personal conversation, and used the <strong>Manage Participants</strong> feature to delete a participant. I intercepted the request before forwarding and modified:</p><ul><li>Replace conversationId with <strong>victim&#39;s conversation ID</strong></li><li>Replace participantsUuids with <strong>victim&#39;s participant UUID</strong></li></ul><p>. . .</p><h3>✏️ Step 4 — Manipulating the Request</h3><p>The original request (attacker’s own conversation):</p><pre>{<br>  &quot;conversationId&quot;: &quot;attacker-conv-id-123&quot;,<br>  &quot;participantsUuids&quot;: [&quot;attacker-participant-uuid&quot;]<br>}</pre><p>The modified request (targeting victim’s conversation):</p><pre>{<br>  &quot;conversationId&quot;: &quot;victim-conv-id-456&quot;,<br>  &quot;participantsUuids&quot;: [&quot;victim-participant-uuid&quot;]<br>}</pre><p>The server responded with:</p><pre>HTTP/2 204 No Content</pre><h3>✅ Final Response Payload</h3><pre>{<br>  &quot;conversationId&quot;: &quot;victim-conv-id-456&quot;,<br>  &quot;status&quot;: &quot;participant_removed&quot;,<br>  &quot;participantsUuids&quot;: [&quot;victim-participant-uuid&quot;]<br>}</pre><p>. . .</p><h3>✅ Final Step</h3><ul><li>I forwarded the modified request</li><li>The <strong>victim’s participant was successfully deleted</strong> — without their knowledge or permission</li></ul><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=303ab5aa891d" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[ IDOR in Freeze Function — How I Froze a Channel in Another Organization Without Authorization]]></title>
            <link>https://d3vilx0r.medium.com/idor-in-freeze-function-how-i-froze-a-channel-in-another-organization-without-authorization-bd6e9d32f0d9?source=rss-10568e96f200------2</link>
            <guid isPermaLink="false">https://medium.com/p/bd6e9d32f0d9</guid>
            <dc:creator><![CDATA[D3v!lXØr]]></dc:creator>
            <pubDate>Wed, 02 Jul 2025 20:32:34 GMT</pubDate>
            <atom:updated>2025-07-02T20:35:33.414Z</atom:updated>
            <content:encoded><![CDATA[<h3>🔒 IDOR in Freeze Function — How I Froze a Channel in Another Organization Without Authorization</h3><p>Hey hunters! 👋<br> In this write-up, I’ll walk you through a juicy <strong>IDOR vulnerability</strong> I discovered during a security assessment. It allowed me to <strong>freeze any open channel</strong> in another organization without authorization.</p><p>Let’s break it down.</p><h3>🧠 Summary</h3><p>An <strong>Insecure Direct Object Reference (IDOR)</strong> vulnerability was discovered in the freeze function of the platform’s API. By abusing this flaw, an attacker could <strong>freeze channels in other organizations</strong>, even after being removed from them.</p><p>To perform the attack, the following values are needed:</p><ul><li>channel_url</li><li>user_id</li><li>owner_nickname</li><li>cover_url</li><li>app_id</li></ul><h3>🧪 Accounts Setup</h3><p>To exploit this, I used a total of <strong>4 accounts</strong>:</p><ul><li>👨‍💻 <strong>Attacker Accounts:</strong> 3</li><li>👤 <strong>Victim Account:</strong> 1</li></ul><h3>🔐 Attacker Side</h3><ol><li>Create <strong>Account A</strong> (Owner) for a new attacker organization.</li><li>Invite <strong>Account B</strong> as Admin (<em>don’t log in before accepting the invite</em>).</li><li>After invitation, Account B accepts and joins the attacker org.</li><li>Create <strong>Account C</strong> (attacker-controlled), but don’t log in yet.</li></ol><h3>🎯 Victim Side</h3><ol><li>Victim creates a new organization.</li><li>Victim invites <strong>Account C</strong> as Admin.</li><li>Account C now has admin access to <strong>both attacker and victim organizations</strong>.</li></ol><h3>🔍 Step 1 — Gathering Initial Values</h3><p>From inside the <strong>victim’s organization</strong>, using <strong>Account C</strong>, I accessed any open channel and collected:</p><ul><li>channel_url</li><li>app_id</li></ul><h3>🔎 Step 2 — Extracting Remaining Parameters</h3><p>While still inside the victim’s org, I made a request to this endpoint:</p><pre>PUT /platform/v3/open_channels/{channel_url}</pre><p>The API response revealed:</p><ul><li>user_id</li><li>nickname</li><li>cover_url</li></ul><blockquote><em>💡 </em><strong><em>Note</em></strong><em>: Although this appears to be owner-restricted, attacker-admin cookies worked just fine.</em></blockquote><h3>🧾 Example Response</h3><pre>{<br>  &quot;channel_url&quot;: &quot;example_open_channel_xxx&quot;,<br>  &quot;name&quot;: &quot;victim1&quot;,<br>  &quot;cover_url&quot;: &quot;https://static.example.com/sample/cover/cover_13.jpg&quot;,<br>  &quot;freeze&quot;: false,<br>  &quot;operators&quot;: [<br>    {<br>      &quot;user_id&quot;: &quot;xxxxxx&quot;,<br>      &quot;nickname&quot;: &quot;victim&quot;,<br>      &quot;profile_url&quot;: &quot;&quot;<br>    }<br>  ]<br>}</pre><h3>🧊 Step 3 — Triggering the Freeze</h3><p>I returned to the <strong>attacker’s organization</strong>, intercepted the freeze request, and modified:</p><ul><li>Replace channel_url with <strong>victim’s channel URL</strong></li><li>Replace app_id in the header with <strong>victim’s App-ID</strong></li></ul><h3>🪄 Step 4 — Manipulating the Response</h3><p>Initially, the server responded with:</p><pre>400 Bad Request</pre><p>So I manually adjusted the response:</p><ul><li>Changed status code to 200 OK</li><li>Injected victim’s data and set:</li></ul><pre>&quot;freeze&quot;: true ==&gt; //Changed from false to true</pre><h3>✅ Final Response Payload</h3><pre>{<br>  &quot;channel_url&quot;: &quot;example_open_channel_246189_xxx&quot;,<br>  &quot;name&quot;: &quot;victim1&quot;,<br>  &quot;cover_url&quot;: &quot;https://static.example.com/sample/cover/cover_13.jpg&quot;,<br>  &quot;freeze&quot;: true,<br>  &quot;operators&quot;: [<br>    {<br>      &quot;user_id&quot;: &quot;xxxxxx&quot;,<br>      &quot;nickname&quot;: &quot;victim&quot;,<br>      &quot;profile_url&quot;: &quot;&quot;<br>    }<br>  ]<br>}</pre><h3>✅ Final Step</h3><ul><li>I forwarded the modified response</li><li>The <strong>victim’s channel was now frozen</strong> — without their knowledge or permission</li></ul><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=bd6e9d32f0d9" width="1" height="1" alt="">]]></content:encoded>
        </item>
    </channel>
</rss>