<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>Tech with Ugur</title><description>Hands-on labs in cybersecurity, AI, and observability</description><link>https://techwithugur.dev/</link><item><title>GitOps That Survives Bad Days: Flux, Helm, encrypted secrets, and self-healing rollbacks</title><link>https://techwithugur.dev/posts/flux-helm-gitops/</link><guid isPermaLink="true">https://techwithugur.dev/posts/flux-helm-gitops/</guid><description>Every Flux quickstart stops at the happy path. This laptop-sized lab breaks a Helm-based GitOps loop five ways on purpose — plaintext secrets, migration hooks, a broken upgrade, the dreaded stuck release, and manual drift — and shows the exact recovery mechanics for each.</description><pubDate>Wed, 19 Aug 2026 00:00:00 GMT</pubDate></item><item><title>Break a Vulnerable App on Kubernetes: Recon to RCE With OSS Tools</title><link>https://techwithugur.dev/posts/k8s-appsec-exploit/</link><guid isPermaLink="true">https://techwithugur.dev/posts/k8s-appsec-exploit/</guid><description>One URL, a throwaway Kubernetes cluster, and only open-source tools. Scan a live app with nuclei, then turn each finding into a stolen SSN, a root shell, a leaked API key, and a crashed pod — every step reproducible on your laptop.</description><pubDate>Wed, 19 Aug 2026 00:00:00 GMT</pubDate></item><item><title>Catch It Before Prod: A Layered OSS Scanning Gauntlet for Kubernetes Apps</title><link>https://techwithugur.dev/posts/k8s-appsec-scanning/</link><guid isPermaLink="true">https://techwithugur.dev/posts/k8s-appsec-scanning/</guid><description>The same vulnerable app from the exploit lab, caught for free — before any of it runs. Gitleaks and Semgrep on the source, Trivy on the build, and a Kyverno gate that refuses to admit the bad image. One command runs the whole gauntlet on your laptop and diffs vulnerable against hardened.</description><pubDate>Wed, 19 Aug 2026 00:00:00 GMT</pubDate></item><item><title>Deep Research on Your Own Laptop</title><link>https://techwithugur.dev/posts/local-deep-research/</link><guid isPermaLink="true">https://techwithugur.dev/posts/local-deep-research/</guid><description>OpenAI and Google will run &apos;deep research&apos; for you in their cloud. This lab builds the miniature version — a LangGraph Deep Agents CLI in TypeScript, driven entirely by a 4B model in Ollama — and documents every trick it takes to make a small local model actually finish the loop.</description><pubDate>Tue, 18 Aug 2026 00:00:00 GMT</pubDate></item><item><title>You Stripped the JavaScript. The CSS Still Stole the Token.</title><link>https://techwithugur.dev/posts/css-webmail-exfil/</link><guid isPermaLink="true">https://techwithugur.dev/posts/css-webmail-exfil/</guid><description>A webmail client that removes every &lt;script&gt; from an email can still hand an attacker your CSRF token — one character at a time — using nothing but CSS. Here&apos;s the attack, running locally, and the three-layer fix that stops it.</description><pubDate>Mon, 17 Aug 2026 00:00:00 GMT</pubDate></item><item><title>Your Package Manager Runs Code at Install Time: a sandbox that catches the credential grab</title><link>https://techwithugur.dev/posts/supply-chain-egress-sandbox/</link><guid isPermaLink="true">https://techwithugur.dev/posts/supply-chain-egress-sandbox/</guid><description>A malicious Python package doesn&apos;t wait for you to import it — its setup.py runs at pip install time and can ship your credentials out first. Here&apos;s a laptop-sized sandbox that lets the install succeed while blocking and naming the leak.</description><pubDate>Mon, 17 Aug 2026 00:00:00 GMT</pubDate></item><item><title>The Python Bytecode Blind Spot: when the source you scan isn&apos;t the code that runs</title><link>https://techwithugur.dev/posts/python-bytecode-blindspot/</link><guid isPermaLink="true">https://techwithugur.dev/posts/python-bytecode-blindspot/</guid><description>A source-only scanner reads your .py files, but Python runs bytecode — and a shipped .pyc can diverge from its source so the code that executes is not the code you reviewed.</description><pubDate>Sat, 15 Aug 2026 00:00:00 GMT</pubDate></item></channel></rss>