<?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[Farros FR]]></title><description><![CDATA[Practical guides on cybersecurity and data engineering]]></description><link>https://blog.farrosfr.com</link><image><url>https://substackcdn.com/image/fetch/$s_!cjva!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F488c8271-36ef-4d1b-846b-2e998b147193_1000x1000.png</url><title>Farros FR</title><link>https://blog.farrosfr.com</link></image><generator>Substack</generator><lastBuildDate>Fri, 16 Oct 2026 12:16:23 GMT</lastBuildDate><atom:link href="https://blog.farrosfr.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Mochammad Farros Fatchur Roji]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[farrosfr@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[farrosfr@substack.com]]></itunes:email><itunes:name><![CDATA[Mochammad Farros Fatchur Roji]]></itunes:name></itunes:owner><itunes:author><![CDATA[Mochammad Farros Fatchur Roji]]></itunes:author><googleplay:owner><![CDATA[farrosfr@substack.com]]></googleplay:owner><googleplay:email><![CDATA[farrosfr@substack.com]]></googleplay:email><googleplay:author><![CDATA[Mochammad Farros Fatchur Roji]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[AOC 25 Days 9-13: Hashcat, Sentinel, XSS, & YARA]]></title><description><![CDATA[Crack encrypted PDF/ZIP archives, triage Linux privilege escalation in Microsoft Sentinel, exploit reflected/stored XSS, inspect phishing, and run YARA rules.]]></description><link>https://blog.farrosfr.com/p/aoc-25-days-9-13-hashcat-sentinel-xss-yara</link><guid isPermaLink="false">https://blog.farrosfr.com/p/aoc-25-days-9-13-hashcat-sentinel-xss-yara</guid><dc:creator><![CDATA[Mochammad Farros Fatchur Roji]]></dc:creator><pubDate>Fri, 09 Oct 2026 00:00:00 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/4e3abe04-9385-47b0-99d2-36a2bd2f8fe9_1376x768.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><div class="image-link image2" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!9bDu!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7748d3cb-bdc5-44b9-9ad3-470700274236_1376x768.png 424w, https://substackcdn.com/image/fetch/$s_!9bDu!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7748d3cb-bdc5-44b9-9ad3-470700274236_1376x768.png 848w, https://substackcdn.com/image/fetch/$s_!9bDu!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7748d3cb-bdc5-44b9-9ad3-470700274236_1376x768.png 1272w, https://substackcdn.com/image/fetch/$s_!9bDu!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7748d3cb-bdc5-44b9-9ad3-470700274236_1376x768.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!9bDu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7748d3cb-bdc5-44b9-9ad3-470700274236_1376x768.png" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7748d3cb-bdc5-44b9-9ad3-470700274236_1376x768.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;AOC 25 Days 9-13: Hashcat, Sentinel, XSS, &amp; YARA&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="AOC 25 Days 9-13: Hashcat, Sentinel, XSS, &amp; YARA" title="AOC 25 Days 9-13: Hashcat, Sentinel, XSS, &amp; YARA" srcset="https://substackcdn.com/image/fetch/$s_!9bDu!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7748d3cb-bdc5-44b9-9ad3-470700274236_1376x768.png 424w, https://substackcdn.com/image/fetch/$s_!9bDu!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7748d3cb-bdc5-44b9-9ad3-470700274236_1376x768.png 848w, https://substackcdn.com/image/fetch/$s_!9bDu!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7748d3cb-bdc5-44b9-9ad3-470700274236_1376x768.png 1272w, https://substackcdn.com/image/fetch/$s_!9bDu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7748d3cb-bdc5-44b9-9ad3-470700274236_1376x768.png 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></div></figure></div><p>This multi-room technical walkthrough consolidates Days 9 through 13 of the TryHackMe Advent of Cyber 2025 track: <a href="https://tryhackme.com/room/attacks-on-ecrypted-files-aoc2025-asdfghj123">Passwords - A Cracking Christmas</a>, <a href="https://tryhackme.com/room/azuresentinel-aoc2025-a7d3h9k0p2">SOC Alert Triaging - Tinsel Triage</a>, <a href="https://tryhackme.com/room/xss-aoc2025-c5j8b1m4t6">XSS - Merry XSSMas</a>, <a href="https://tryhackme.com/room/spottingphishing-aoc2025-r2g4f6s8l0">Phishing - Phishmas Greetings</a>, and <a href="https://tryhackme.com/room/yara-aoc2025-q9w1e3y5u7">YARA Rules - YARA mean one!</a>.</p><p>Across these five operational scenarios, we analyze offline password cracking mechanics &#8230;</p>
      <p>
          <a href="https://blog.farrosfr.com/p/aoc-25-days-9-13-hashcat-sentinel-xss-yara">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[AOC 25 Days 4-8: AI, IDOR, Malware Sandbox, & Nmap]]></title><description><![CDATA[Exploit BOLA/IDOR and UUIDv1 tokens, analyze Windows malware in a sandbox, enumerate hidden TCP/UDP services with Nmap, and hijack ReAct AI agents.]]></description><link>https://blog.farrosfr.com/p/aoc-25-days-4-8-ai-idor-malware-sandbox-nmap</link><guid isPermaLink="false">https://blog.farrosfr.com/p/aoc-25-days-4-8-ai-idor-malware-sandbox-nmap</guid><dc:creator><![CDATA[Mochammad Farros Fatchur Roji]]></dc:creator><pubDate>Wed, 07 Oct 2026 00:00:00 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/ac41367b-ec8d-4c34-8860-dad866f29bc4_1376x768.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="image-link image2" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!BNkE!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc9c21a5c-bebd-4144-9760-58dc9cf5a742_1376x768.png 424w, https://substackcdn.com/image/fetch/$s_!BNkE!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc9c21a5c-bebd-4144-9760-58dc9cf5a742_1376x768.png 848w, https://substackcdn.com/image/fetch/$s_!BNkE!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc9c21a5c-bebd-4144-9760-58dc9cf5a742_1376x768.png 1272w, https://substackcdn.com/image/fetch/$s_!BNkE!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc9c21a5c-bebd-4144-9760-58dc9cf5a742_1376x768.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!BNkE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc9c21a5c-bebd-4144-9760-58dc9cf5a742_1376x768.png" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c9c21a5c-bebd-4144-9760-58dc9cf5a742_1376x768.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;AOC 25 Days 4-8: AI, IDOR, Malware Sandbox, &amp; Nmap&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="AOC 25 Days 4-8: AI, IDOR, Malware Sandbox, &amp; Nmap" title="AOC 25 Days 4-8: AI, IDOR, Malware Sandbox, &amp; Nmap" srcset="https://substackcdn.com/image/fetch/$s_!BNkE!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc9c21a5c-bebd-4144-9760-58dc9cf5a742_1376x768.png 424w, https://substackcdn.com/image/fetch/$s_!BNkE!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc9c21a5c-bebd-4144-9760-58dc9cf5a742_1376x768.png 848w, https://substackcdn.com/image/fetch/$s_!BNkE!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc9c21a5c-bebd-4144-9760-58dc9cf5a742_1376x768.png 1272w, https://substackcdn.com/image/fetch/$s_!BNkE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc9c21a5c-bebd-4144-9760-58dc9cf5a742_1376x768.png 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></div><p><em>Exploit BOLA/IDOR and UUIDv1 tokens, analyze Windows malware in a sandbox, enumerate hidden TCP/UDP services with Nmap, and hijack ReAct AI agents.</em></p><p>This multi-room technical walkthrough covers Days 4 through 8 of the TryHackMe Advent of Cyber 2025 track: <a href="https://tryhackme.com/room/AIforcyber-aoc2025-y9wWQ1zRgB">AI in Security - old sAInt nick</a>, <a href="https://tryhackme.com/room/idor-aoc2025-zl6MywQid9">IDOR - Santa's Little IDOR</a>, <a href="https://tryhackme.com/room/malware-sandbox-aoc2025-SD1zn4fZQt">Malware Analysis - Egg-xecutable</a>, <a href="https://tryhackme.com/room/networkservices-aoc2025-jnsoqbxgky">Networ&#8230;</a></p>
      <p>
          <a href="https://blog.farrosfr.com/p/aoc-25-days-4-8-ai-idor-malware-sandbox-nmap">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Junior PenTester: Web Recon and Server Exploitation Guide]]></title><description><![CDATA[Manual browser inspection, OSINT and Gobuster discovery, Linux server hardening flaws, modern web stack CVEs, and IIS WebDAV shell execution.]]></description><link>https://blog.farrosfr.com/p/junior-pentester-web-recon-and-server-exploitation-guide</link><guid isPermaLink="false">https://blog.farrosfr.com/p/junior-pentester-web-recon-and-server-exploitation-guide</guid><dc:creator><![CDATA[Mochammad Farros Fatchur Roji]]></dc:creator><pubDate>Thu, 24 Sep 2026 00:00:00 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/2620f34d-5bf0-44a0-abe5-3e672a75afe1_1376x768.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><div class="image-link image2" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!WfBR!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa91aa3ae-cd1b-48fe-b47d-4998dde8fc67_1376x768.png 424w, https://substackcdn.com/image/fetch/$s_!WfBR!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa91aa3ae-cd1b-48fe-b47d-4998dde8fc67_1376x768.png 848w, https://substackcdn.com/image/fetch/$s_!WfBR!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa91aa3ae-cd1b-48fe-b47d-4998dde8fc67_1376x768.png 1272w, https://substackcdn.com/image/fetch/$s_!WfBR!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa91aa3ae-cd1b-48fe-b47d-4998dde8fc67_1376x768.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!WfBR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa91aa3ae-cd1b-48fe-b47d-4998dde8fc67_1376x768.png" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a91aa3ae-cd1b-48fe-b47d-4998dde8fc67_1376x768.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Junior PenTester: Web Recon and Server Exploitation Guide&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Junior PenTester: Web Recon and Server Exploitation Guide" title="Junior PenTester: Web Recon and Server Exploitation Guide" srcset="https://substackcdn.com/image/fetch/$s_!WfBR!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa91aa3ae-cd1b-48fe-b47d-4998dde8fc67_1376x768.png 424w, https://substackcdn.com/image/fetch/$s_!WfBR!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa91aa3ae-cd1b-48fe-b47d-4998dde8fc67_1376x768.png 848w, https://substackcdn.com/image/fetch/$s_!WfBR!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa91aa3ae-cd1b-48fe-b47d-4998dde8fc67_1376x768.png 1272w, https://substackcdn.com/image/fetch/$s_!WfBR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa91aa3ae-cd1b-48fe-b47d-4998dde8fc67_1376x768.png 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></div></figure></div><p>This field manual consolidates five TryHackMe web reconnaissance and server exploitation labs into a single offensive workflow: <a href="https://tryhackme.com/room/walkinganapplication">Walking An Application</a>, <a href="https://tryhackme.com/room/contentdiscovery">Content Discovery</a>, <a href="https://tryhackme.com/room/webstackfingerprinting">Modern Web Stacks</a>, <a href="https://tryhackme.com/jr/webserverattacks">Web Server Attacks - I</a>, and <a href="https://tryhackme.com/room/attackingiis">Web Server Attacks - II: Attacking IIS Web Servers</a>. Rather than firing noisy vulnerability scanners blind, you will inspect client-side c&#8230;</p>
      <p>
          <a href="https://blog.farrosfr.com/p/junior-pentester-web-recon-and-server-exploitation-guide">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Junior PenTester: Complete Nmap Network Scanning Guide]]></title><description><![CDATA[Complete 4-in-1 guide to TryHackMe Nmap: Live host discovery, basic and advanced port scans, OS fingerprinting, and the Nmap Scripting Engine (NSE).]]></description><link>https://blog.farrosfr.com/p/junior-pentester-complete-nmap-network-scanning-guide</link><guid isPermaLink="false">https://blog.farrosfr.com/p/junior-pentester-complete-nmap-network-scanning-guide</guid><dc:creator><![CDATA[Mochammad Farros Fatchur Roji]]></dc:creator><pubDate>Mon, 21 Sep 2026 00:00:00 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/4aefa623-743a-41dd-9f2b-f936de9cf818_1376x768.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><div class="image-link image2" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!afsl!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feab90159-df38-491b-8846-dc7776d1a212_1376x768.png 424w, https://substackcdn.com/image/fetch/$s_!afsl!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feab90159-df38-491b-8846-dc7776d1a212_1376x768.png 848w, https://substackcdn.com/image/fetch/$s_!afsl!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feab90159-df38-491b-8846-dc7776d1a212_1376x768.png 1272w, https://substackcdn.com/image/fetch/$s_!afsl!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feab90159-df38-491b-8846-dc7776d1a212_1376x768.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!afsl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feab90159-df38-491b-8846-dc7776d1a212_1376x768.png" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/eab90159-df38-491b-8846-dc7776d1a212_1376x768.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Junior PenTester: Complete Nmap Network Scanning Guide&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Junior PenTester: Complete Nmap Network Scanning Guide" title="Junior PenTester: Complete Nmap Network Scanning Guide" srcset="https://substackcdn.com/image/fetch/$s_!afsl!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feab90159-df38-491b-8846-dc7776d1a212_1376x768.png 424w, https://substackcdn.com/image/fetch/$s_!afsl!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feab90159-df38-491b-8846-dc7776d1a212_1376x768.png 848w, https://substackcdn.com/image/fetch/$s_!afsl!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feab90159-df38-491b-8846-dc7776d1a212_1376x768.png 1272w, https://substackcdn.com/image/fetch/$s_!afsl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feab90159-df38-491b-8846-dc7776d1a212_1376x768.png 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></div></figure></div><p>This 4-in-1 Mega-Guide consolidates the complete network scanning curriculum of the TryHackMe <strong>Junior Penetration Tester</strong> path. It covers four interconnected modules: <a href="https://tryhackme.com/room/nmap01">Nmap Live Host Discovery</a>, <a href="https://tryhackme.com/room/nmap02">Nmap Basic Port Scans</a>, <a href="https://tryhackme.com/room/nmap03">Nmap Advanced Port Scans</a>, and <a href="https://tryhackme.com/room/nmap04">Nmap Post Port Scans</a>.</p><p>Rather than treating host discovery, port probing, and vulnerability assessment as isolate&#8230;</p>
      <p>
          <a href="https://blog.farrosfr.com/p/junior-pentester-complete-nmap-network-scanning-guide">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Fix Firefox Dev Edition Sign-Out Loop on Shutdown]]></title><description><![CDATA[Quick fix for Firefox Developer Edition constantly logging out and disabling Sync after every browser shutdown.]]></description><link>https://blog.farrosfr.com/p/fix-firefox-dev-edition-sign-out-loop-on-shutdown</link><guid isPermaLink="false">https://blog.farrosfr.com/p/fix-firefox-dev-edition-sign-out-loop-on-shutdown</guid><dc:creator><![CDATA[Mochammad Farros Fatchur Roji]]></dc:creator><pubDate>Sun, 20 Sep 2026 00:00:00 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/5b4c8354-4271-46a9-9a1c-caba207573ac_1376x768.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><div class="image-link image2" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!uk8y!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93ee7e74-5737-4a55-9596-3696e89d45ba_1376x768.png 424w, https://substackcdn.com/image/fetch/$s_!uk8y!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93ee7e74-5737-4a55-9596-3696e89d45ba_1376x768.png 848w, https://substackcdn.com/image/fetch/$s_!uk8y!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93ee7e74-5737-4a55-9596-3696e89d45ba_1376x768.png 1272w, https://substackcdn.com/image/fetch/$s_!uk8y!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93ee7e74-5737-4a55-9596-3696e89d45ba_1376x768.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!uk8y!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93ee7e74-5737-4a55-9596-3696e89d45ba_1376x768.png" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/93ee7e74-5737-4a55-9596-3696e89d45ba_1376x768.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Fix Firefox Dev Edition Sign-Out Loop on Shutdown&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Fix Firefox Dev Edition Sign-Out Loop on Shutdown" title="Fix Firefox Dev Edition Sign-Out Loop on Shutdown" srcset="https://substackcdn.com/image/fetch/$s_!uk8y!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93ee7e74-5737-4a55-9596-3696e89d45ba_1376x768.png 424w, https://substackcdn.com/image/fetch/$s_!uk8y!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93ee7e74-5737-4a55-9596-3696e89d45ba_1376x768.png 848w, https://substackcdn.com/image/fetch/$s_!uk8y!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93ee7e74-5737-4a55-9596-3696e89d45ba_1376x768.png 1272w, https://substackcdn.com/image/fetch/$s_!uk8y!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93ee7e74-5737-4a55-9596-3696e89d45ba_1376x768.png 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></div></figure></div><p>If you use Firefox Developer Edition, you may have run into an irritating loop: every time you close Firefox or reboot your computer, your Mozilla account is signed out, Firefox Sync is turned off, and an orange warning icon appears on your profile avatar.</p><p>Even if you sign back in, the moment Firefox restarts, you are greeted with the same prompt:</p><div class="captioned-image-container"><figure><div class="image-link image2" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!D0f0!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a2019bf-1943-41dd-a121-62540be136d3_1024x640.png 424w, https://substackcdn.com/image/fetch/$s_!D0f0!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a2019bf-1943-41dd-a121-62540be136d3_1024x640.png 848w, https://substackcdn.com/image/fetch/$s_!D0f0!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a2019bf-1943-41dd-a121-62540be136d3_1024x640.png 1272w, https://substackcdn.com/image/fetch/$s_!D0f0!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a2019bf-1943-41dd-a121-62540be136d3_1024x640.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!D0f0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a2019bf-1943-41dd-a121-62540be136d3_1024x640.png" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3a2019bf-1943-41dd-a121-62540be136d3_1024x640.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Firefox Developer Edition sign-out prompt&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Firefox Developer Edition sign-out prompt" title="Firefox Developer Edition sign-out prompt" srcset="https://substackcdn.com/image/fetch/$s_!D0f0!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a2019bf-1943-41dd-a121-62540be136d3_1024x640.png 424w, https://substackcdn.com/image/fetch/$s_!D0f0!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a2019bf-1943-41dd-a121-62540be136d3_1024x640.png 848w, https://substackcdn.com/image/fetch/$s_!D0f0!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a2019bf-1943-41dd-a121-62540be136d3_1024x640.png 1272w, https://substackcdn.com/image/fetch/$s_!D0f0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a2019bf-1943-41dd-a121-62540be136d3_1024x640.png 1456w" sizes="100vw"></picture><div></div></div></div></figure></div><p>Here is what causes this behavior and how to fix it in two minutes.</p><div><hr></div><h2>Why It Happens</h2><p>In recent Developer Edition builds, Mozilla has been testing a new Rust-based password and credential storage engine.</p><p>When enabled, Firefox's credential manager (<code>storage-rust.sys.mjs</code>) can fail during early startup initialization with an internal <code>NS_ERROR_ABORT</code>. Firefox translates this abort into a false <code>Primary password locked</code> error&#8212;<strong>even if you have never set or enabled a Primary Password</strong>.</p><p>Because the browser believes its credential storage is locked, it fails to retrieve your stored OAuth sync keys on boot, invalidates the local session, and forces a sign-out.</p><div><hr></div><h2>Step 1: Disable Rust Storage in <code>about:config</code></h2><p>Reverting to Firefox's stable, classic credential storage engine resolves the false lock immediately.</p><ol><li><p>Open a new tab and navigate to <code>about:config</code>.</p></li><li><p>Click <strong>Accept the Risk and Continue</strong>.</p></li><li><p>In the search bar, search for:</p><pre><code>signon.storage.rust.active
</code></pre></li><li><p>Double-click the preference to set its value to <strong><code>false</code></strong>.</p></li></ol><div class="captioned-image-container"><figure><div class="image-link image2" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!DzR_!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c1b4108-e6b7-4667-98fe-087ea0d476eb_1024x640.png 424w, https://substackcdn.com/image/fetch/$s_!DzR_!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c1b4108-e6b7-4667-98fe-087ea0d476eb_1024x640.png 848w, https://substackcdn.com/image/fetch/$s_!DzR_!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c1b4108-e6b7-4667-98fe-087ea0d476eb_1024x640.png 1272w, https://substackcdn.com/image/fetch/$s_!DzR_!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c1b4108-e6b7-4667-98fe-087ea0d476eb_1024x640.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!DzR_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c1b4108-e6b7-4667-98fe-087ea0d476eb_1024x640.png" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0c1b4108-e6b7-4667-98fe-087ea0d476eb_1024x640.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Disabling signon.storage.rust.active in about:config&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&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="Disabling signon.storage.rust.active in about:config" title="Disabling signon.storage.rust.active in about:config" srcset="https://substackcdn.com/image/fetch/$s_!DzR_!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c1b4108-e6b7-4667-98fe-087ea0d476eb_1024x640.png 424w, https://substackcdn.com/image/fetch/$s_!DzR_!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c1b4108-e6b7-4667-98fe-087ea0d476eb_1024x640.png 848w, https://substackcdn.com/image/fetch/$s_!DzR_!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c1b4108-e6b7-4667-98fe-087ea0d476eb_1024x640.png 1272w, https://substackcdn.com/image/fetch/$s_!DzR_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c1b4108-e6b7-4667-98fe-087ea0d476eb_1024x640.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></div></figure></div><p><em>(Optional: If <code>signon.storage.rust.enabled</code> also appears in your search results and is set to <code>true</code>, double-click it to set it to <code>false</code> as well.)</em></p><div><hr></div><h2>Step 2: Remove Zombie Duplicate Sessions</h2><p>Because Firefox registered a new device profile each time you attempted to sign back in, your Mozilla account likely has multiple stale duplicate sessions.</p><ol><li><p>Go to <a href="https://accounts.firefox.com/settings#connected-services">accounts.firefox.com/settings#connected-services</a>.</p></li><li><p>Under <strong>Connected Services</strong>, look for duplicate entries named <code>Firefox Developer Edition</code>.</p></li><li><p>Click <strong>Sign out</strong> next to the stale duplicates to clean up your session registry.</p></li></ol><div><hr></div><h2>Step 3: Sign In and Verify</h2><ol><li><p>Click the <strong>Profile Avatar</strong> in the top-right corner of Firefox.</p></li><li><p>Click <strong>Sign in to sync</strong> and complete your authentication.</p></li><li><p>Once connected, your avatar will return to normal with no warning badges.</p></li><li><p>Completely close Firefox Developer Edition (<code>Ctrl + Shift + Q</code> on Windows/Linux or <code>Cmd + Q</code> on macOS) and reopen it.</p></li></ol><div class="captioned-image-container"><figure><div class="image-link image2" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!O-Ng!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e3c12c6-c21b-41f4-be2a-4c66f81c0d6e_1024x640.png 424w, https://substackcdn.com/image/fetch/$s_!O-Ng!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e3c12c6-c21b-41f4-be2a-4c66f81c0d6e_1024x640.png 848w, https://substackcdn.com/image/fetch/$s_!O-Ng!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e3c12c6-c21b-41f4-be2a-4c66f81c0d6e_1024x640.png 1272w, https://substackcdn.com/image/fetch/$s_!O-Ng!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e3c12c6-c21b-41f4-be2a-4c66f81c0d6e_1024x640.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!O-Ng!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e3c12c6-c21b-41f4-be2a-4c66f81c0d6e_1024x640.png" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8e3c12c6-c21b-41f4-be2a-4c66f81c0d6e_1024x640.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Clean connected status in Firefox Accounts&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&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="Clean connected status in Firefox Accounts" title="Clean connected status in Firefox Accounts" srcset="https://substackcdn.com/image/fetch/$s_!O-Ng!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e3c12c6-c21b-41f4-be2a-4c66f81c0d6e_1024x640.png 424w, https://substackcdn.com/image/fetch/$s_!O-Ng!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e3c12c6-c21b-41f4-be2a-4c66f81c0d6e_1024x640.png 848w, https://substackcdn.com/image/fetch/$s_!O-Ng!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e3c12c6-c21b-41f4-be2a-4c66f81c0d6e_1024x640.png 1272w, https://substackcdn.com/image/fetch/$s_!O-Ng!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e3c12c6-c21b-41f4-be2a-4c66f81c0d6e_1024x640.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></div></figure></div><p>Your account will remain signed in, and Firefox Sync will persist across restarts.</p>]]></content:encoded></item><item><title><![CDATA[Junior PenTester: Network Recon & Protocol Exploitation]]></title><description><![CDATA[Complete 4-in-1 guide to TryHackMe Jr PenTester network fundamentals: Passive OSINT, Active Probing, Cleartext State Machines, and Network Sniffing & TLS.]]></description><link>https://blog.farrosfr.com/p/junior-pentester-network-recon-protocol-exploitation</link><guid isPermaLink="false">https://blog.farrosfr.com/p/junior-pentester-network-recon-protocol-exploitation</guid><dc:creator><![CDATA[Mochammad Farros Fatchur Roji]]></dc:creator><pubDate>Sat, 29 Aug 2026 00:00:00 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/765ea8bf-0560-4b55-9c2b-df68b75ea6c3_1200x675.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><div class="image-link image2" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!FVAq!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F757900a6-94db-4777-80a1-b81fc7c260b2_1200x675.png 424w, https://substackcdn.com/image/fetch/$s_!FVAq!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F757900a6-94db-4777-80a1-b81fc7c260b2_1200x675.png 848w, https://substackcdn.com/image/fetch/$s_!FVAq!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F757900a6-94db-4777-80a1-b81fc7c260b2_1200x675.png 1272w, https://substackcdn.com/image/fetch/$s_!FVAq!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F757900a6-94db-4777-80a1-b81fc7c260b2_1200x675.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!FVAq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F757900a6-94db-4777-80a1-b81fc7c260b2_1200x675.png" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/757900a6-94db-4777-80a1-b81fc7c260b2_1200x675.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Junior PenTester: Network Recon &amp; Protocol Exploitation&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Junior PenTester: Network Recon &amp; Protocol Exploitation" title="Junior PenTester: Network Recon &amp; Protocol Exploitation" srcset="https://substackcdn.com/image/fetch/$s_!FVAq!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F757900a6-94db-4777-80a1-b81fc7c260b2_1200x675.png 424w, https://substackcdn.com/image/fetch/$s_!FVAq!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F757900a6-94db-4777-80a1-b81fc7c260b2_1200x675.png 848w, https://substackcdn.com/image/fetch/$s_!FVAq!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F757900a6-94db-4777-80a1-b81fc7c260b2_1200x675.png 1272w, https://substackcdn.com/image/fetch/$s_!FVAq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F757900a6-94db-4777-80a1-b81fc7c260b2_1200x675.png 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></div></figure></div><p>This 4-in-1 Mega-Guide synthesizes the core networking foundation of the TryHackMe <strong>Junior Penetration Tester</strong> path. It covers four interconnected modules: <a href="https://tryhackme.com/room/passiverecon">Passive Reconnaissance</a>, <a href="https://tryhackme.com/room/activerecon">Active Reconnaissance</a>, <a href="https://tryhackme.com/room/protocolsandservers">Protocols and Servers</a>, and <a href="https://tryhackme.com/room/protocolsandservers2">Protocols and Servers 2</a>.</p><p>Rather than treating these as disconnected labs, this blueprint maps out the complete progression from &#8230;</p>
      <p>
          <a href="https://blog.farrosfr.com/p/junior-pentester-network-recon-protocol-exploitation">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Report Writing for SOC L2 | TryHackMe Write-up]]></title><description><![CDATA[Complete walkthrough for TryHackMe Report Writing for SOC L2. Master executive summaries, DFIR handover notes, and client incident reporting.]]></description><link>https://blog.farrosfr.com/p/report-writing-for-soc-l2-tryhackme-write-up</link><guid isPermaLink="false">https://blog.farrosfr.com/p/report-writing-for-soc-l2-tryhackme-write-up</guid><dc:creator><![CDATA[Mochammad Farros Fatchur Roji]]></dc:creator><pubDate>Sat, 15 Aug 2026 00:00:00 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/decf430c-cdf3-48a8-a422-e9b904df13c8_1376x768.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><div class="image-link image2" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!0X-M!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F744031ad-43db-483c-af34-48266d6442eb_1376x768.png 424w, https://substackcdn.com/image/fetch/$s_!0X-M!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F744031ad-43db-483c-af34-48266d6442eb_1376x768.png 848w, https://substackcdn.com/image/fetch/$s_!0X-M!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F744031ad-43db-483c-af34-48266d6442eb_1376x768.png 1272w, https://substackcdn.com/image/fetch/$s_!0X-M!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F744031ad-43db-483c-af34-48266d6442eb_1376x768.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!0X-M!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F744031ad-43db-483c-af34-48266d6442eb_1376x768.png" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/744031ad-43db-483c-af34-48266d6442eb_1376x768.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Report Writing for SOC L2 | TryHackMe Write-up&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Report Writing for SOC L2 | TryHackMe Write-up" title="Report Writing for SOC L2 | TryHackMe Write-up" srcset="https://substackcdn.com/image/fetch/$s_!0X-M!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F744031ad-43db-483c-af34-48266d6442eb_1376x768.png 424w, https://substackcdn.com/image/fetch/$s_!0X-M!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F744031ad-43db-483c-af34-48266d6442eb_1376x768.png 848w, https://substackcdn.com/image/fetch/$s_!0X-M!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F744031ad-43db-483c-af34-48266d6442eb_1376x768.png 1272w, https://substackcdn.com/image/fetch/$s_!0X-M!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F744031ad-43db-483c-af34-48266d6442eb_1376x768.png 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></div></figure></div><p>This is my write-up for the TryHackMe room on <a href="https://tryhackme.com/room/reportwritingsocl2">Report Writing for SOC L2</a>. Written in 2026, I hope this write-up helps others learn and practice cybersecurity.</p><h2>Task 1: Introduction</h2><p>Moving into an L2 SOC analyst role means communicating findings outside the internal queue. L1 analysts log ticket notes; L2 analysts write structured incident summaries for lead&#8230;</p>
      <p>
          <a href="https://blog.farrosfr.com/p/report-writing-for-soc-l2-tryhackme-write-up">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[SOC L2 Alert Triage | TryHackMe Write-up]]></title><description><![CDATA[Complete walkthrough for the TryHackMe SOC L2 Alert Triage room. Learn advanced SOC level 2 incident investigation and alert analysis.]]></description><link>https://blog.farrosfr.com/p/soc-l2-alert-triage-tryhackme-write-up</link><guid isPermaLink="false">https://blog.farrosfr.com/p/soc-l2-alert-triage-tryhackme-write-up</guid><dc:creator><![CDATA[Mochammad Farros Fatchur Roji]]></dc:creator><pubDate>Sat, 15 Aug 2026 00:00:00 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/38c93b40-74c5-486d-b8e9-6202d0b8562a_1376x768.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><div class="image-link image2" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!9SMR!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6950115-9906-4f48-bdf1-1d968e97c09e_1376x768.png 424w, https://substackcdn.com/image/fetch/$s_!9SMR!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6950115-9906-4f48-bdf1-1d968e97c09e_1376x768.png 848w, https://substackcdn.com/image/fetch/$s_!9SMR!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6950115-9906-4f48-bdf1-1d968e97c09e_1376x768.png 1272w, https://substackcdn.com/image/fetch/$s_!9SMR!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6950115-9906-4f48-bdf1-1d968e97c09e_1376x768.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!9SMR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6950115-9906-4f48-bdf1-1d968e97c09e_1376x768.png" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d6950115-9906-4f48-bdf1-1d968e97c09e_1376x768.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;SOC L2 Alert Triage | TryHackMe Write-up&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="SOC L2 Alert Triage | TryHackMe Write-up" title="SOC L2 Alert Triage | TryHackMe Write-up" srcset="https://substackcdn.com/image/fetch/$s_!9SMR!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6950115-9906-4f48-bdf1-1d968e97c09e_1376x768.png 424w, https://substackcdn.com/image/fetch/$s_!9SMR!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6950115-9906-4f48-bdf1-1d968e97c09e_1376x768.png 848w, https://substackcdn.com/image/fetch/$s_!9SMR!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6950115-9906-4f48-bdf1-1d968e97c09e_1376x768.png 1272w, https://substackcdn.com/image/fetch/$s_!9SMR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6950115-9906-4f48-bdf1-1d968e97c09e_1376x768.png 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></div></figure></div><p>This is my write-up for the TryHackMe room on <a href="https://tryhackme.com/room/socl2alerttriage">SOC L2 Alert Triage</a>. Written in 2026, I hope this write-up helps others learn and practice cybersecurity.</p><h2>Task 1: Introduction</h2><p>The SOC Level 2 role centers on investigating escalated alerts and managing active incidents. While L1 analysts focus on initial alert review and SLA metrics, L2 analysts dive deeper i&#8230;</p>
      <p>
          <a href="https://blog.farrosfr.com/p/soc-l2-alert-triage-tryhackme-write-up">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Man vs. Himself | Chapter 1]]></title><description><![CDATA[Do your best today, do better tomorrow]]></description><link>https://blog.farrosfr.com/p/man-vs-himself-chapter-1</link><guid isPermaLink="false">https://blog.farrosfr.com/p/man-vs-himself-chapter-1</guid><dc:creator><![CDATA[Mochammad Farros Fatchur Roji]]></dc:creator><pubDate>Sun, 09 Aug 2026 00:15:21 GMT</pubDate><enclosure url="https://images.unsplash.com/photo-1580136579312-94651dfd596d?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwxfHxhJTIwcGFpbnRpbmclMjBvZiUyMGElMjBncm91cCUyMG9mJTIwbWVuJTIwb24lMjBob3JzZXN8ZW58MHx8fHwxNzg2MjM0MzA1fDA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://images.unsplash.com/photo-1580136579312-94651dfd596d?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwxfHxhJTIwcGFpbnRpbmclMjBvZiUyMGElMjBncm91cCUyMG9mJTIwbWVuJTIwb24lMjBob3JzZXN8ZW58MHx8fHwxNzg2MjM0MzA1fDA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://images.unsplash.com/photo-1580136579312-94651dfd596d?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwxfHxhJTIwcGFpbnRpbmclMjBvZiUyMGElMjBncm91cCUyMG9mJTIwbWVuJTIwb24lMjBob3JzZXN8ZW58MHx8fHwxNzg2MjM0MzA1fDA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080 424w, https://images.unsplash.com/photo-1580136579312-94651dfd596d?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwxfHxhJTIwcGFpbnRpbmclMjBvZiUyMGElMjBncm91cCUyMG9mJTIwbWVuJTIwb24lMjBob3JzZXN8ZW58MHx8fHwxNzg2MjM0MzA1fDA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080 848w, https://images.unsplash.com/photo-1580136579312-94651dfd596d?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwxfHxhJTIwcGFpbnRpbmclMjBvZiUyMGElMjBncm91cCUyMG9mJTIwbWVuJTIwb24lMjBob3JzZXN8ZW58MHx8fHwxNzg2MjM0MzA1fDA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080 1272w, https://images.unsplash.com/photo-1580136579312-94651dfd596d?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwxfHxhJTIwcGFpbnRpbmclMjBvZiUyMGElMjBncm91cCUyMG9mJTIwbWVuJTIwb24lMjBob3JzZXN8ZW58MHx8fHwxNzg2MjM0MzA1fDA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080 1456w" sizes="100vw"><img src="https://images.unsplash.com/photo-1580136579312-94651dfd596d?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwxfHxhJTIwcGFpbnRpbmclMjBvZiUyMGElMjBncm91cCUyMG9mJTIwbWVuJTIwb24lMjBob3JzZXN8ZW58MHx8fHwxNzg2MjM0MzA1fDA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080" width="3003" height="1714" data-attrs="{&quot;src&quot;:&quot;https://images.unsplash.com/photo-1580136579312-94651dfd596d?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwxfHxhJTIwcGFpbnRpbmclMjBvZiUyMGElMjBncm91cCUyMG9mJTIwbWVuJTIwb24lMjBob3JzZXN8ZW58MHx8fHwxNzg2MjM0MzA1fDA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1714,&quot;width&quot;:3003,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;a painting of a group of men on horses&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="a painting of a group of men on horses" title="a painting of a group of men on horses" srcset="https://images.unsplash.com/photo-1580136579312-94651dfd596d?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwxfHxhJTIwcGFpbnRpbmclMjBvZiUyMGElMjBncm91cCUyMG9mJTIwbWVuJTIwb24lMjBob3JzZXN8ZW58MHx8fHwxNzg2MjM0MzA1fDA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080 424w, https://images.unsplash.com/photo-1580136579312-94651dfd596d?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwxfHxhJTIwcGFpbnRpbmclMjBvZiUyMGElMjBncm91cCUyMG9mJTIwbWVuJTIwb24lMjBob3JzZXN8ZW58MHx8fHwxNzg2MjM0MzA1fDA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080 848w, https://images.unsplash.com/photo-1580136579312-94651dfd596d?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwxfHxhJTIwcGFpbnRpbmclMjBvZiUyMGElMjBncm91cCUyMG9mJTIwbWVuJTIwb24lMjBob3JzZXN8ZW58MHx8fHwxNzg2MjM0MzA1fDA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080 1272w, https://images.unsplash.com/photo-1580136579312-94651dfd596d?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwxfHxhJTIwcGFpbnRpbmclMjBvZiUyMGElMjBncm91cCUyMG9mJTIwbWVuJTIwb24lMjBob3JzZXN8ZW58MHx8fHwxNzg2MjM0MzA1fDA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080 1456w" sizes="100vw" fetchpriority="high"></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 buttonBase-GK1x3M"><svg aria-hidden="true" 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" class="icon-noB79L"><g><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 buttonBase-GK1x3M"><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 icon-noB79L"><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><figcaption class="image-caption">Photo by <a href="https://unsplash.com/@birminghammuseumstrust">Birmingham Museums Trust</a> on <a href="https://unsplash.com">Unsplash</a></figcaption></figure></div><p>It almost feels easy to blame others for something that you fail at, blame nearby people, or yet, while you have to decide the things you need to do.</p><p>You are searching for who must be responsible for your failure, instead of getting focused on being a better person than yesterday. Something that I realize, because the goal is very simple.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.farrosfr.com/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">Farros FR is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</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><p>You just need to be better than yourself yesterday, do your best today, and then do better tomorrow. I will start trying to do math for a real example.</p><p>The example is you are trying to do regular push-ups today, so how many should you do? You just need to do 1 push-up, yes just one push-up. And for tomorrow, let's say you do 2 push-ups; you just need to add 1 each day.</p><p>In the gym, maybe we can call this "progressive overload."</p><p>So how about in one quarter? You will do approximately 90 push-ups. How about 6 months, and how about 1 year?</p><p>365 push-ups</p><p>How many total regular push-ups do you do in just one year?</p><p>If it happens to be a 366-day leap year, the final total would be 67,161 push-ups.</p><p>That is just push-ups; I prefer to choose that because we can do it more easily, even just in the bedroom or another place.</p><p>How about other things? Maybe writing? You just need to change the 1 push-up to a word.</p><p>I think it will be even more possible that in one year you can create more than 67,161 words originally.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.farrosfr.com/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">Farros FR is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</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[Complimentary | TryHackMe Write-up]]></title><description><![CDATA[Complete walkthrough for the TryHackMe Complimentary room. Uncover AWS Cognito IAM misconfigurations and extract guest records from DynamoDB.]]></description><link>https://blog.farrosfr.com/p/complimentary-tryhackme-write-up</link><guid isPermaLink="false">https://blog.farrosfr.com/p/complimentary-tryhackme-write-up</guid><dc:creator><![CDATA[Mochammad Farros Fatchur Roji]]></dc:creator><pubDate>Wed, 05 Aug 2026 00:00:00 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/50f523f5-0ac3-43f5-81ab-ad74d1150ee4_1376x768.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><div class="image-link image2" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!dR3a!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94ba618c-d1b2-4560-8d8e-d2a48ddbcd1e_1376x768.png 424w, https://substackcdn.com/image/fetch/$s_!dR3a!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94ba618c-d1b2-4560-8d8e-d2a48ddbcd1e_1376x768.png 848w, https://substackcdn.com/image/fetch/$s_!dR3a!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94ba618c-d1b2-4560-8d8e-d2a48ddbcd1e_1376x768.png 1272w, https://substackcdn.com/image/fetch/$s_!dR3a!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94ba618c-d1b2-4560-8d8e-d2a48ddbcd1e_1376x768.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!dR3a!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94ba618c-d1b2-4560-8d8e-d2a48ddbcd1e_1376x768.png" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/94ba618c-d1b2-4560-8d8e-d2a48ddbcd1e_1376x768.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Complimentary | TryHackMe Write-up&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Complimentary | TryHackMe Write-up" title="Complimentary | TryHackMe Write-up" srcset="https://substackcdn.com/image/fetch/$s_!dR3a!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94ba618c-d1b2-4560-8d8e-d2a48ddbcd1e_1376x768.png 424w, https://substackcdn.com/image/fetch/$s_!dR3a!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94ba618c-d1b2-4560-8d8e-d2a48ddbcd1e_1376x768.png 848w, https://substackcdn.com/image/fetch/$s_!dR3a!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94ba618c-d1b2-4560-8d8e-d2a48ddbcd1e_1376x768.png 1272w, https://substackcdn.com/image/fetch/$s_!dR3a!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94ba618c-d1b2-4560-8d8e-d2a48ddbcd1e_1376x768.png 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></div></figure></div><p>This is my write-up for the TryHackMe room on <a href="https://tryhackme.com/room/hh-complimentary-05e0b604">Complimentary</a>. Written in 2026, I hope this write-up helps others learn and practice cybersecurity.</p><h2>Task 1: Complimentary</h2><p>The Byte Lotus Wellness web application (<code>http://complimentary-wellness-app-332173347248.s3-website-us-east-1.amazonaws.com/</code>) delivers a login-free experience that automatically recognizes u&#8230;</p>
      <p>
          <a href="https://blog.farrosfr.com/p/complimentary-tryhackme-write-up">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Packed Light | TryHackMe Write-up]]></title><description><![CDATA[Complete walkthrough for TryHackMe Packed Light room. Analyze network PCAPs, decode covert HTTP traffic, and reassemble exfiltrated data.]]></description><link>https://blog.farrosfr.com/p/packed-light-tryhackme-write-up</link><guid isPermaLink="false">https://blog.farrosfr.com/p/packed-light-tryhackme-write-up</guid><dc:creator><![CDATA[Mochammad Farros Fatchur Roji]]></dc:creator><pubDate>Wed, 05 Aug 2026 00:00:00 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/42ba98f9-c118-4800-9e7c-a265f00ccd85_1376x768.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><div class="image-link image2" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!BvtG!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b1c7012-8b55-45c1-bfd3-3305e9c06d2f_1376x768.png 424w, https://substackcdn.com/image/fetch/$s_!BvtG!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b1c7012-8b55-45c1-bfd3-3305e9c06d2f_1376x768.png 848w, https://substackcdn.com/image/fetch/$s_!BvtG!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b1c7012-8b55-45c1-bfd3-3305e9c06d2f_1376x768.png 1272w, https://substackcdn.com/image/fetch/$s_!BvtG!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b1c7012-8b55-45c1-bfd3-3305e9c06d2f_1376x768.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!BvtG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b1c7012-8b55-45c1-bfd3-3305e9c06d2f_1376x768.png" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1b1c7012-8b55-45c1-bfd3-3305e9c06d2f_1376x768.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Packed Light | TryHackMe Write-up&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Packed Light | TryHackMe Write-up" title="Packed Light | TryHackMe Write-up" srcset="https://substackcdn.com/image/fetch/$s_!BvtG!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b1c7012-8b55-45c1-bfd3-3305e9c06d2f_1376x768.png 424w, https://substackcdn.com/image/fetch/$s_!BvtG!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b1c7012-8b55-45c1-bfd3-3305e9c06d2f_1376x768.png 848w, https://substackcdn.com/image/fetch/$s_!BvtG!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b1c7012-8b55-45c1-bfd3-3305e9c06d2f_1376x768.png 1272w, https://substackcdn.com/image/fetch/$s_!BvtG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b1c7012-8b55-45c1-bfd3-3305e9c06d2f_1376x768.png 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></div></figure></div><p>This is my write-up for the TryHackMe room on <a href="https://tryhackme.com/room/hh-packedlight-02e5330c">Packed Light</a>. Written in 2026, I hope this write-up helps others learn and practice cybersecurity.</p><h2>Task 1: Packed Light</h2><p>The Packed Light room challenges analysts to investigate suspicious network traffic captured from a hotel guest network (<code>traffic.pcapng</code>). The capture shows an infected host regularly beaconin&#8230;</p>
      <p>
          <a href="https://blog.farrosfr.com/p/packed-light-tryhackme-write-up">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Room 404 | TryHackMe Write-up]]></title><description><![CDATA[Walkthrough for Room 404 TryHackMe room. Discover an exposed .git directory via web enumeration, dump the repository, and extract the hidden flag.]]></description><link>https://blog.farrosfr.com/p/room-404-tryhackme-write-up</link><guid isPermaLink="false">https://blog.farrosfr.com/p/room-404-tryhackme-write-up</guid><dc:creator><![CDATA[Mochammad Farros Fatchur Roji]]></dc:creator><pubDate>Thu, 30 Jul 2026 00:00:00 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/54d6ed8d-c6f2-4c0e-a0cd-4e11bac815bb_1376x768.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><div class="image-link image2" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!WqRV!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b339324-b4ba-4003-a4fb-28ec86088963_1376x768.png 424w, https://substackcdn.com/image/fetch/$s_!WqRV!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b339324-b4ba-4003-a4fb-28ec86088963_1376x768.png 848w, https://substackcdn.com/image/fetch/$s_!WqRV!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b339324-b4ba-4003-a4fb-28ec86088963_1376x768.png 1272w, https://substackcdn.com/image/fetch/$s_!WqRV!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b339324-b4ba-4003-a4fb-28ec86088963_1376x768.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!WqRV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b339324-b4ba-4003-a4fb-28ec86088963_1376x768.png" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9b339324-b4ba-4003-a4fb-28ec86088963_1376x768.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Room 404 | TryHackMe Write-up&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Room 404 | TryHackMe Write-up" title="Room 404 | TryHackMe Write-up" srcset="https://substackcdn.com/image/fetch/$s_!WqRV!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b339324-b4ba-4003-a4fb-28ec86088963_1376x768.png 424w, https://substackcdn.com/image/fetch/$s_!WqRV!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b339324-b4ba-4003-a4fb-28ec86088963_1376x768.png 848w, https://substackcdn.com/image/fetch/$s_!WqRV!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b339324-b4ba-4003-a4fb-28ec86088963_1376x768.png 1272w, https://substackcdn.com/image/fetch/$s_!WqRV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b339324-b4ba-4003-a4fb-28ec86088963_1376x768.png 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></div></figure></div><p>This is my complete walkthrough for the <a href="https://tryhackme.com/room/hh-room404-804573bf">Room 404</a> room on TryHackMe (Hacker Holidays Day 2). In this challenge, we perform directory enumeration against an unlisted web application hosted on port 8080, locate an exposed <code>.git</code> version control repository, dump the source code, and recover the flag.</p>
      <p>
          <a href="https://blog.farrosfr.com/p/room-404-tryhackme-write-up">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[The Concierge Knows Too Much | TryHackMe Write-up]]></title><description><![CDATA[Walkthrough for The Concierge Knows Too Much TryHackMe room. Bypass VERA's AI prompt guardrails using persona impersonation to extract the escalation flag.]]></description><link>https://blog.farrosfr.com/p/the-concierge-knows-too-much-tryhackme-write-up</link><guid isPermaLink="false">https://blog.farrosfr.com/p/the-concierge-knows-too-much-tryhackme-write-up</guid><dc:creator><![CDATA[Mochammad Farros Fatchur Roji]]></dc:creator><pubDate>Thu, 30 Jul 2026 00:00:00 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/851332ca-940a-4700-ab1f-945fc1fdb021_1376x768.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><div class="image-link image2" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!xzMs!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f82d97a-8ac3-4bdd-bb85-7e5f6ccbccd0_1376x768.png 424w, https://substackcdn.com/image/fetch/$s_!xzMs!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f82d97a-8ac3-4bdd-bb85-7e5f6ccbccd0_1376x768.png 848w, https://substackcdn.com/image/fetch/$s_!xzMs!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f82d97a-8ac3-4bdd-bb85-7e5f6ccbccd0_1376x768.png 1272w, https://substackcdn.com/image/fetch/$s_!xzMs!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f82d97a-8ac3-4bdd-bb85-7e5f6ccbccd0_1376x768.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!xzMs!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f82d97a-8ac3-4bdd-bb85-7e5f6ccbccd0_1376x768.png" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3f82d97a-8ac3-4bdd-bb85-7e5f6ccbccd0_1376x768.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;The Concierge Knows Too Much | TryHackMe Write-up&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="The Concierge Knows Too Much | TryHackMe Write-up" title="The Concierge Knows Too Much | TryHackMe Write-up" srcset="https://substackcdn.com/image/fetch/$s_!xzMs!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f82d97a-8ac3-4bdd-bb85-7e5f6ccbccd0_1376x768.png 424w, https://substackcdn.com/image/fetch/$s_!xzMs!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f82d97a-8ac3-4bdd-bb85-7e5f6ccbccd0_1376x768.png 848w, https://substackcdn.com/image/fetch/$s_!xzMs!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f82d97a-8ac3-4bdd-bb85-7e5f6ccbccd0_1376x768.png 1272w, https://substackcdn.com/image/fetch/$s_!xzMs!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f82d97a-8ac3-4bdd-bb85-7e5f6ccbccd0_1376x768.png 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></div></figure></div><p>This is my complete walkthrough for <a href="https://tryhackme.com/room/hh-theconciergeknows-2d7eb4d9">The Concierge Knows Too Much</a> room on TryHackMe (Hacker Holidays Day 1). In this challenge, we analyze VERA (Very Efficient Resort Assistant), an AI concierge bot protecting an internal escalation code, and bypass its safety system instructions through prompt injection and persona impersonation.</p>
      <p>
          <a href="https://blog.farrosfr.com/p/the-concierge-knows-too-much-tryhackme-write-up">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Intro to Cloud Security | TryHackMe Write-up]]></title><description><![CDATA[Complete walkthrough for the Intro to Cloud Security TryHackMe room.]]></description><link>https://blog.farrosfr.com/p/intro-to-cloud-security-tryhackme-write-up</link><guid isPermaLink="false">https://blog.farrosfr.com/p/intro-to-cloud-security-tryhackme-write-up</guid><dc:creator><![CDATA[Mochammad Farros Fatchur Roji]]></dc:creator><pubDate>Mon, 27 Jul 2026 00:00:00 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/42589c7b-20c3-4271-b1fa-eb30a9d43c3d_1376x768.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="image-link image2" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!zDMd!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F769c146e-b521-40a9-bdac-caf008cfc31d_1376x768.png 424w, https://substackcdn.com/image/fetch/$s_!zDMd!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F769c146e-b521-40a9-bdac-caf008cfc31d_1376x768.png 848w, https://substackcdn.com/image/fetch/$s_!zDMd!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F769c146e-b521-40a9-bdac-caf008cfc31d_1376x768.png 1272w, https://substackcdn.com/image/fetch/$s_!zDMd!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F769c146e-b521-40a9-bdac-caf008cfc31d_1376x768.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!zDMd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F769c146e-b521-40a9-bdac-caf008cfc31d_1376x768.png" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/769c146e-b521-40a9-bdac-caf008cfc31d_1376x768.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Intro to Cloud Security | TryHackMe Write-up&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Intro to Cloud Security | TryHackMe Write-up" title="Intro to Cloud Security | TryHackMe Write-up" srcset="https://substackcdn.com/image/fetch/$s_!zDMd!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F769c146e-b521-40a9-bdac-caf008cfc31d_1376x768.png 424w, https://substackcdn.com/image/fetch/$s_!zDMd!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F769c146e-b521-40a9-bdac-caf008cfc31d_1376x768.png 848w, https://substackcdn.com/image/fetch/$s_!zDMd!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F769c146e-b521-40a9-bdac-caf008cfc31d_1376x768.png 1272w, https://substackcdn.com/image/fetch/$s_!zDMd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F769c146e-b521-40a9-bdac-caf008cfc31d_1376x768.png 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></div><p><em>Complete walkthrough for the Intro to Cloud Security TryHackMe room. Learn cloud delivery models, security risks, IAM, networking, storage, and policies.</em></p><p>This is my complete walkthrough and write-up for the <a href="https://tryhackme.com/room/introductiontocloudsecurityc6">Intro to Cloud Security</a> room on TryHackMe. In this room, we examine core cloud deployment models, shared responsibility frameworks, data lifecycles, &#8230;</p>
      <p>
          <a href="https://blog.farrosfr.com/p/intro-to-cloud-security-tryhackme-write-up">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[OWASP API Security Top 10 - 1 | TryHackMe Write-up]]></title><description><![CDATA[Walkthrough for OWASP API Security Top 10 - Part 1 TryHackMe room.]]></description><link>https://blog.farrosfr.com/p/owasp-api-security-top-10-1-tryhackme-write-up</link><guid isPermaLink="false">https://blog.farrosfr.com/p/owasp-api-security-top-10-1-tryhackme-write-up</guid><dc:creator><![CDATA[Mochammad Farros Fatchur Roji]]></dc:creator><pubDate>Mon, 27 Jul 2026 00:00:00 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/e8a13fd6-4694-48d0-83b3-8b5bc1a5f6ff_1376x768.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="image-link image2" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Htsz!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0fff1352-057a-4a5c-987f-01d74ffed93c_1376x768.png 424w, https://substackcdn.com/image/fetch/$s_!Htsz!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0fff1352-057a-4a5c-987f-01d74ffed93c_1376x768.png 848w, https://substackcdn.com/image/fetch/$s_!Htsz!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0fff1352-057a-4a5c-987f-01d74ffed93c_1376x768.png 1272w, https://substackcdn.com/image/fetch/$s_!Htsz!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0fff1352-057a-4a5c-987f-01d74ffed93c_1376x768.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Htsz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0fff1352-057a-4a5c-987f-01d74ffed93c_1376x768.png" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0fff1352-057a-4a5c-987f-01d74ffed93c_1376x768.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;OWASP API Security Top 10 - 1 | TryHackMe Write-up&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="OWASP API Security Top 10 - 1 | TryHackMe Write-up" title="OWASP API Security Top 10 - 1 | TryHackMe Write-up" srcset="https://substackcdn.com/image/fetch/$s_!Htsz!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0fff1352-057a-4a5c-987f-01d74ffed93c_1376x768.png 424w, https://substackcdn.com/image/fetch/$s_!Htsz!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0fff1352-057a-4a5c-987f-01d74ffed93c_1376x768.png 848w, https://substackcdn.com/image/fetch/$s_!Htsz!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0fff1352-057a-4a5c-987f-01d74ffed93c_1376x768.png 1272w, https://substackcdn.com/image/fetch/$s_!Htsz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0fff1352-057a-4a5c-987f-01d74ffed93c_1376x768.png 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></div><p><em>Walkthrough for OWASP API Security Top 10 - Part 1 TryHackMe room. Master BOLA, BUA, excessive data exposure, rate limiting, and function authorization.</em></p><p>This is my complete walkthrough and write-up for the <a href="https://tryhackme.com/room/owaspapisecuritytop105w">OWASP API Security Top 10 - 1</a> room on TryHackMe. In Part 1 of this series, we explore the top 5 API security risks, analyzing vulnerable endpoints, ex&#8230;</p>
      <p>
          <a href="https://blog.farrosfr.com/p/owasp-api-security-top-10-1-tryhackme-write-up">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Virtualization and Containers | TryHackMe Write-up]]></title><description><![CDATA[Walkthrough for Virtualization and Containers TryHackMe room. Learn bare-metal and hosted hypervisors, Docker containers, and Kubernetes orchestration.]]></description><link>https://blog.farrosfr.com/p/virtualization-and-containers-tryhackme-write-up</link><guid isPermaLink="false">https://blog.farrosfr.com/p/virtualization-and-containers-tryhackme-write-up</guid><dc:creator><![CDATA[Mochammad Farros Fatchur Roji]]></dc:creator><pubDate>Tue, 21 Jul 2026 00:00:00 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/be956ff5-0de1-4edc-b525-8ee0670a6260_1376x768.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><div class="image-link image2" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!zSRv!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe884d2ab-ba22-4f10-9f9d-8ad1494e86cb_1376x768.png 424w, https://substackcdn.com/image/fetch/$s_!zSRv!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe884d2ab-ba22-4f10-9f9d-8ad1494e86cb_1376x768.png 848w, https://substackcdn.com/image/fetch/$s_!zSRv!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe884d2ab-ba22-4f10-9f9d-8ad1494e86cb_1376x768.png 1272w, https://substackcdn.com/image/fetch/$s_!zSRv!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe884d2ab-ba22-4f10-9f9d-8ad1494e86cb_1376x768.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!zSRv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe884d2ab-ba22-4f10-9f9d-8ad1494e86cb_1376x768.png" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e884d2ab-ba22-4f10-9f9d-8ad1494e86cb_1376x768.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Virtualization and Containers | TryHackMe Write-up&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Virtualization and Containers | TryHackMe Write-up" title="Virtualization and Containers | TryHackMe Write-up" srcset="https://substackcdn.com/image/fetch/$s_!zSRv!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe884d2ab-ba22-4f10-9f9d-8ad1494e86cb_1376x768.png 424w, https://substackcdn.com/image/fetch/$s_!zSRv!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe884d2ab-ba22-4f10-9f9d-8ad1494e86cb_1376x768.png 848w, https://substackcdn.com/image/fetch/$s_!zSRv!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe884d2ab-ba22-4f10-9f9d-8ad1494e86cb_1376x768.png 1272w, https://substackcdn.com/image/fetch/$s_!zSRv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe884d2ab-ba22-4f10-9f9d-8ad1494e86cb_1376x768.png 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></div></figure></div><p>This is my complete walkthrough and write-up for the <a href="https://tryhackme.com/room/virtualizationandcontainers">Virtualization and Containers</a> room on TryHackMe. In this room, we examine the fundamental concepts of virtualization, hypervisors, Docker containers, and Kubernetes cluster orchestration. </p>
      <p>
          <a href="https://blog.farrosfr.com/p/virtualization-and-containers-tryhackme-write-up">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Network Security Protocols | TryHackMe Write-up]]></title><description><![CDATA[Complete walkthrough for Network Security Protocols TryHackMe room. Learn about secure network protocols at the different layers of the OSI model.]]></description><link>https://blog.farrosfr.com/p/network-security-protocols-tryhackme-write-up</link><guid isPermaLink="false">https://blog.farrosfr.com/p/network-security-protocols-tryhackme-write-up</guid><dc:creator><![CDATA[Mochammad Farros Fatchur Roji]]></dc:creator><pubDate>Tue, 21 Jul 2026 00:00:00 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/a5f901e9-9796-4151-9e86-d1e5e11532d2_1376x768.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><div class="image-link image2" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!vSwM!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16cced6d-b3b1-42eb-960d-126a4dd75f58_1376x768.png 424w, https://substackcdn.com/image/fetch/$s_!vSwM!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16cced6d-b3b1-42eb-960d-126a4dd75f58_1376x768.png 848w, https://substackcdn.com/image/fetch/$s_!vSwM!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16cced6d-b3b1-42eb-960d-126a4dd75f58_1376x768.png 1272w, https://substackcdn.com/image/fetch/$s_!vSwM!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16cced6d-b3b1-42eb-960d-126a4dd75f58_1376x768.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!vSwM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16cced6d-b3b1-42eb-960d-126a4dd75f58_1376x768.png" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/16cced6d-b3b1-42eb-960d-126a4dd75f58_1376x768.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Network Security Protocols | TryHackMe Write-up&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Network Security Protocols | TryHackMe Write-up" title="Network Security Protocols | TryHackMe Write-up" srcset="https://substackcdn.com/image/fetch/$s_!vSwM!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16cced6d-b3b1-42eb-960d-126a4dd75f58_1376x768.png 424w, https://substackcdn.com/image/fetch/$s_!vSwM!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16cced6d-b3b1-42eb-960d-126a4dd75f58_1376x768.png 848w, https://substackcdn.com/image/fetch/$s_!vSwM!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16cced6d-b3b1-42eb-960d-126a4dd75f58_1376x768.png 1272w, https://substackcdn.com/image/fetch/$s_!vSwM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16cced6d-b3b1-42eb-960d-126a4dd75f58_1376x768.png 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></div></figure></div><p>This is my complete walkthrough and write-up for the <a href="https://tryhackme.com/room/networksecurityprotocols">Network Security Protocols</a> room on TryHackMe. In this room, we examine primary protocols essential for network security across each layer of the OSI model.</p>
      <p>
          <a href="https://blog.farrosfr.com/p/network-security-protocols-tryhackme-write-up">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Network Device Hardening | TryHackMe Write-up]]></title><description><![CDATA[A complete write-up for the TryHackMe Network Device Hardening room, showing how to secure VPNs, routers, switches, firewalls, and logging.]]></description><link>https://blog.farrosfr.com/p/network-device-hardening-tryhackme-write-up</link><guid isPermaLink="false">https://blog.farrosfr.com/p/network-device-hardening-tryhackme-write-up</guid><dc:creator><![CDATA[Mochammad Farros Fatchur Roji]]></dc:creator><pubDate>Sun, 19 Jul 2026 00:00:00 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/21f10cd2-a10e-42d2-b2a2-2c1651beaf63_1376x768.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><div class="image-link image2" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Uwzm!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa25ba631-b3b7-4f1b-8274-97de38e7b161_1376x768.png 424w, https://substackcdn.com/image/fetch/$s_!Uwzm!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa25ba631-b3b7-4f1b-8274-97de38e7b161_1376x768.png 848w, https://substackcdn.com/image/fetch/$s_!Uwzm!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa25ba631-b3b7-4f1b-8274-97de38e7b161_1376x768.png 1272w, https://substackcdn.com/image/fetch/$s_!Uwzm!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa25ba631-b3b7-4f1b-8274-97de38e7b161_1376x768.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Uwzm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa25ba631-b3b7-4f1b-8274-97de38e7b161_1376x768.png" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a25ba631-b3b7-4f1b-8274-97de38e7b161_1376x768.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Network Device Hardening | TryHackMe Write-up&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Network Device Hardening | TryHackMe Write-up" title="Network Device Hardening | TryHackMe Write-up" srcset="https://substackcdn.com/image/fetch/$s_!Uwzm!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa25ba631-b3b7-4f1b-8274-97de38e7b161_1376x768.png 424w, https://substackcdn.com/image/fetch/$s_!Uwzm!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa25ba631-b3b7-4f1b-8274-97de38e7b161_1376x768.png 848w, https://substackcdn.com/image/fetch/$s_!Uwzm!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa25ba631-b3b7-4f1b-8274-97de38e7b161_1376x768.png 1272w, https://substackcdn.com/image/fetch/$s_!Uwzm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa25ba631-b3b7-4f1b-8274-97de38e7b161_1376x768.png 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></div></figure></div><p>This write-up covers the <a href="https://tryhackme.com/room/networkdevicehardening">Network Device Hardening</a> room on TryHackMe. We will configure secure virtual private networks, build router firewall rules, implement secure administration protocols, and deploy network monitoring tools.</p>
      <p>
          <a href="https://blog.farrosfr.com/p/network-device-hardening-tryhackme-write-up">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Active Directory Hardening | TryHackMe Write-up]]></title><description><![CDATA[A complete walkthrough and write-up for the Active Directory Hardening TryHackMe room, focusing on securing AD environments and domain controllers.]]></description><link>https://blog.farrosfr.com/p/active-directory-hardening-tryhackme-write-up</link><guid isPermaLink="false">https://blog.farrosfr.com/p/active-directory-hardening-tryhackme-write-up</guid><dc:creator><![CDATA[Mochammad Farros Fatchur Roji]]></dc:creator><pubDate>Sat, 18 Jul 2026 00:00:00 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/fb688eeb-8ac4-4838-9ac3-42abf8cb8ec2_1376x768.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><div class="image-link image2" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!NoEa!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4aec2d05-9afe-4798-a02d-12f12ad4422d_1376x768.png 424w, https://substackcdn.com/image/fetch/$s_!NoEa!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4aec2d05-9afe-4798-a02d-12f12ad4422d_1376x768.png 848w, https://substackcdn.com/image/fetch/$s_!NoEa!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4aec2d05-9afe-4798-a02d-12f12ad4422d_1376x768.png 1272w, https://substackcdn.com/image/fetch/$s_!NoEa!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4aec2d05-9afe-4798-a02d-12f12ad4422d_1376x768.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!NoEa!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4aec2d05-9afe-4798-a02d-12f12ad4422d_1376x768.png" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4aec2d05-9afe-4798-a02d-12f12ad4422d_1376x768.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Active Directory Hardening | TryHackMe Write-up&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Active Directory Hardening | TryHackMe Write-up" title="Active Directory Hardening | TryHackMe Write-up" srcset="https://substackcdn.com/image/fetch/$s_!NoEa!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4aec2d05-9afe-4798-a02d-12f12ad4422d_1376x768.png 424w, https://substackcdn.com/image/fetch/$s_!NoEa!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4aec2d05-9afe-4798-a02d-12f12ad4422d_1376x768.png 848w, https://substackcdn.com/image/fetch/$s_!NoEa!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4aec2d05-9afe-4798-a02d-12f12ad4422d_1376x768.png 1272w, https://substackcdn.com/image/fetch/$s_!NoEa!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4aec2d05-9afe-4798-a02d-12f12ad4422d_1376x768.png 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></div></figure></div><p>This is my complete walkthrough and write-up for the <a href="https://tryhackme.com/room/activedirectoryhardening">Active Directory Hardening</a> room on TryHackMe. In this lab, we will cover key techniques for hardening Active Directory (AD) environments, including secure authentication settings, the Tiered Access Model, Group Policy Objects, and mitigating common AD attacks.</p>
      <p>
          <a href="https://blog.farrosfr.com/p/active-directory-hardening-tryhackme-write-up">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[How I Contributed to Astro Core: Fixing Cryptic Zod CSP Errors]]></title><description><![CDATA[How I improved Content Security Policy validation in Astro by refactoring Zod schemas and custom error mapping.]]></description><link>https://blog.farrosfr.com/p/how-i-contributed-to-astro-core-fixing-cryptic-zod-csp-errors</link><guid isPermaLink="false">https://blog.farrosfr.com/p/how-i-contributed-to-astro-core-fixing-cryptic-zod-csp-errors</guid><dc:creator><![CDATA[Mochammad Farros Fatchur Roji]]></dc:creator><pubDate>Fri, 17 Jul 2026 00:00:00 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/11be6bfc-3b61-4af0-89c6-2fdf076e7e58_1376x768.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><div class="image-link image2" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ymon!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13f4d784-f05e-4bd4-865a-8b350e20644e_1376x768.png 424w, https://substackcdn.com/image/fetch/$s_!ymon!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13f4d784-f05e-4bd4-865a-8b350e20644e_1376x768.png 848w, https://substackcdn.com/image/fetch/$s_!ymon!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13f4d784-f05e-4bd4-865a-8b350e20644e_1376x768.png 1272w, https://substackcdn.com/image/fetch/$s_!ymon!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13f4d784-f05e-4bd4-865a-8b350e20644e_1376x768.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ymon!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13f4d784-f05e-4bd4-865a-8b350e20644e_1376x768.png" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/13f4d784-f05e-4bd4-865a-8b350e20644e_1376x768.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;How I Contributed to Astro Core: Fixing Cryptic Zod CSP Errors&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="How I Contributed to Astro Core: Fixing Cryptic Zod CSP Errors" title="How I Contributed to Astro Core: Fixing Cryptic Zod CSP Errors" srcset="https://substackcdn.com/image/fetch/$s_!ymon!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13f4d784-f05e-4bd4-865a-8b350e20644e_1376x768.png 424w, https://substackcdn.com/image/fetch/$s_!ymon!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13f4d784-f05e-4bd4-865a-8b350e20644e_1376x768.png 848w, https://substackcdn.com/image/fetch/$s_!ymon!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13f4d784-f05e-4bd4-865a-8b350e20644e_1376x768.png 1272w, https://substackcdn.com/image/fetch/$s_!ymon!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13f4d784-f05e-4bd4-865a-8b350e20644e_1376x768.png 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></div></figure></div><p></p><p>Earlier this year, while configuring Content Security Policy (CSP) options for my apps, I ran into a cryptic configuration error in the Astro framework. To help other developers, I submitted a pull request directly to the Astro core repository: <a href="https://github.com/withastro/astro/pull/16685">docs(csp): improve validation messages for directives (withastro/astro#16685)</a> which successfully closes <a href="https://github.com/withastro/astro/issues/16663">issue #16663</a>.</p><p>Here is a full technical walkthrough of the problem, the codebase implementation, and what I learned from contributing to a major open-source project.</p><div><hr></div><h2>The Problem: Cryptic Zod Union Errors</h2><p>Astro uses the <a href="https://zod.dev/">Zod library</a> to define and validate its configuration schema. Zod is excellent for validating structures, but it can struggle with user-friendly messages when checking union types.</p><p>In Astro's security configuration, users can define CSP directives in <code>security.csp.directives</code>. However, because of how browser parsers behave, the directives <code>script-src</code> and <code>style-src</code> must be handled separately using dedicated options like <code>security.csp.scriptDirective</code> and <code>security.csp.styleDirective</code>.</p><p>If a developer mistakenly placed <code>script-src</code> directly into the general <code>directives</code> array like this:</p><pre><code>// astro.config.mjs
export default defineConfig({
  security: {
    csp: {
      directives: ["script-src 'self'"]
    }
  }
});
</code></pre><p>Astro's validation engine would output a frustratingly vague error:</p><pre><code>[config] Astro found issue(s) with your configuration:
! security.csp: Did not match union.
</code></pre><p>This occurred because the configuration schema evaluated the input against a union of valid directives and fell back to the generic Zod union error, leaving the developer with no indication of what went wrong or how to fix it.</p><div><hr></div><h2>The Solution: Refactoring Zod Schema &amp; Custom Error Maps</h2><p>To resolve the issue and provide clear, actionable instructions, we had to apply a two-step surgical update to the Astro core package.</p><div class="captioned-image-container"><figure><div class="image-link image2" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!DSHx!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F260ea8c5-5991-4abc-b94c-eb8069d69395_2560x1067.png 424w, https://substackcdn.com/image/fetch/$s_!DSHx!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F260ea8c5-5991-4abc-b94c-eb8069d69395_2560x1067.png 848w, https://substackcdn.com/image/fetch/$s_!DSHx!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F260ea8c5-5991-4abc-b94c-eb8069d69395_2560x1067.png 1272w, https://substackcdn.com/image/fetch/$s_!DSHx!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F260ea8c5-5991-4abc-b94c-eb8069d69395_2560x1067.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!DSHx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F260ea8c5-5991-4abc-b94c-eb8069d69395_2560x1067.png" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/260ea8c5-5991-4abc-b94c-eb8069d69395_2560x1067.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Astro CSP Validation Flow&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&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="Astro CSP Validation Flow" title="Astro CSP Validation Flow" srcset="https://substackcdn.com/image/fetch/$s_!DSHx!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F260ea8c5-5991-4abc-b94c-eb8069d69395_2560x1067.png 424w, https://substackcdn.com/image/fetch/$s_!DSHx!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F260ea8c5-5991-4abc-b94c-eb8069d69395_2560x1067.png 848w, https://substackcdn.com/image/fetch/$s_!DSHx!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F260ea8c5-5991-4abc-b94c-eb8069d69395_2560x1067.png 1272w, https://substackcdn.com/image/fetch/$s_!DSHx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F260ea8c5-5991-4abc-b94c-eb8069d69395_2560x1067.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></div></figure></div><p><em>Figure 1: The lifecycle flow of a custom configuration validation error traversing the schema and zod-error-map.</em></p><h3>1. Refactoring schema validation with <code>superRefine</code></h3><p>In <code>packages/astro/src/core/csp/config.ts</code>, the original schema for checking allowed directives was a simple <code>z.custom</code> returning a boolean check:</p><pre><code>export const allowedDirectivesSchema = z.custom&lt;CspDirective&gt;((value) =&gt; {
  if (typeof value !== 'string') {
    return false;
  }
  return ALLOWED_DIRECTIVES.some((allowedValue) =&gt; {
    return value.startsWith(allowedValue);
  });
});
</code></pre><p>I refactored this validator to use <code>.superRefine</code>. This allowed us to inspect the invalid inputs and attach distinct custom issues depending on the specific error context:</p><pre><code>export const allowedDirectivesSchema = z.custom&lt;CspDirective&gt;((v) =&gt; typeof v === 'string').superRefine(
  (value, ctx) =&gt; {
    const isAllowed = ALLOWED_DIRECTIVES.some((allowedValue) =&gt; {
      return value.startsWith(allowedValue);
    });
    if (!isAllowed) {
      if (value.startsWith('script-src') || value.startsWith('style-src')) {
        ctx.addIssue({
          code: z.ZodIssueCode.custom,
          message: `Directives \`script-src\` and \`style-src\` are not allowed in \`security.csp.directives\`. Please use \`security.csp.scriptDirective\` and \`security.csp.styleDirective\` instead.`,
          fatal: true,
        });
      } else {
        ctx.addIssue({
          code: z.ZodIssueCode.custom,
          message: `Invalid directive: "${value}". Allowed directives are: ${ALLOWED_DIRECTIVES.join(', ')}`,
          fatal: true,
        });
      }
    }
  },
);
</code></pre><h3>2. Surfacing custom messages in <code>zod-error-map.ts</code></h3><p>Even with <code>superRefine</code> adding the custom issues, Zod's default union error formatter would still swallow the custom messages during validation formatting.</p><p>To fix this, we updated Astro's custom Zod error formatter in <code>packages/astro/src/core/errors/zod-error-map.ts</code>. We intercepted custom issue codes containing <code>security.csp</code> and directly pushed the custom messages to the expected error shape array:</p><pre><code>if (
  _issue.code === 'custom' &amp;&amp;
  _issue.message &amp;&amp;
  _issue.message.includes('security.csp')
) {
  expectedShape.push(_issue.message);
} else if ('expected' in _issue &amp;&amp; typeof _issue.expected === 'string') {
  expectedShape.push(
    relativePath ? `${relativePath}: ${_issue.expected}` : _issue.expected,
  );
}
</code></pre><p>This bypasses the union-flattening logic, successfully outputting our clean, helpful instructions to the developer's console.</p><div><hr></div><h2>Testing the Validation</h2><p>To ensure the new error mapping behaves correctly, I added a new unit test in <code>packages/astro/test/units/config/config-validate.test.ts</code>:</p><pre><code>it('should provide a helpful error message when script-src or style-src is used in directives', async () =&gt; {
  const configError = await validateConfig({
    security: {
      csp: {
        directives: ["script-src 'self'"],
      },
    },
  }).catch((err) =&gt; err);

  const formattedError = stripVTControlCharacters(formatConfigErrorMessage(configError));
  assert.equal(
    formattedError,
    `[config] Astro found issue(s) with your configuration:\n\n! security.csp: Did not match union.\n  &gt; Expected type boolean | Directives script-src and style-src are not allowed in security.csp.directives. Please use security.csp.scriptDirective and security.csp.styleDirective instead.\n  &gt; Received { "directives": [ "script-src 'self'" ] }`,
  );
});
</code></pre><p>The test runs a config validation, formats the message, strips terminal coloring control characters, and asserts that our specific help instruction is rendered perfectly alongside the union error representation.</p><div><hr></div><h2>Contribution Takeaways</h2><p>Contributing to Astro's core was a fantastic experience. The codebase is clean, well-tested, and uses changesets to automate package version patches. Because this validation error directly affects DX (Developer Experience), it was merged quickly and rolled out in a patch release, resolving configuration confusion for thousands of developers worldwide.</p><p>Thanks for reading. See you in the next lab.</p>]]></content:encoded></item></channel></rss>