<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Client-Side on MrAzoth</title>
    <link>https://az0th.it/web/client/</link>
    <description>Recent content in Client-Side on MrAzoth</description>
    <generator>Hugo -- 0.154.5</generator>
    <language>en-us</language>
    <lastBuildDate>Tue, 24 Feb 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://az0th.it/web/client/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Clickjacking</title>
      <link>https://az0th.it/web/client/081-client-clickjacking/</link>
      <pubDate>Tue, 24 Feb 2026 00:00:00 +0000</pubDate>
      <guid>https://az0th.it/web/client/081-client-clickjacking/</guid>
      <description>&lt;h1 id=&#34;clickjacking&#34;&gt;Clickjacking&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Severity&lt;/strong&gt;: Medium–High | &lt;strong&gt;CWE&lt;/strong&gt;: CWE-1021
&lt;strong&gt;OWASP&lt;/strong&gt;: A04:2021 – Insecure Design&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id=&#34;what-is-clickjacking&#34;&gt;What Is Clickjacking?&lt;/h2&gt;
&lt;p&gt;Clickjacking (UI redress attack) overlays an invisible &lt;code&gt;&amp;lt;iframe&amp;gt;&lt;/code&gt; of the target site over a fake UI, tricking users into clicking target UI elements while believing they&amp;rsquo;re interacting with the attacker&amp;rsquo;s page.&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;Victim sees: &amp;#34;Click here to win a prize!&amp;#34; button
Reality:     Transparent iframe of target.com/delete-account is positioned
             so the victim clicks the &amp;#34;Confirm Delete&amp;#34; button instead
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Impact escalation&lt;/strong&gt;: clickjacking + CSRF → privileged actions; clickjacking + XSS → cookie theft; clickjacking drag-and-drop → text exfiltration.&lt;/p&gt;</description>
    </item>
    <item>
      <title>CORS Misconfiguration</title>
      <link>https://az0th.it/web/client/082-client-cors/</link>
      <pubDate>Tue, 24 Feb 2026 00:00:00 +0000</pubDate>
      <guid>https://az0th.it/web/client/082-client-cors/</guid>
      <description>&lt;h1 id=&#34;cors-misconfiguration&#34;&gt;CORS Misconfiguration&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Severity&lt;/strong&gt;: High | &lt;strong&gt;CWE&lt;/strong&gt;: CWE-942
&lt;strong&gt;OWASP&lt;/strong&gt;: A01:2021 – Broken Access Control&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id=&#34;what-is-cors&#34;&gt;What Is CORS?&lt;/h2&gt;
&lt;p&gt;Cross-Origin Resource Sharing (CORS) allows browsers to make cross-origin requests. A server opts in by returning &lt;code&gt;Access-Control-Allow-Origin&lt;/code&gt; headers. The vulnerability occurs when the server &lt;strong&gt;reflects the attacker&amp;rsquo;s origin&lt;/strong&gt;, allows &lt;strong&gt;null origin&lt;/strong&gt;, or uses overly broad wildcards — combined with &lt;code&gt;Access-Control-Allow-Credentials: true&lt;/code&gt; — letting an attacker&amp;rsquo;s site read authenticated responses from the victim&amp;rsquo;s browser.&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;Normal same-origin: browser blocks cross-origin reads (by default)
CORS misconfigured: server says &amp;#34;yes, attacker.com can read my responses&amp;#34;
                    → attacker.com JS reads victim&amp;#39;s authenticated API data
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Key rule&lt;/strong&gt;: &lt;code&gt;Access-Control-Allow-Origin: *&lt;/code&gt; with &lt;code&gt;Access-Control-Allow-Credentials: true&lt;/code&gt; is &lt;strong&gt;spec-forbidden&lt;/strong&gt; — browsers reject it. The dangerous case is when the server dynamically reflects a specific origin.&lt;/p&gt;</description>
    </item>
    <item>
      <title>CSRF (Cross-Site Request Forgery)</title>
      <link>https://az0th.it/web/client/080-client-csrf/</link>
      <pubDate>Tue, 24 Feb 2026 00:00:00 +0000</pubDate>
      <guid>https://az0th.it/web/client/080-client-csrf/</guid>
      <description>&lt;h1 id=&#34;csrf-cross-site-request-forgery&#34;&gt;CSRF (Cross-Site Request Forgery)&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Severity&lt;/strong&gt;: High | &lt;strong&gt;CWE&lt;/strong&gt;: CWE-352
&lt;strong&gt;OWASP&lt;/strong&gt;: A01:2021 – Broken Access Control&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id=&#34;what-is-csrf&#34;&gt;What Is CSRF?&lt;/h2&gt;
&lt;p&gt;CSRF forces an authenticated user&amp;rsquo;s browser to send a forged request to a target site. The browser &lt;strong&gt;automatically includes cookies&lt;/strong&gt; (session tokens) with same-site requests, so the forged request carries valid authentication. The attacker doesn&amp;rsquo;t steal credentials — they hijack the session action.&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;Victim is logged into bank.com (has session cookie)
Attacker sends victim to: evil.com/csrf.html
Page silently submits: POST bank.com/transfer?to=attacker&amp;amp;amount=5000
Browser auto-attaches: Cookie: session=VALID_SESSION
Bank processes it: ✓ authenticated, executes transfer
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Conditions required&lt;/strong&gt;:&lt;/p&gt;</description>
    </item>
    <item>
      <title>DOM Clobbering</title>
      <link>https://az0th.it/web/client/084-client-dom-clobbering/</link>
      <pubDate>Tue, 24 Feb 2026 00:00:00 +0000</pubDate>
      <guid>https://az0th.it/web/client/084-client-dom-clobbering/</guid>
      <description>&lt;h1 id=&#34;dom-clobbering&#34;&gt;DOM Clobbering&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Severity&lt;/strong&gt;: Medium–High | &lt;strong&gt;CWE&lt;/strong&gt;: CWE-79, CWE-20
&lt;strong&gt;OWASP&lt;/strong&gt;: A03:2021 – Injection | A05:2021 – Security Misconfiguration&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id=&#34;what-is-dom-clobbering&#34;&gt;What Is DOM Clobbering?&lt;/h2&gt;
&lt;p&gt;DOM Clobbering exploits the browser behavior where HTML elements with &lt;code&gt;id&lt;/code&gt; or &lt;code&gt;name&lt;/code&gt; attributes become properties on the global &lt;code&gt;window&lt;/code&gt; object (and &lt;code&gt;document&lt;/code&gt; object). When JavaScript code references &lt;code&gt;window.x&lt;/code&gt; or &lt;code&gt;document.x&lt;/code&gt; without first defining it, an attacker who can inject HTML can control that reference by injecting an element with &lt;code&gt;id=&amp;quot;x&amp;quot;&lt;/code&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>postMessage Attacks</title>
      <link>https://az0th.it/web/client/083-client-postmessage/</link>
      <pubDate>Tue, 24 Feb 2026 00:00:00 +0000</pubDate>
      <guid>https://az0th.it/web/client/083-client-postmessage/</guid>
      <description>&lt;h1 id=&#34;postmessage-attacks&#34;&gt;postMessage Attacks&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Severity&lt;/strong&gt;: High | &lt;strong&gt;CWE&lt;/strong&gt;: CWE-346, CWE-79
&lt;strong&gt;OWASP&lt;/strong&gt;: A03:2021 – Injection | A01:2021 – Broken Access Control&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id=&#34;what-are-postmessage-attacks&#34;&gt;What Are postMessage Attacks?&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;window.postMessage()&lt;/code&gt; enables cross-origin communication between browser windows/iframes/workers. Security issues arise when the &lt;strong&gt;receiving message handler&lt;/strong&gt;:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Fails to validate the &lt;code&gt;event.origin&lt;/code&gt; — accepts messages from any origin&lt;/li&gt;
&lt;li&gt;Passes &lt;code&gt;event.data&lt;/code&gt; to dangerous sinks (&lt;code&gt;eval&lt;/code&gt;, &lt;code&gt;innerHTML&lt;/code&gt;, &lt;code&gt;location&lt;/code&gt;, &lt;code&gt;document.write&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Uses &lt;code&gt;event.source&lt;/code&gt; unsafely to send sensitive data back&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Attack surface: the handler is JavaScript code — exploitation leads to &lt;strong&gt;XSS&lt;/strong&gt;, &lt;strong&gt;open redirect&lt;/strong&gt;, &lt;strong&gt;CSRF&lt;/strong&gt;, &lt;strong&gt;data theft&lt;/strong&gt;, and &lt;strong&gt;iframe communication abuse&lt;/strong&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Prototype Pollution (Client-Side)</title>
      <link>https://az0th.it/web/client/085-client-proto-pollution/</link>
      <pubDate>Tue, 24 Feb 2026 00:00:00 +0000</pubDate>
      <guid>https://az0th.it/web/client/085-client-proto-pollution/</guid>
      <description>&lt;h1 id=&#34;prototype-pollution-client-side&#34;&gt;Prototype Pollution (Client-Side)&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Severity&lt;/strong&gt;: High | &lt;strong&gt;CWE&lt;/strong&gt;: CWE-1321
&lt;strong&gt;OWASP&lt;/strong&gt;: A03:2021 – Injection&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id=&#34;what-is-prototype-pollution&#34;&gt;What Is Prototype Pollution?&lt;/h2&gt;
&lt;p&gt;Every JavaScript object inherits from &lt;code&gt;Object.prototype&lt;/code&gt;. If an attacker can inject arbitrary properties into &lt;code&gt;Object.prototype&lt;/code&gt;, those properties are &lt;strong&gt;inherited by all objects&lt;/strong&gt; in the application — leading to property injection, logic bypass, and XSS.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// Normal:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;let&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;obj&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; {};
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;obj&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;admin&lt;/span&gt;        &lt;span style=&#34;color:#75715e&#34;&gt;// undefined
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// After prototype pollution via:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Object.&lt;span style=&#34;color:#a6e22e&#34;&gt;prototype&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;admin&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// Now ALL objects are &amp;#34;admin&amp;#34;:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;let&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;obj&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; {};
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;obj&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;admin&lt;/span&gt;        &lt;span style=&#34;color:#75715e&#34;&gt;// true ← inherited from prototype
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Attack surface: any function that &lt;strong&gt;recursively merges&lt;/strong&gt;, &lt;strong&gt;clones&lt;/strong&gt;, or &lt;strong&gt;sets properties&lt;/strong&gt; from user-controlled paths like &lt;code&gt;__proto__&lt;/code&gt;, &lt;code&gt;constructor.prototype&lt;/code&gt;, or &lt;code&gt;prototype&lt;/code&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>WebSocket Security Testing</title>
      <link>https://az0th.it/web/client/086-client-websocket/</link>
      <pubDate>Tue, 24 Feb 2026 00:00:00 +0000</pubDate>
      <guid>https://az0th.it/web/client/086-client-websocket/</guid>
      <description>&lt;h1 id=&#34;websocket-security-testing&#34;&gt;WebSocket Security Testing&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Severity&lt;/strong&gt;: High | &lt;strong&gt;CWE&lt;/strong&gt;: CWE-345, CWE-20, CWE-79
&lt;strong&gt;OWASP&lt;/strong&gt;: A03:2021 – Injection | A07:2021 – Identification and Authentication Failures&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id=&#34;what-are-websocket-attacks&#34;&gt;What Are WebSocket Attacks?&lt;/h2&gt;
&lt;p&gt;WebSockets provide full-duplex, persistent connections. Unlike HTTP, WebSocket frames lack built-in CSRF protection, don&amp;rsquo;t require &lt;code&gt;Content-Type&lt;/code&gt; negotiation, and are often less scrutinized for injection. Attack surface: &lt;strong&gt;Cross-Site WebSocket Hijacking (CSWSH)&lt;/strong&gt;, injection via WebSocket messages, and authentication bypass.&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;Upgrade handshake:
GET /chat HTTP/1.1
Host: target.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
Origin: https://target.com

→ After upgrade: bidirectional message frames
→ No per-message CSRF protection
→ No per-message authentication header requirement
&lt;/code&gt;&lt;/pre&gt;&lt;hr&gt;
&lt;h2 id=&#34;discovery-checklist&#34;&gt;Discovery Checklist&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Find WebSocket endpoints: browser DevTools → Network → WS filter&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Check Upgrade handshake — does server validate &lt;code&gt;Origin&lt;/code&gt; header?&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Test CSWSH: connect from attacker.com — does it use victim&amp;rsquo;s session cookie?&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Replay captured WebSocket messages with modified data (Burp WS Repeater)&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Test injection in WebSocket message payloads: XSS, SQLi, CMDi, SSTI&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Check authentication: is auth checked at handshake only or per-message?&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Test for IDOR in message IDs/room IDs&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Test for privilege escalation via message type manipulation&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Check if WebSocket messages are reflected (stored XSS via WS)&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Test token-based auth: JWT in WS URL or first message — test bypass&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Test reconnection — does reconnect revalidate auth?&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Test wss:// downgrade to ws:// (cleartext)&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&#34;payload-library&#34;&gt;Payload Library&lt;/h2&gt;
&lt;h3 id=&#34;attack-1--cross-site-websocket-hijacking-cswsh&#34;&gt;Attack 1 — Cross-Site WebSocket Hijacking (CSWSH)&lt;/h3&gt;
&lt;p&gt;If the server doesn&amp;rsquo;t validate the &lt;code&gt;Origin&lt;/code&gt; header during the WebSocket handshake, an attacker&amp;rsquo;s page can initiate a WebSocket connection that &lt;strong&gt;carries the victim&amp;rsquo;s session cookie&lt;/strong&gt;.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
