<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>k1m0ch1</title>
    <description>free thoughtfull from my mind</description>
    <link>https://k1m0ch1.github.io//</link>
    <atom:link href="https://k1m0ch1.github.io//feed.xml" rel="self" type="application/rss+xml"/>
    <pubDate>Sat, 13 Jun 2026 05:16:24 +0000</pubDate>
    <lastBuildDate>Sat, 13 Jun 2026 05:16:24 +0000</lastBuildDate>
    <generator>Jekyll v3.10.0</generator>
    
      <item>
        <title>Install Nomad Multi-Region di chronicle.rip: Full AI Navigation dari Nol</title>
        <description>&lt;p&gt;gw baru aja selesai build Nomad cluster multi-region buat &lt;a href=&quot;https://chronicle.rip&quot;&gt;chronicle.rip&lt;/a&gt; — mapping platform yang serve user di 86 negara. 3 region (Singapore, Australia, US), 6 VM, federated Nomad cluster, Headscale VPN mesh, zero public IP, dan semuanya di-navigate pake AI.&lt;/p&gt;

&lt;p&gt;bukan hyperbole. literally setiap keputusan arsitektur, setiap command, setiap config — gw navigate pake Claude Code.&lt;/p&gt;

&lt;p&gt;ini ceritanya.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;masalahnya&quot;&gt;masalahnya&lt;/h2&gt;

&lt;p&gt;chronicle.rip itu pake Docker Compose di GCP VM. kuno. setiap deploy harus SSH ke server, pull image, restart container. scaling? tambah VM manual. monitoring? Prometheus yang di-scrape lewat CDN (iya, gw tau, ini bodoh — ceritanya panjang).&lt;/p&gt;

&lt;p&gt;dan yang paling parah: &lt;strong&gt;US user kena 6.35 detik P99&lt;/strong&gt; karena load balancer cuma point ke Australia. US server udah jalan, udah bayar $250/bulan, tapi GA PERNAH DI-CONNECT ke backend service. 💀&lt;/p&gt;

&lt;p&gt;waktunya migrate ke something proper.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;kenapa-nomad-bukan-kubernetes&quot;&gt;kenapa Nomad, bukan Kubernetes?&lt;/h2&gt;

&lt;p&gt;ini keputusan pertama yang gw navigate pake Claude Code. gw kasih konteks:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&quot;gw punya 4 VM sekarang, mau scale ke 6. 
workload-nya Django API, Angular frontend, Redis, Elasticsearch.
budget terbatas. tim cuma gw doang. 
compare Nomad vs Kubernetes buat case ini&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;dan AI kasih analysis yang jujur:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Kubernetes:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;butuh minimum 3 master node&lt;/li&gt;
  &lt;li&gt;etcd, CRD, operator — complexity tinggi&lt;/li&gt;
  &lt;li&gt;overhead resource ~30% dari total capacity&lt;/li&gt;
  &lt;li&gt;great ecosystem tapi overkill buat 6 node&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Nomad:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;single binary, server + client&lt;/li&gt;
  &lt;li&gt;native Docker support, ga perlu containerd config&lt;/li&gt;
  &lt;li&gt;GPU scheduling built-in (buat BIRT workers)&lt;/li&gt;
  &lt;li&gt;operational complexity rendah — satu orang bisa maintain&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;keputusan: &lt;strong&gt;Nomad&lt;/strong&gt;. dan ini bukan keputusan yang salah.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;keputusan-kedua-consul-atau-engga&quot;&gt;keputusan kedua: Consul atau engga?&lt;/h2&gt;

&lt;p&gt;ini menarik. semua tutorial HashiCorp bilang “pake Consul buat service discovery”. gw tanya Claude Code:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&quot;Nomad 1.11 udah punya native service discovery. 
chronicle cuma butuh inter-service communication dalam satu region. 
ga butuh service mesh. ga butuh cross-region service calls.
masih perlu Consul?&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;jawabannya: &lt;strong&gt;ga perlu.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;alasannya clear:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Nomad 1.11 punya &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;nomadService&lt;/code&gt; template function — cukup buat discover service dalam cluster&lt;/li&gt;
  &lt;li&gt;Consul nambah 5 port firewall per node&lt;/li&gt;
  &lt;li&gt;nambah satu cluster lagi yang harus di-maintain&lt;/li&gt;
  &lt;li&gt;buat 6 node tanpa service mesh requirement, overkill&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;gw dokumentasiin keputusan ini di &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;01-DECISION.md&lt;/code&gt; — biar kalau nanti ada yang tanya “kok ga pake Consul?”, jawabannya udah ada.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;arsitektur-yang-di-build&quot;&gt;arsitektur yang di-build&lt;/h2&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;nomad-vpc (global)
├── nomad-subnet-sg   10.20.1.0/24   (Singapore)
│   ├── nomad-server-sg   10.20.1.2    ← Headscale server
│   └── nomad-client-sg   10.20.1.3    ← Workload runner
├── nomad-subnet-aus  10.20.2.0/24   (Australia)
│   ├── nomad-server-aus  10.20.2.2
│   └── nomad-client-aus  10.20.2.3
└── nomad-subnet-us   10.20.3.0/24   (US Central)
    ├── nomad-server-us   10.20.3.2
    └── nomad-client-us   10.20.3.3
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;6 VM. 3 server (Nomad control plane), 3 client (workload execution). semua TANPA public IP — akses cuma lewat GCP IAP tunnel atau Headscale VPN.&lt;/p&gt;

&lt;p&gt;kenapa Headscale? karena gw butuh overlay network antar region yang:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;encrypted (WireGuard)&lt;/li&gt;
  &lt;li&gt;ga butuh VPC peering&lt;/li&gt;
  &lt;li&gt;bisa diakses dari laptop developer&lt;/li&gt;
  &lt;li&gt;free (self-hosted Tailscale control server)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;satu Global HTTP Load Balancer di depan buat expose Nomad UI dan Headscale endpoint.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;full-ai-navigation-gimana-prosesnya&quot;&gt;full AI navigation: gimana prosesnya&lt;/h2&gt;

&lt;p&gt;ini bagian yang paling menarik buat diceritain.&lt;/p&gt;

&lt;h3 id=&quot;fase-1-planning&quot;&gt;fase 1: planning&lt;/h3&gt;

&lt;p&gt;gw ga langsung build. gw minta Claude Code bikin architecture document dulu:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&quot;bikin architecture document buat multi-region Nomad cluster.
requirement: 3 region (SG, AUS, US), GCP, 
no public IP, Headscale VPN, federated cluster.
include: VPC layout, firewall rules, VM specs, 
software stack, deployment pipeline&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;dia generate &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;02-ARCHITECTURE.md&lt;/code&gt; — document lengkap yang jadi blueprint. gw review, revisi, approve.&lt;/p&gt;

&lt;h3 id=&quot;fase-2-provisioning&quot;&gt;fase 2: provisioning&lt;/h3&gt;

&lt;p&gt;semua resource GCP di-create lewat Claude Code executing &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gcloud&lt;/code&gt; commands:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&quot;create VPC, subnets di 3 region, firewall rules sesuai architecture doc,
6 VM dengan spec yang udah di-define. no public IP, IAP access only&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;dia execute step by step. VPC → subnet → firewall → VM → SSH keys. kalau ada error (dan PASTI ada error, terutama firewall rules), dia baca error-nya dan fix sendiri.&lt;/p&gt;

&lt;p&gt;total: 6 VM, 3 subnet, 6 firewall rules, 3 Cloud NAT, 3 Cloud Router, 1 Load Balancer — semua dari terminal.&lt;/p&gt;

&lt;h3 id=&quot;fase-3-software-installation&quot;&gt;fase 3: software installation&lt;/h3&gt;

&lt;p&gt;SSH ke tiap VM lewat IAP tunnel, install Nomad, Docker, Tailscale:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&quot;SSH ke nomad-server-sg via IAP, install Nomad 1.11.3, Docker, 
Tailscale. configure Nomad as server, region sg, 
datacenter dc-sg. enable ACL.&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;6 VM × setup sequence = banyak command. tapi karena pattern-nya sama, Claude Code bikin reusable script yang di-adapt per region.&lt;/p&gt;

&lt;h3 id=&quot;fase-4-cluster-federation&quot;&gt;fase 4: cluster federation&lt;/h3&gt;

&lt;p&gt;ini bagian yang tricky. 3 Nomad server harus join jadi satu federated cluster via WAN gossip. tapi WAN gossip jalan di atas Headscale overlay network, bukan GCP internal network.&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&quot;federate nomad-server-aus dan nomad-server-us 
ke nomad-server-sg via Headscale IP (100.64.0.x). 
verify dengan nomad server members&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;pertama kali gagal karena gossip port ga di-allow di firewall Headscale. Claude Code diagnose dari error log, suggest fix, dan retry. second attempt: federated. ✅&lt;/p&gt;

&lt;h3 id=&quot;fase-5-deploy-birt&quot;&gt;fase 5: deploy BIRT&lt;/h3&gt;

&lt;p&gt;BIRT itu data processing service chronicle — 9 worker groups, pull dari Harbor registry, connect ke MySQL via socat proxy.&lt;/p&gt;

&lt;p&gt;ini dimana fun stuff happen:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;5 worker images MISSING boto3/botocore dependency → Claude Code patch in-place dengan &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docker commit&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;nginx job naming quirk: production nginx ternyata job &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;nginx-test&lt;/code&gt;, bukan &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;nginx&lt;/code&gt; → Claude Code discover ini dari allocation list dan WARN gw buat ga stop &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;nginx-test&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;database connectivity lewat socat proxy over Headscale mesh → Claude Code set up end-to-end&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;hasil-akhir&quot;&gt;hasil akhir&lt;/h2&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Metric&lt;/th&gt;
      &lt;th&gt;Sebelum (Docker Compose)&lt;/th&gt;
      &lt;th&gt;Sesudah (Nomad)&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;Deploy method&lt;/td&gt;
      &lt;td&gt;SSH + pull + restart&lt;/td&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;nomad job run&lt;/code&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Multi-region&lt;/td&gt;
      &lt;td&gt;Manual per VM&lt;/td&gt;
      &lt;td&gt;Federated cluster&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Service discovery&lt;/td&gt;
      &lt;td&gt;Hardcoded ports&lt;/td&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;nomadService&lt;/code&gt; dynamic&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Scaling&lt;/td&gt;
      &lt;td&gt;Tambah VM manual&lt;/td&gt;
      &lt;td&gt;Nomad allocation&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Monitoring&lt;/td&gt;
      &lt;td&gt;Prometheus lewat CDN 😅&lt;/td&gt;
      &lt;td&gt;Nomad UI + health checks&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Security&lt;/td&gt;
      &lt;td&gt;Public IP di semua VM&lt;/td&gt;
      &lt;td&gt;Zero public IP, IAP only&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;total waktu build: &lt;strong&gt;~3 hari kerja&lt;/strong&gt; buat production-grade multi-region cluster.&lt;/p&gt;

&lt;p&gt;tanpa AI navigation? estimasi gw: &lt;strong&gt;2-3 minggu&lt;/strong&gt; minimum, considering gw baru pertama kali setup Nomad multi-region.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;yang-gw-pelajari&quot;&gt;yang gw pelajari&lt;/h2&gt;

&lt;h3 id=&quot;1-ai-navigation-bukan-berarti-ai-yang-decide&quot;&gt;1. AI navigation bukan berarti AI yang decide&lt;/h3&gt;

&lt;p&gt;setiap keputusan arsitektur (Nomad vs K8s, no Consul, Headscale vs VPN, region layout) — gw yang decide. Claude Code provide analysis, comparison, trade-offs. tapi decision tetep gw.&lt;/p&gt;

&lt;h3 id=&quot;2-documentation-as-you-go&quot;&gt;2. documentation as you go&lt;/h3&gt;

&lt;p&gt;karena Claude Code jalan di terminal, semua proses ter-documented secara natural. gw punya &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ACTIVITY_LOG.md&lt;/code&gt; yang list SEMUA resource yang di-create, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;01-DECISION.md&lt;/code&gt; buat keputusan arsitektur, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;RESULT.md&lt;/code&gt; buat summary. documentation yang biasanya di-skip karena “nanti aja”, sekarang jadi by-product dari workflow.&lt;/p&gt;

&lt;h3 id=&quot;3-error-handling-jadi-cepet&quot;&gt;3. error handling jadi cepet&lt;/h3&gt;

&lt;p&gt;Nomad cluster federation gagal? Claude Code baca log, identify issue (firewall), suggest fix, execute. dependency missing di Docker image? dia suggest &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docker commit&lt;/code&gt; buat patch in-place. nginx naming quirk? dia discover dari data dan warn.&lt;/p&gt;

&lt;p&gt;dulu error kayak gini bisa makan setengah hari googling Stack Overflow. sekarang menit.&lt;/p&gt;

&lt;h3 id=&quot;4-the-compound-effect&quot;&gt;4. the compound effect&lt;/h3&gt;

&lt;p&gt;satu-satu, each AI assist kecil. tapi compound-nya gede: architecture doc + provisioning + installation + configuration + troubleshooting + documentation — semua di-accelerate. 3 hari vs 3 minggu bukan karena satu shortcut, tapi karena puluhan shortcut yang stack.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;buat-yang-mau-coba&quot;&gt;buat yang mau coba&lt;/h2&gt;

&lt;p&gt;kalau lo mau setup Nomad cluster dan mau coba navigate pake AI:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;strong&gt;mulai dari architecture doc.&lt;/strong&gt; jangan langsung build. minta AI bikin blueprint, lo review&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;satu region dulu.&lt;/strong&gt; jangan langsung 3 region. set up SG, pastiin works, baru expand&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;document decisions.&lt;/strong&gt; kenapa Nomad, kenapa no Consul, kenapa Headscale — tulis alasannya&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;expect errors.&lt;/strong&gt; AI ga perfect. firewall rules salah, config typo, dependency missing — normal. yang penting AI bisa help diagnose cepet&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;keep the human in the loop.&lt;/strong&gt; AI navigate, lo drive&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;cluster gw sekarang jalan. BIRT healthy, 9 groups running, semua region federated. dan gw ga pernah buka satu tutorial YouTube pun.&lt;/p&gt;

&lt;p&gt;terminal + AI. that’s it.&lt;/p&gt;
</description>
        <pubDate>Wed, 08 Apr 2026 07:00:00 +0000</pubDate>
        <link>https://k1m0ch1.github.io//2026/nomad-chronicle-ai-navigation/</link>
        <guid isPermaLink="true">https://k1m0ch1.github.io//2026/nomad-chronicle-ai-navigation/</guid>
        
        
        <category>nomad</category>
        
        <category>infrastructure</category>
        
        <category>devops</category>
        
        <category>ai</category>
        
        <category>claudecode</category>
        
        <category>blogs</category>
        
        <category>blog</category>
        
      </item>
    
      <item>
        <title>Pentesting Pake Claude Code: Workflow yang Ga Ada di Tutorial Manapun</title>
        <description>&lt;p&gt;gw udah pentesting dari 2016. dulu manual banget — nmap, burpsuite, manual fuzzing, nulis exploit sendiri, report di word document. sekarang? gw masih lakuin semua itu. tapi ada satu tool yang bikin workflow gw 3x lebih cepet, dan itu bukan tool pentesting.&lt;/p&gt;

&lt;p&gt;itu &lt;strong&gt;Claude Code&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;bukan buat replace skill lo. bukan buat “auto-hack”. tapi buat hal-hal yang dulu makan waktu berjam-jam dan sekarang makan menit.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;kenapa-claude-code-bukan-chatgpt&quot;&gt;kenapa Claude Code, bukan ChatGPT?&lt;/h2&gt;

&lt;p&gt;gw pernah bikin thread soal ini. ChatGPT itu bagus buat brainstorming, tapi buat REAL pentesting workflow? nope.&lt;/p&gt;

&lt;p&gt;alasannya:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Claude Code jalan di terminal lo. dia bisa baca output nmap, parse hasil burp, analyze response langsung.&lt;/li&gt;
  &lt;li&gt;dia bisa execute command. bukan copy-paste — EXECUTE.&lt;/li&gt;
  &lt;li&gt;context window gede. lo bisa kasih dia ratusan line log dan dia ga lupa context di awal.&lt;/li&gt;
  &lt;li&gt;dengan MCP Shodan, dia bisa recon langsung. &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ip_lookup 103.xxx.xxx.xxx&lt;/code&gt; → dapet semua open port, services, CVE.&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;workflow-gw-sekarang&quot;&gt;workflow gw sekarang&lt;/h2&gt;

&lt;h3 id=&quot;1-reconnaissance--shodan--web-search&quot;&gt;1. Reconnaissance — Shodan + web search&lt;/h3&gt;

&lt;p&gt;sebelum nyentuh target, gw minta Claude Code research dulu:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&quot;cari informasi tentang target X, cek IP-nya di shodan, 
cek DNS records, enumerate subdomain yang visible&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;dengan MCP Shodan, dia langsung:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ip_lookup&lt;/code&gt; — open ports, services, OS fingerprint&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;dns_lookup&lt;/code&gt; — A, AAAA, MX, CNAME records&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;reverse_dns_lookup&lt;/code&gt; — apa aja yang point ke IP ini&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cve_lookup&lt;/code&gt; — kalau ada service yang vulnerable&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;dulu ini gw harus buka Shodan web, copy-paste, cross-reference manual. sekarang satu prompt, semua data di terminal.&lt;/p&gt;

&lt;h3 id=&quot;2-analysis--baca-output-cari-pattern&quot;&gt;2. Analysis — baca output, cari pattern&lt;/h3&gt;

&lt;p&gt;ini dimana Claude Code paling berguna. lo kasih dia raw output dari tools:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&quot;ini hasil nmap scan. identify service yang potentially vulnerable, 
prioritize by severity, dan suggest next steps&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;dia ga cuma list port. dia cross-reference service version sama known CVE. dia suggest specific exploit path. dia bahkan kasih one-liner buat test.&lt;/p&gt;

&lt;h3 id=&quot;3-exploit-development--pair-programming-mode&quot;&gt;3. Exploit Development — pair programming mode&lt;/h3&gt;

&lt;p&gt;gw bikin custom exploit, Claude Code jadi pair programmer:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&quot;gw mau bikin python script buat test SQL injection di endpoint ini.
parameternya X, response pattern-nya kayak gini.
bikin script yang bisa detect blind SQLi pake time-based technique&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;dia generate script, gw review, gw modify, gw run. kalau error, dia liat error-nya (karena dia di terminal yang sama), langsung suggest fix.&lt;/p&gt;

&lt;p&gt;ini bukan “AI bikin exploit otomatis” — ini pair programming dimana partner lo punya knowledge base yang gede banget.&lt;/p&gt;

&lt;h3 id=&quot;4-reverse-engineering--image-analysis-mvp&quot;&gt;4. Reverse Engineering — image analysis MVP&lt;/h3&gt;

&lt;p&gt;ini yang unexpected. gw pernah reverse engineering satu mobile app (gw tulis di blog soal &lt;a href=&quot;https://yggdrasil.id/2021/09/big-brother-test/&quot;&gt;Big Brother Test&lt;/a&gt;). sekarang dengan Claude Code:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;screenshot decompiled code → dia baca dan analyze&lt;/li&gt;
  &lt;li&gt;screenshot network traffic → dia identify pattern&lt;/li&gt;
  &lt;li&gt;screenshot obfuscated config → dia help decode&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;fitur image analysis dari Claude Code itu underrated banget buat security research.&lt;/p&gt;

&lt;h3 id=&quot;5-report-writing--yang-paling-boring-jadi-cepet&quot;&gt;5. Report Writing — yang paling boring, jadi cepet&lt;/h3&gt;

&lt;p&gt;ini mungkin where most time is saved. setelah semua finding di-document (gw pake &lt;a href=&quot;https://github.com/k1m0ch1/axolotl&quot;&gt;Axolotl&lt;/a&gt; buat record findings), gw minta Claude Code:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&quot;dari findings ini, generate executive summary dan technical detail.
format: severity, description, impact, remediation.
tone: professional tapi accessible buat management&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;report yang biasanya 4-5 jam jadi 30 menit. dan quality-nya consistent.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;hal-yang-claude-code-ga-bisa-buat-pentesting&quot;&gt;hal yang Claude Code GA BISA buat pentesting&lt;/h2&gt;

&lt;p&gt;biar fair:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;ga bisa replace intuisi.&lt;/strong&gt; knowing WHERE to look, what feels off, when something is too easy — itu pengalaman, bukan AI.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;ga bisa social engineering.&lt;/strong&gt; well, technically bisa generate phishing email, tapi judgement call kapan dan gimana — itu tetep lo.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;jangan blindly trust output-nya.&lt;/strong&gt; dia bisa salah. dia bisa hallucinate CVE yang ga ada. SELALU verify.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;jangan pake buat illegal shit.&lt;/strong&gt; ini harusnya obvious tapi perlu dibilang.&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;tools-yang-gw-combine&quot;&gt;tools yang gw combine&lt;/h2&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Tool&lt;/th&gt;
      &lt;th&gt;Fungsi&lt;/th&gt;
      &lt;th&gt;AI-Assisted?&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;nmap&lt;/td&gt;
      &lt;td&gt;network scanning&lt;/td&gt;
      &lt;td&gt;output di-analyze Claude&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Burp Suite&lt;/td&gt;
      &lt;td&gt;web app testing&lt;/td&gt;
      &lt;td&gt;manual, tapi findings di-process Claude&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Shodan MCP&lt;/td&gt;
      &lt;td&gt;reconnaissance&lt;/td&gt;
      &lt;td&gt;directly from Claude Code&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;sqlmap&lt;/td&gt;
      &lt;td&gt;SQLi testing&lt;/td&gt;
      &lt;td&gt;manual run, Claude analyze results&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Playwright MCP&lt;/td&gt;
      &lt;td&gt;web app interaction&lt;/td&gt;
      &lt;td&gt;controlled from Claude Code&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Axolotl&lt;/td&gt;
      &lt;td&gt;finding documentation&lt;/td&gt;
      &lt;td&gt;output fed to Claude for reports&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;real-example-bca-qr-merchant-reverse-engineering&quot;&gt;real example: BCA QR Merchant reverse engineering&lt;/h2&gt;

&lt;p&gt;gw pernah reverse engineering flow authentication dari BCA QR Merchant app. ini flow-nya:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;pake &lt;strong&gt;Playwright MCP&lt;/strong&gt; buat capture semua network request waktu login&lt;/li&gt;
  &lt;li&gt;nemuin authentication flow yang pake &lt;strong&gt;Keycloak SSO&lt;/strong&gt; (OpenID Connect)&lt;/li&gt;
  &lt;li&gt;nemuin endpoint: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;mssi.ebanksvc.bca.co.id/v1/sso/auth/realms/bca/protocol/openid-connect/token&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;nemuin encryption pake &lt;strong&gt;AES-256-CBC&lt;/strong&gt; buat payload&lt;/li&gt;
  &lt;li&gt;bikin Go CLI tool buat replicate flow&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;semua discovery process itu di-accelerate sama Claude Code. dia yang help trace network flow, identify encryption pattern dari captured requests, dan suggest implementation approach.&lt;/p&gt;

&lt;p&gt;tanpa Claude Code, ini research 2 minggu. dengan Claude Code, 3 hari.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;kesimpulan&quot;&gt;kesimpulan&lt;/h2&gt;

&lt;p&gt;Claude Code bukan pengganti skill pentesting lo. dia amplifier.&lt;/p&gt;

&lt;p&gt;kalau lo udah ngerti fundamentalnya — networking, web security, exploitation techniques — Claude Code bikin lo 3x lebih cepet. kalau lo belum ngerti fundamentalnya, dia ga akan magically bikin lo jadi hacker.&lt;/p&gt;

&lt;p&gt;invest di skill dulu. terus pake AI buat multiply-nya.&lt;/p&gt;

&lt;p&gt;tools berubah. fundamentals tetep.&lt;/p&gt;
</description>
        <pubDate>Wed, 08 Apr 2026 06:00:00 +0000</pubDate>
        <link>https://k1m0ch1.github.io//2026/pentesting-with-claude-code/</link>
        <guid isPermaLink="true">https://k1m0ch1.github.io//2026/pentesting-with-claude-code/</guid>
        
        
        <category>security</category>
        
        <category>pentesting</category>
        
        <category>ai</category>
        
        <category>claudecode</category>
        
        <category>blogs</category>
        
        <category>blog</category>
        
      </item>
    
      <item>
        <title>Setup MCP yang Bikin Claude Code Jadi Senjata: dari Terminal Guys untuk Terminal Guys</title>
        <description>&lt;p&gt;gw bukan orang yang suka buka IDE terus klik-klik. gw terminal guys. tmux di linux server, windows buat daily driver, dan semua kerjaan gw lewat CLI. jadi waktu AI coding tools mulai rame, gw ga tertarik sama sekali sama yang model-model kayak open-claw, nemo-claw, atau apalah nama-nama hype tool yang tiap minggu muncul terus ilang.&lt;/p&gt;

&lt;p&gt;yang gw butuhin itu simple: AI yang bisa kerja di terminal gw, ngerti konteks project gw, dan ga bodoh.&lt;/p&gt;

&lt;p&gt;dan jawabannya: &lt;strong&gt;Claude Code + MCP&lt;/strong&gt;.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;pertama-tama-claude-code-bukan-gpt&quot;&gt;pertama-tama: Claude Code, bukan GPT&lt;/h2&gt;

&lt;p&gt;gw udah coba semuanya. GPT, Copilot, semua. dan kesimpulan gw: &lt;strong&gt;GPT itu sampah buat coding.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;bukan karena ga bisa generate code — bisa. tapi outputnya itu kayak orang yang baca dokumentasi 5 menit terus sok ngerti. halusinasi API yang ga ada, suggest library yang udah deprecated, dan yang paling nyebelin: ga bisa maintain context panjang.&lt;/p&gt;

&lt;p&gt;Claude Code beda. ini bukan chat interface yang lo copy-paste code ke sana. ini CLI tool yang literally jalan di terminal lo, baca file lo, execute command, dan ngerti project lo. gw run ini pake &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--dangerously-skip-permissions&lt;/code&gt; karena gw males approve tiap tool call — ya gw tau risikonya, tapi gw juga yang control terminalnya.&lt;/p&gt;

&lt;p&gt;yang bikin Claude Code juara:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;web search bawaan&lt;/strong&gt; — dia bisa search internet langsung dari terminal. ga perlu buka browser buat cari docs.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;image analysis&lt;/strong&gt; — ini yang bikin gw “what the hell is this”. lo bisa kasih screenshot error, screenshot UI, screenshot diagram, dan dia BACA itu. dari terminal. screenshot → paste → dia ngerti. gw pernah kasih screenshot Grafana dashboard dan dia langsung ngerti metric mana yang anomaly.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;sub agent&lt;/strong&gt; — ini game changer. lo bisa spawn agent terpisah buat research, buat explore codebase, buat review code, PARALEL. jadi gw bisa minta satu agent research API docs sementara gw lanjut ngoding. ini fitur yang gw lagi consider buat dimaksimalin lebih jauh.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;model switching&lt;/strong&gt; — bisa pake Opus buat yang berat, Sonnet buat yang cepet, Haiku buat yang ringan. fleksibel.&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;mcp-yang-bikin-claude-code-dari-bagus-jadi-gila&quot;&gt;MCP: yang bikin Claude Code dari “bagus” jadi “gila”&lt;/h2&gt;

&lt;p&gt;MCP itu Model Context Protocol. intinya: lo bisa connect tools external ke Claude Code, jadi dia punya “tangan” tambahan. bukan cuma baca file dan run command, tapi bisa akses database, browser, search engine, memory system, code intelligence — semua dari terminal.&lt;/p&gt;

&lt;p&gt;ini setup MCP gw yang sekarang jalan:&lt;/p&gt;

&lt;h3 id=&quot;1-gitnexus--code-intelligence-di-server&quot;&gt;1. GitNexus — Code Intelligence di Server&lt;/h3&gt;

&lt;p&gt;gw install &lt;a href=&quot;https://github.com/nicholasgasior/gitnexus&quot;&gt;GitNexus&lt;/a&gt; di server gw sendiri. ini MCP server buat code intelligence — semantic search, symbol lookup, impact analysis, rename refactoring — semua diindex dari repo lo.&lt;/p&gt;

&lt;p&gt;cara pakenya: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;list_repos&lt;/code&gt; dulu buat liat apa aja yang ke-index, terus bisa &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;semantic_search&lt;/code&gt; buat cari code by meaning (bukan by string), atau &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;symbol_context&lt;/code&gt; buat ngerti satu function beserta dependency-nya.&lt;/p&gt;

&lt;p&gt;kenapa di server sendiri? karena gw ga mau code gw dikirim ke third party. self-hosted, data gw tetep di gw.&lt;/p&gt;

&lt;h3 id=&quot;2-mem0--persistent-memory&quot;&gt;2. Mem0 — Persistent Memory&lt;/h3&gt;

&lt;p&gt;ini yang keren. &lt;a href=&quot;https://github.com/mem0ai/mem0&quot;&gt;Mem0&lt;/a&gt; itu memory layer buat AI. gw bikin MCP servernya sendiri. jadi Claude Code bisa “inget” hal-hal lintas conversation:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;project context yang udah di-discuss&lt;/li&gt;
  &lt;li&gt;user preferences&lt;/li&gt;
  &lt;li&gt;keputusan arsitektur yang udah dibuat&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;tanpa ini, tiap conversation baru lo harus jelasin ulang semuanya. dengan Mem0, Claude langsung tau konteksnya.&lt;/p&gt;

&lt;h3 id=&quot;3-playwright-mcp--control-browser-dari-terminal&quot;&gt;3. Playwright MCP — Control Browser dari Terminal&lt;/h3&gt;

&lt;p&gt;ini mungkin yang paling mind-blowing buat orang yang belum pernah liat. &lt;a href=&quot;https://github.com/anthropics/claude-code&quot;&gt;Playwright MCP&lt;/a&gt; extension yang bisa control SESSION browser lo yang lagi buka. bukan headless browser baru — browser lo yang lagi login, yang lagi buka dashboard, yang lagi di tengah-tengah workflow.&lt;/p&gt;

&lt;p&gt;gw pake ini buat:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;scrape data dari dashboard yang butuh login (Cloudflare, GCP Console)&lt;/li&gt;
  &lt;li&gt;automate form submission (gw literally migrate 652 R2 bucket paths pake ini)&lt;/li&gt;
  &lt;li&gt;capture network requests buat reverse engineering API&lt;/li&gt;
  &lt;li&gt;take screenshot buat di-analyze Claude&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;lo kerja di terminal, tapi lo punya mata di browser.&lt;/p&gt;

&lt;h3 id=&quot;4-rtk--token-saver-dari-rust&quot;&gt;4. RTK — Token Saver dari Rust&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/rtk-ai/rtk&quot;&gt;RTK (Rust Token Killer)&lt;/a&gt; ini hidden gem. single binary Rust yang intercept command output sebelum masuk ke context window Claude. jadi &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git status&lt;/code&gt; yang biasanya makan 200 token, setelah lewat RTK jadi 40 token.&lt;/p&gt;

&lt;p&gt;claim mereka 60-90% token savings. dari experience gw, beneran kerasa — session jadi lebih panjang, context ga cepet penuh.&lt;/p&gt;

&lt;p&gt;install, set hook, lupa. dia kerja di background.&lt;/p&gt;

&lt;h3 id=&quot;5-context7--documentation-yang-selalu-update&quot;&gt;5. Context7 — Documentation yang Selalu Update&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/upstash/context7&quot;&gt;Context7&lt;/a&gt; itu MCP server yang fetch dokumentasi library LANGSUNG dari source, version-specific. jadi kalau lo nanya tentang Next.js 14, dia kasih docs Next.js 14, bukan Next.js 12 yang ada di training data.&lt;/p&gt;

&lt;p&gt;52K stars di GitHub bukan tanpa alasan. ini solve masalah terbesar AI coding: &lt;strong&gt;hallucinated APIs&lt;/strong&gt;.&lt;/p&gt;

&lt;h3 id=&quot;6-shodan-mcp--buat-pentesting&quot;&gt;6. Shodan MCP — buat pentesting&lt;/h3&gt;

&lt;p&gt;ya, gw juga punya Shodan MCP. jadi bisa &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ip_lookup&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cve_lookup&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;dns_lookup&lt;/code&gt; langsung dari Claude Code. buat recon dan research, ini powerful banget.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;yang-gw-pengen-explore-selanjutnya&quot;&gt;yang gw pengen explore selanjutnya&lt;/h2&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/muratcankoylan/agent-skills-for-context-engineering&quot;&gt;agent-skills-for-context-engineering&lt;/a&gt; — ini collection of AI agent skills yang optimize gimana LLM pake context window. 13 skills dari foundational sampe cognitive patterns. idenya bagus: instead of maximizing tokens, optimize ATTENTION. gw belum implement tapi udah di radar.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;daily-workflow-gw&quot;&gt;daily workflow gw&lt;/h2&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;Windows (local)
  └── Claude Code CLI (--dangerously-skip-permissions)
        ├── MCP: GitNexus (self-hosted server)
        ├── MCP: Mem0 (self-hosted, custom server)
        ├── MCP: Playwright (control active browser)
        ├── MCP: Shodan (recon)
        ├── MCP: Context7 (live docs)
        ├── RTK hook (token compression)
        └── SSH → Linux server
              └── tmux sessions
                    ├── development
                    ├── monitoring
                    └── deployment
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;ga ada IDE. ga ada fancy GUI. terminal, MCP, dan AI yang ngerti konteks lo.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;buat-yang-baru-mulai&quot;&gt;buat yang baru mulai&lt;/h2&gt;

&lt;p&gt;kalau lo baru mulai pake AI buat coding dan bingung mau mulai dari mana:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;strong&gt;install Claude Code&lt;/strong&gt; — &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;npm install -g @anthropic-ai/claude-code&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;mulai dari tanpa MCP&lt;/strong&gt; — Claude Code udah powerful sendiri. biasain dulu workflow-nya&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;tambahin MCP satu-satu&lt;/strong&gt; — Context7 paling gampang buat start, tinggal &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;npx ctx7 setup&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;jangan ikut-ikutan hype tool&lt;/strong&gt; — serius, open-claw dan sejenisnya itu mostly wrapper di atas API yang sama. lo ga butuh 15 layer abstraction. lo butuh tool yang KERJA.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;pake &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--dangerously-skip-permissions&lt;/code&gt; kalau lo tau apa yang lo lakuin&lt;/strong&gt; — ini bukan buat pemula, tapi kalau lo udah ngerti risikonya, workflow jadi 10x lebih smooth&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;yang penting: &lt;strong&gt;jadiin AI sebagai partner, bukan magic wand.&lt;/strong&gt; lo tetep harus ngerti code-nya. AI cuma bikin lo lebih cepet sampe sana.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;gw akan terus update setup MCP gw. kalau ada tool baru yang worth it, gw tulis lagi. kalau ada yang sampah, gw bilang juga.&lt;/p&gt;

&lt;p&gt;stay terminal, stay sane. ✌️&lt;/p&gt;
</description>
        <pubDate>Wed, 08 Apr 2026 05:00:00 +0000</pubDate>
        <link>https://k1m0ch1.github.io//2026/mcp-setup-terminal-guys/</link>
        <guid isPermaLink="true">https://k1m0ch1.github.io//2026/mcp-setup-terminal-guys/</guid>
        
        
        <category>ai</category>
        
        <category>mcp</category>
        
        <category>claudecode</category>
        
        <category>blogs</category>
        
        <category>blog</category>
        
      </item>
    
      <item>
        <title>axios kena supply chain attack</title>
        <description>&lt;p&gt;AXIOS kena supply chain attack ANJENGGGG  😂 😂😂😂😂😂😂&lt;/p&gt;

&lt;p&gt;akun master maintenainer&lt;/p&gt;

&lt;p&gt;TL;DR nih gw bikin thread simplenya bro&lt;/p&gt;

&lt;p&gt;https://x.com/BukanYahya/status/2038840805956472884&lt;/p&gt;

&lt;p&gt;bukan bug. bukan salah lo. ada yang masuk ke akun maintainernya, diem-diem publish versi baru yang isinya trojan.&lt;/p&gt;

&lt;p&gt;dan dramanya terjadi live. di depan mata semua orang.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;sedikit-konteks&quot;&gt;sedikit konteks&lt;/h2&gt;

&lt;p&gt;axios itu http client buat javascript. 109k stars, diunduh ratusan juta kali per minggu. hampir ga ada project modern yang ga pake ini.&lt;/p&gt;

&lt;p&gt;makanya ini gede.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;yang-terjadi&quot;&gt;yang terjadi&lt;/h2&gt;

&lt;p&gt;sekitar jam 03:00 UTC, researcher namanya &lt;strong&gt;ashish kurmi&lt;/strong&gt; buka issue di github:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;em&gt;“axios@1.14.1 and axios@0.30.4 are compromised”&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;dua versi baru dipublish ke npm, keduanya bawa &lt;strong&gt;Remote Access Trojan (RAT)&lt;/strong&gt;. bukan celah keamanan, bukan misconfiguration. kode jahatnya langsung disisip ke package yang lo percaya.&lt;/p&gt;

&lt;p&gt;ini supply chain attack.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;cara-kerjanya&quot;&gt;cara kerjanya&lt;/h2&gt;

&lt;p&gt;dari analisa stepsecurity, ternyata lebih rapi dari yang gw kira.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;18 jam sebelum serangan&lt;/strong&gt;, attacker publish dulu package palsu namanya &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;plain-crypto-js@4.2.1&lt;/code&gt; ke npm. package ini ga pernah ada di axios sebelumnya. kenapa? biar waktu axios@1.14.1 tiba-tiba punya dependency baru, ga keliatan aneh-aneh.&lt;/p&gt;

&lt;p&gt;pas lo install axios versi itu, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;plain-crypto-js&lt;/code&gt; ikut masuk. terus dia jalanin &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;postinstall&lt;/code&gt; hook yang aktifin dropper.&lt;/p&gt;

&lt;p&gt;alurnya:&lt;/p&gt;
&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;npm install axios
-&amp;gt; plain-crypto-js ikut masuk
-&amp;gt; postinstall hook jalan otomatis
-&amp;gt; dropper aktif
-&amp;gt; sistem lo dikuasai
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;cross-platform pula. ada payload beda buat windows (vbscript + powershell), macos (applescript), dan linux (python). ga ada yang aman.&lt;/p&gt;

&lt;p&gt;abis dropper jalan, dia hapus dirinya sendiri dan ganti manifest dengan file bersih. ga ada log, ga ada sisa. forensik jadi susah.&lt;/p&gt;

&lt;p&gt;semua platform kirim data ke satu c2 server: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sfrclak.com:8000&lt;/code&gt;.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;drama-live-di-github&quot;&gt;drama live di github&lt;/h2&gt;

&lt;p&gt;ini bagian yang paling gila.&lt;/p&gt;

&lt;p&gt;waktu komunitas mulai rame lapor, issue-nya ilang. bukan dihapus github. tapi dihapus sama si attacker yang masih login sebagai &lt;strong&gt;jasonsaayman&lt;/strong&gt;, maintainer utama axios, buat nutupin jejaknya secara real-time.&lt;/p&gt;

&lt;p&gt;ashish sendiri nulis:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;em&gt;“a maintainer’s GitHub and npm accounts are compromised as these issues are getting deleted”&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;orang-orang liat laporan mereka dihapus langsung di depan mata. untung ada yang sempet screenshot.&lt;/p&gt;

&lt;p&gt;terus &lt;strong&gt;digitalbrain.js&lt;/strong&gt;, kolaborator lain, coba turun tangan. tapi nemuin masalah lebih gede:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;em&gt;“since access to git and npm is compromised, and his git permissions are higher than mine… whatever I fix, he will ‘fix’ it after me.”&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;si attacker punya permission lebih tinggi. jadi ngejar-kejaran real-time antara defender sama attacker di github.&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;03:00 UTC - issue dibuka, mulai viral
03:00-03:20 - attacker hapus issue satu-satu
03:20 UTC - npm revoke semua token jasonsaayman
03:30 UTC - versi malicious dihapus dari registry
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;dari laporan masuk sampai paket dihapus: kurang dari 30 menit.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;soal-jasonsaayman&quot;&gt;soal jasonsaayman&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;jay&lt;/strong&gt; itu maintainer utama axios, dari africa selatan. kontributor open source yang udah lama. ga ada tanda-tanda dia terlibat secara sadar, ini murni credential compromise. kemungkinan phishing atau bocor dari service lain.&lt;/p&gt;

&lt;p&gt;pengingat bahwa maintainer berpengalaman pun bisa jadi korban hal kayak gini.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;ini-bukan-yang-pertama&quot;&gt;ini bukan yang pertama&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;event-stream (2018) - malicious code buat curi bitcoin wallet&lt;/li&gt;
  &lt;li&gt;node-ipc (2022) - maintainer sengaja rusak package karena protes perang ukraine&lt;/li&gt;
  &lt;li&gt;xz-utils (2024) - serangan multi-tahun yang hampir tembus ssh daemon linux&lt;/li&gt;
  &lt;li&gt;axios (2026) - ini&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;polanya sama terus. package populer, trust tinggi, satu titik kegagalan, dampak masif.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;yang-harus-lo-lakuin-sekarang&quot;&gt;yang harus lo lakuin sekarang&lt;/h2&gt;

&lt;p&gt;cek versi lo dulu:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;npm &lt;span class=&quot;nb&quot;&gt;ls &lt;/span&gt;axios
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;kalau hasilnya &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;1.14.1&lt;/code&gt; atau &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.30.4&lt;/code&gt;, update sekarang:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;npm &lt;span class=&quot;nb&quot;&gt;install &lt;/span&gt;axios@1.14.0
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;kalau udah terlanjur install versi itu, anggap sistem lo perlu audit serius. rotasi credentials, cek traffic ke &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sfrclak.com&lt;/code&gt;, dan kalau ini server production pertimbangin reinstall.&lt;/p&gt;

&lt;p&gt;buat CI/CD ke depannya, harusnya ini jadi default:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;npm ci &lt;span class=&quot;nt&quot;&gt;--ignore-scripts&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;kalau nemu axios@1.14.1 di jsdelivr atau unpkg, masih ada di cache, jangan install juga. sama aja.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;kalau lo developer javascript dan belum audit dependencies hari ini, mungkin sekarang waktu yang bagus.&lt;/p&gt;

&lt;p&gt;serangan berikutnya mungkin ga seeksplosif ini. mungkin diem-diem, berbulan-bulan, sebelum ada yang sadar.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;strong&gt;referensi:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/axios/axios/issues/10604&quot;&gt;github issue #10604&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;stepsecurity - axios compromised on npm: malicious versions drop remote access trojan&lt;/li&gt;
  &lt;li&gt;socket.dev - supply chain attack on axios pulls malicious dependency from npm&lt;/li&gt;
  &lt;li&gt;strix ai - our ai traced the axios npm attack and found how the payload hid itself&lt;/li&gt;
&lt;/ul&gt;
</description>
        <pubDate>Tue, 31 Mar 2026 05:00:00 +0000</pubDate>
        <link>https://k1m0ch1.github.io//2026/axios-supply-chain-attack/</link>
        <guid isPermaLink="true">https://k1m0ch1.github.io//2026/axios-supply-chain-attack/</guid>
        
        
        <category>security</category>
        
        <category>blogs</category>
        
        <category>blog</category>
        
        <category>supplychain</category>
        
        <category>nodejs</category>
        
      </item>
    
      <item>
        <title>RFC - Offline First Support for pinpoint map</title>
        <description>&lt;h2 id=&quot;problem-and-motivation&quot;&gt;Problem and Motivation&lt;/h2&gt;

&lt;p&gt;recently I saw this thread https://x.com/radjathaher/status/1997586237683851343 that talking about supporting the disaster response, especially with disaster related with flood at the sumatera some of the reference of the news you could see it here https://www.tempo.co/politik/situasi-belajar-di-sekolah-terdampak-banjir-sumatera-belum-pulih-2097086.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://k1m0ch1.github.io/images/sedih.jpg&quot; alt=&quot;korban banjir&quot; /&gt;&lt;/p&gt;

&lt;p&gt;and some of the survivor having a hardtime to support their family, even for themself, I see some discussion on socmed telling some teenager and some volunteer helping others and sarcificing himself by not eating and drinking until makes their urine become yellow to brown to red, they seeking for help, I’m actually crying to hear about this, while I’m here having a good life, I want to help them, even not giving money is not enough, so I cross upon Radja Thaher thread and he want to do “warga bantu warga”&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://k1m0ch1.github.io/images/xtweet-radja-thaher.png&quot; alt=&quot;invitation letter&quot; /&gt;&lt;/p&gt;

&lt;p&gt;while people on the place having a hardtime to get some internet, this design is to support offline first of the web application&lt;/p&gt;

&lt;h2 id=&quot;proposed-design&quot;&gt;Proposed design&lt;/h2&gt;

&lt;h3 id=&quot;arch-design&quot;&gt;Arch design&lt;/h3&gt;

&lt;p&gt;The design is pretty simple, when user do some action like making a new pinpoint, giving information, every basic CRUD will be stored into indexedDB, for reference you can use this https://github.com/eFishery/pouchy-store the pouchyDB is working kinda like indexedDB, remember pouchDB have not conflict resolution, no built-in conflict resolution logic, pouchyDB is simply edit the same document offline and later sync.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://k1m0ch1.github.io/images/high-level-arch.png&quot; alt=&quot;simple high level&quot; /&gt;&lt;/p&gt;

&lt;p&gt;remember pouchyDB using document database, while indexedDB structure level is using object stores&lt;/p&gt;

&lt;h3 id=&quot;data-model&quot;&gt;Data Model&lt;/h3&gt;

&lt;p&gt;searching on internet, for disaster have 2 important data, p2p report and p2p pinpoint place and I get this data from FEMA (https://www.fema.gov/api/open/v2/DisasterDeclarationsSummaries), so for this simple approach I made example of data Model&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;p2p report 
this is when people want to sent alert, give information, or incident report, here is the basic data model, and people could verify if the report is actually true or not
    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;{
  &quot;_id&quot;: &quot;report:short-uuid&quot;,
  &quot;type&quot;: &quot;report&quot;,
  &quot;category&quot;: &quot;flood&quot;,
  &quot;severity&quot;: &quot;high&quot;,
  &quot;location&quot;: {
 &quot;lat&quot;: -6.2088,
 &quot;lng&quot;: 106.8456
  },
  &quot;description&quot;: &quot;Flooded street, water up to knee&quot;,
  &quot;status&quot;: &quot;active&quot;,
  &quot;verifiers&quot;: [
 {
   &quot;verifiedBy&quot;: &quot;device:userid&quot;,
   &quot;status&quot;: false,
   &quot;description&quot;: &quot;benar kejadian&quot;
 }
  ],
  &quot;createdAt&quot;: &quot;2025-01-01T08:00:00Z&quot;,
  &quot;updatedAt&quot;: &quot;2025-01-01T08:00:00Z&quot;,
  &quot;createdBy&quot;: &quot;device:abc123&quot;,
  &quot;offlineCreated&quot;: true
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;p2p map pinpoint
this is just suggestion for a data model map pinpoint
    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;{
  &quot;_id&quot;: &quot;place:short-uuid&quot;,
  &quot;type&quot;: &quot;place&quot;,
  &quot;placeType&quot;: &quot;shelter&quot;,
  &quot;name&quot;: &quot;Shelter Pengunsi Masjid Nurul Haq Parupuk Tabing&quot;,
  &quot;location&quot;: {
 &quot;lat&quot;: -0.8817378,
 &quot;lng&quot;: 100.3441077
  },
  &quot;capacity&quot;: 200,
  &quot;current_capacity&quot;: 120,
  &quot;resources&quot;: {
 &quot;food&quot;: true,
 &quot;water&quot;: true,
 &quot;medical&quot;: true,
 &quot;bed&quot;: false,
  },
  &quot;lastCheckedAt&quot;: &quot;2025-01-01T07:30:00Z&quot;,
  &quot;verifiedBy&quot;: null,
  &quot;createdAt&quot;: &quot;2025-01-01T06:00:00Z&quot;,
  &quot;updatedAt&quot;: &quot;2025-01-01T07:30:00Z&quot;
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Sync State document
this data model purpose to track replication statuys
    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;{
  &quot;_id&quot;: &quot;_local/sync_state&quot;,
  &quot;type&quot;: &quot;sync_state&quot;,
  &quot;lastPushSeq&quot;: &quot;3456&quot;,
  &quot;lastPullSeq&quot;: &quot;3448&quot;,
  &quot;lastSyncAt&quot;: &quot;2025-01-01T09:30:00Z&quot;,
  &quot;conflictsDetected&quot;: 2
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;h3 id=&quot;important---conflict-resolution&quot;&gt;IMPORTANT - Conflict Resolution&lt;/h3&gt;

&lt;p&gt;we need to make some ruleset on data, to prevent the conflict data, what happen when data conflict happen ? in some cases latest data will be replaced by new data, so to prevent this we need to make some rule based on domain based conflict resolution.&lt;/p&gt;

&lt;p&gt;here is some oveview of the data type:&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Data type&lt;/th&gt;
      &lt;th&gt;Conflict occurance&lt;/th&gt;
      &lt;th&gt;Strategy&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;Map Pinpoint&lt;/td&gt;
      &lt;td&gt;Common&lt;/td&gt;
      &lt;td&gt;only append, or create only with new lang&amp;amp;lot&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Report&lt;/td&gt;
      &lt;td&gt;Rare&lt;/td&gt;
      &lt;td&gt;Field level merge&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;ol&gt;
  &lt;li&gt;Append only&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;why ? multiple people will report the same dissaster, 
what todo ? always create a new one, never edit an existing report, and merging the verifier&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Field Level merge&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;why ? user update some field, merge usually safe
what todo? this will be help when new status resource is added&lt;/p&gt;

&lt;p&gt;!!IMPORTANT NOTES!! for some notes it possible to make auto resolution, usually by doing scheduled or manually operated by operator.&lt;/p&gt;

&lt;p&gt;3 Role based override verification&lt;/p&gt;

&lt;p&gt;this feature is also important in order to choose which data is actually true&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Role&lt;/th&gt;
      &lt;th&gt;Permission&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;Anonymous&lt;/td&gt;
      &lt;td&gt;Can Report, Can pinpoint&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;volunteer&lt;/td&gt;
      &lt;td&gt;update report, update pinpoint&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;simple approach you can using verified=true to set by trusted role&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;another notes
    &lt;ul&gt;
      &lt;li&gt;avoid trying to merge everything&lt;/li&gt;
      &lt;li&gt;proper design data so that conflict rarely occur&lt;/li&gt;
      &lt;li&gt;last write win only when safe&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;h3 id=&quot;technology&quot;&gt;Technology&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Offline data layer (indexedDB) usually used by browser native&lt;/li&gt;
  &lt;li&gt;service worker&lt;/li&gt;
  &lt;li&gt;sync mechanism
    &lt;ul&gt;
      &lt;li&gt;bi-directional sync (example:https://github.com/mikeal/couchup )&lt;/li&gt;
      &lt;li&gt;retry on failure&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;sync trigger
    &lt;ul&gt;
      &lt;li&gt;app startup&lt;/li&gt;
      &lt;li&gt;network available&lt;/li&gt;
      &lt;li&gt;manual user action&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;database couchDB 3.x
    &lt;ul&gt;
      &lt;li&gt;remember https enabled&lt;/li&gt;
      &lt;li&gt;and secured with credential&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;database configuration
    &lt;ul&gt;
      &lt;li&gt;separate database by domain, report, places, etc&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;data integrity
    &lt;ul&gt;
      &lt;li&gt;timestamp all document&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;
</description>
        <pubDate>Mon, 08 Dec 2025 09:01:00 +0000</pubDate>
        <link>https://k1m0ch1.github.io//2025/offline-first-support-map/</link>
        <guid isPermaLink="true">https://k1m0ch1.github.io//2025/offline-first-support-map/</guid>
        
        
        <category>projects</category>
        
        <category>project</category>
        
      </item>
    
      <item>
        <title>Software Risk Calculator</title>
        <description>&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
    &lt;meta charset=&quot;UTF-8&quot;&gt;
    &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
    &lt;title&gt;Risk Scoring Calculator&lt;/title&gt;
    &lt;style&gt;
        body {
            font-family: Arial, sans-serif;
            padding: 20px;
            max-width: 600px;
            margin: auto;
        }
        h2 {
            text-align: center;
        }
        .section {
            margin-bottom: 20px;
        }
        label {
            font-weight: bold;
        }
        select, input {
            margin-top: 10px;
            display: block;
            width: 100%;
            padding: 10px;
            margin-bottom: 10px;
        }
        .result {
            font-size: 1.5em;
            font-weight: bold;
            text-align: center;
            margin-top: 20px;
        }
        .risk-label {
            font-size: 1.2em;
            font-weight: bold;
            text-align: center;
            margin-top: 10px;
        }
        .formula {
            margin-top: 20px;
            font-size: 1em;
        }
    &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;

&lt;h2&gt;Risk Scoring Calculator&lt;/h2&gt;

&lt;div class=&quot;section&quot;&gt;
    &lt;label&gt;Vulnerability Score&lt;/label&gt;
    &lt;div&gt;
        &lt;label for=&quot;confidentiality&quot;&gt;Confidentiality:&lt;/label&gt;
        &lt;select id=&quot;confidentiality&quot; onchange=&quot;updateFormula()&quot;&gt;
            &lt;option value=&quot;L&quot;&gt;Low (1) - None or slightly corrupt data&lt;/option&gt;
            &lt;option value=&quot;M&quot;&gt;Medium (3) - Minor Corupt Data&lt;/option&gt;
            &lt;option value=&quot;H&quot;&gt;High (5) - Major Corrupt Data&lt;/option&gt;
        &lt;/select&gt;
    &lt;/div&gt;
    &lt;div&gt;
        &lt;label for=&quot;integrity&quot;&gt;Integrity:&lt;/label&gt;
        &lt;select id=&quot;integrity&quot; onchange=&quot;updateFormula()&quot;&gt;
            &lt;option value=&quot;L&quot;&gt;Low (1) - None or slightly corrupt data&lt;/option&gt;
            &lt;option value=&quot;M&quot;&gt;Medium (3) - Minor Corupt Data&lt;/option&gt;
            &lt;option value=&quot;H&quot;&gt;High (5) - Major Corrupt Data&lt;/option&gt;
        &lt;/select&gt;
    &lt;/div&gt;
    &lt;div&gt;
        &lt;label for=&quot;availability&quot;&gt;Availability:&lt;/label&gt;
        &lt;select id=&quot;availability&quot; onchange=&quot;updateFormula()&quot;&gt;
            &lt;option value=&quot;L&quot;&gt;Low (1) - None or Minimal secondary services interrupted&lt;/option&gt;
            &lt;option value=&quot;M&quot;&gt;Medium (3) - Minor service interrupted&lt;/option&gt;
            &lt;option value=&quot;H&quot;&gt;High (5) - Extensive primary services interrupted&lt;/option&gt;
        &lt;/select&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;section&quot;&gt;
    &lt;label&gt;Impact Score&lt;/label&gt;
    &lt;div&gt;
        &lt;label for=&quot;businessDependency&quot;&gt;Business Dependency:&lt;/label&gt;
        &lt;select id=&quot;businessDependency&quot; onchange=&quot;updateFormula()&quot;&gt;
            &lt;option value=&quot;1&quot;&gt;Non-essential service, little to no impact on operations (1)&lt;/option&gt;
            &lt;option value=&quot;2&quot;&gt;Minor service, some effect but not critical (2)&lt;/option&gt;
            &lt;option value=&quot;3&quot;&gt;Important but not critical to day-to-day operations (3)&lt;/option&gt;
            &lt;option value=&quot;4&quot;&gt;Core business function, significant disruption (4)&lt;/option&gt;
            &lt;option value=&quot;5&quot;&gt;Mission-critical service, halts business operations (5)&lt;/option&gt;
        &lt;/select&gt;
    &lt;/div&gt;
    &lt;div&gt;
        &lt;label for=&quot;technicalDependency&quot;&gt;Technical Dependency:&lt;/label&gt;
        &lt;select id=&quot;technicalDependency&quot; onchange=&quot;updateFormula()&quot;&gt;
            &lt;option value=&quot;1&quot;&gt;Good architecture, no issues (1)&lt;/option&gt;
            &lt;option value=&quot;2&quot;&gt;Minor technical issues (2)&lt;/option&gt;
            &lt;option value=&quot;3&quot;&gt;Frequent errors, some issues (3)&lt;/option&gt;
            &lt;option value=&quot;4&quot;&gt;Single point of failure, poor architecture (4)&lt;/option&gt;
            &lt;option value=&quot;5&quot;&gt;Highly unreliable, frequent breakdowns (5)&lt;/option&gt;
        &lt;/select&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;section&quot;&gt;
    &lt;label for=&quot;frequencyScore&quot;&gt;Frequency Score&lt;/label&gt;
    &lt;select id=&quot;frequencyScore&quot; onchange=&quot;updateFormula()&quot;&gt;
        &lt;option value=&quot;1&quot;&gt;Once a year (1)&lt;/option&gt;
        &lt;option value=&quot;2&quot;&gt;Twice a year (2)&lt;/option&gt;
        &lt;option value=&quot;3&quot;&gt;3-5 times a year (3)&lt;/option&gt;
        &lt;option value=&quot;4&quot;&gt;Monthly, or more than 5 times a year (4)&lt;/option&gt;
        &lt;option value=&quot;5&quot;&gt;Constant or frequent (5)&lt;/option&gt;
    &lt;/select&gt;
&lt;/div&gt;

&lt;div class=&quot;section&quot;&gt;
    &lt;label for=&quot;recoverabilityScore&quot;&gt;Recoverability Score&lt;/label&gt;
    &lt;select id=&quot;recoverabilityScore&quot; onchange=&quot;updateFormula()&quot;&gt;
        &lt;option value=&quot;1&quot;&gt;Instant recovery, automated rollback, minimal manual intervention (1)&lt;/option&gt;
        &lt;option value=&quot;2&quot;&gt;Quick recovery within an hour (2)&lt;/option&gt;
        &lt;option value=&quot;3&quot;&gt;Recovery within a day with some manual intervention (3)&lt;/option&gt;
        &lt;option value=&quot;4&quot;&gt;Requires multiple teams and takes more than a day (4)&lt;/option&gt;
        &lt;option value=&quot;5&quot;&gt;Long, complex recovery process, requiring days or weeks, potentially involving 3rd-party vendors or rearchitecting (5)&lt;/option&gt;
    &lt;/select&gt;
&lt;/div&gt;

&lt;div class=&quot;result&quot; id=&quot;riskResult&quot;&gt;Risk Score: -&lt;/div&gt;
&lt;div class=&quot;risk-label&quot; id=&quot;riskLabel&quot;&gt;&lt;/div&gt;

&lt;div class=&quot;formula&quot;&gt;
    &lt;label for=&quot;formulaTextbox&quot;&gt;Formula:&lt;/label&gt;
    &lt;input type=&quot;text&quot; id=&quot;formulaTextbox&quot; oninput=&quot;applyFormula()&quot;&gt;
&lt;/div&gt;

&lt;script&gt;
    // Function to generate the formula and update the textbox
    function updateFormula() {
        const confidentiality = document.getElementById(&apos;confidentiality&apos;).value;
        const integrity = document.getElementById(&apos;integrity&apos;).value;
        const availability = document.getElementById(&apos;availability&apos;).value;

        const businessDependency = document.getElementById(&apos;businessDependency&apos;).value;
        const technicalDependency = document.getElementById(&apos;technicalDependency&apos;).value;

        const frequencyScore = document.getElementById(&apos;frequencyScore&apos;).value;
        const recoverabilityScore = document.getElementById(&apos;recoverabilityScore&apos;).value;

        const formula = `VS-C${confidentiality}-I${integrity}-A${availability}:IS-B${businessDependency}-T${technicalDependency}:F${frequencyScore}:R${recoverabilityScore}`;
        document.getElementById(&apos;formulaTextbox&apos;).value = formula;

        // Calculate risk score with updated logic
        calculateRiskScore(confidentiality, integrity, availability, businessDependency, technicalDependency, frequencyScore, recoverabilityScore);
    }

    // Function to calculate and display the risk score and level
    function calculateRiskScore(confidentiality, integrity, availability, businessDependency, technicalDependency, frequencyScore, recoverabilityScore) {
        // Convert select values to numerical equivalents for score calculation
        const confidentialityScore = { &apos;L&apos;: 1, &apos;M&apos;: 3, &apos;H&apos;: 5 }[confidentiality];
        const integrityScore = { &apos;L&apos;: 1, &apos;M&apos;: 3, &apos;H&apos;: 5 }[integrity];
        const availabilityScore = { &apos;L&apos;: 1, &apos;M&apos;: 3, &apos;H&apos;: 5 }[availability];

        // Vulnerability score average
        let vulnerabilityScore = (confidentialityScore + integrityScore + availabilityScore) / 3;

        // Get impact score values
        const businessDependencyScore = parseInt(businessDependency);
        const technicalDependencyScore = parseInt(technicalDependency);

        // If both business and technical dependency are high (4 or 5), force the total risk to be high
        if (businessDependencyScore &gt;= 4 &amp;&amp; technicalDependencyScore &gt;= 4) {
            document.getElementById(&apos;riskResult&apos;).textContent = `Risk Score: High (Due to Business/Technical Dependency)`;
            document.getElementById(&apos;riskLabel&apos;).textContent = `Risk Level: HIGH`;
            return; // Skip further calculations if forced high
        }

        // If only technical dependency is high, but business dependency is less than 4, follow common formula
        if (technicalDependencyScore &gt;= 4 &amp;&amp; businessDependencyScore &lt; 4) {
            const impactScore = (businessDependencyScore + technicalDependencyScore) / 2;
            const frequency = parseInt(frequencyScore);
            const recoverability = parseInt(recoverabilityScore);

            // Calculate the final Risk Score
            const riskScore = ((vulnerabilityScore + impactScore + frequency + recoverability) / 4).toFixed(2);

            // Display the risk score
            document.getElementById(&apos;riskResult&apos;).textContent = `Risk Score: ${riskScore}`;

            // Determine and display risk level
            let riskLevel;
            if (riskScore &gt;= 1 &amp;&amp; riskScore &lt;= 2.49) {
                riskLevel = &apos;LOW&apos;;
            } else if (riskScore &gt;= 2.5 &amp;&amp; riskScore &lt;= 3.49) {
                riskLevel = &apos;MEDIUM&apos;;
            } else {
                riskLevel = &apos;HIGH&apos;;
            }
            document.getElementById(&apos;riskLabel&apos;).textContent = `Risk Level: ${riskLevel}`;
            return;
        }

        // For other cases, follow the common risk calculation
        const impactScore = (businessDependencyScore + technicalDependencyScore) / 2;
        const frequency = parseInt(frequencyScore);
        const recoverability = parseInt(recoverabilityScore);

        // Calculate the final Risk Score
        const riskScore = ((vulnerabilityScore + impactScore + frequency + recoverability) / 4).toFixed(2);

        // Display the risk score
        document.getElementById(&apos;riskResult&apos;).textContent = `Risk Score: ${riskScore}`;

        // Determine and display risk level
        let riskLevel;
        if (riskScore &gt;= 1 &amp;&amp; riskScore &lt;= 2.49) {
            riskLevel = &apos;LOW&apos;;
        } else if (riskScore &gt;= 2.5 &amp;&amp; riskScore &lt;= 3.49) {
            riskLevel = &apos;MEDIUM&apos;;
        } else {
            riskLevel = &apos;HIGH&apos;;
        }
        document.getElementById(&apos;riskLabel&apos;).textContent = `Risk Level: ${riskLevel}`;
    }

    // Function to parse the formula and update the select elements
    function applyFormula() {
        const formula = document.getElementById(&apos;formulaTextbox&apos;).value;

        try {
            const parts = formula.split(&apos;:&apos;);
            
            // Parse Vulnerability Score
            const vulnerabilityPart = parts[0].split(&apos;-&apos;);
            document.getElementById(&apos;confidentiality&apos;).value = vulnerabilityPart[1].substring(1);
            document.getElementById(&apos;integrity&apos;).value = vulnerabilityPart[2].substring(1);
            document.getElementById(&apos;availability&apos;).value = vulnerabilityPart[3].substring(1);
            
            // Parse Impact Score
            const impactPart = parts[1].split(&apos;-&apos;);
            document.getElementById(&apos;businessDependency&apos;).value = impactPart[1].substring(1);
            document.getElementById(&apos;technicalDependency&apos;).value = impactPart[2].substring(1);
            
            // Parse Frequency Score
            document.getElementById(&apos;frequencyScore&apos;).value = parts[2].substring(1);

            // Parse Recoverability Score
            document.getElementById(&apos;recoverabilityScore&apos;).value = parts[3].substring(1);

            // Update risk score and level after applying formula
            updateFormula();
        } catch (error) {
            console.error(&apos;Invalid formula format.&apos;);
        }
    }

    // Initial formula generation
    updateFormula();


&lt;/script&gt;

&lt;/body&gt;
&lt;/html&gt;
</description>
        <pubDate>Sat, 07 Sep 2024 05:55:00 +0000</pubDate>
        <link>https://k1m0ch1.github.io//2024/software-risk-calculator/</link>
        <guid isPermaLink="true">https://k1m0ch1.github.io//2024/software-risk-calculator/</guid>
        
        
        <category>risk,</category>
        
        <category>software,</category>
        
      </item>
    
      <item>
        <title>Axolotl - Easy Pentesting Record</title>
        <description>&lt;p&gt;Project: https://github.com/k1m0ch1/axolotl&lt;/p&gt;
</description>
        <pubDate>Wed, 13 Apr 2022 09:01:00 +0000</pubDate>
        <link>https://k1m0ch1.github.io//2022/Axolotl-pentest-report/</link>
        <guid isPermaLink="true">https://k1m0ch1.github.io//2022/Axolotl-pentest-report/</guid>
        
        
        <category>projects</category>
        
        <category>project</category>
        
      </item>
    
      <item>
        <title>Big Brother Test - Application Reverse Engineering to check the privacy</title>
        <description>&lt;p&gt;Project: https://github.com/k1m0ch1/big-brother-test
video on youtube: https://www.youtube.com/watch?v=KExoyqgB1Bk
Talk on twitter Thread: https://twitter.com/BukanYahya/status/1442354055125225477&lt;/p&gt;
</description>
        <pubDate>Tue, 21 Sep 2021 09:01:00 +0000</pubDate>
        <link>https://k1m0ch1.github.io//2021/Big-brother-test/</link>
        <guid isPermaLink="true">https://k1m0ch1.github.io//2021/Big-brother-test/</guid>
        
        
        <category>projects</category>
        
        <category>project</category>
        
      </item>
    
      <item>
        <title>Jemawa - menti choose spammer</title>
        <description>&lt;p&gt;Project: https://github.com/k1m0ch1/jemawa-menti-choices-spammer&lt;/p&gt;
</description>
        <pubDate>Tue, 10 Aug 2021 09:01:00 +0000</pubDate>
        <link>https://k1m0ch1.github.io//2021/Jemawa-menti-spammer/</link>
        <guid isPermaLink="true">https://k1m0ch1.github.io//2021/Jemawa-menti-spammer/</guid>
        
        
        <category>projects</category>
        
        <category>project</category>
        
      </item>
    
      <item>
        <title>Vaksin Jakarta API</title>
        <description>&lt;p&gt;Project: https://github.com/k1m0ch1/vaksin-jakarta
Talk on twitter Thread: https://twitter.com/mathdroid/status/1411712464916414467&lt;/p&gt;
</description>
        <pubDate>Fri, 30 Jul 2021 09:01:00 +0000</pubDate>
        <link>https://k1m0ch1.github.io//2021/vaksin-jakarta-api/</link>
        <guid isPermaLink="true">https://k1m0ch1.github.io//2021/vaksin-jakarta-api/</guid>
        
        
        <category>projects</category>
        
        <category>project</category>
        
      </item>
    
  </channel>
</rss>
