<?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"><channel><title><![CDATA[Abhinav Yadav]]></title><description><![CDATA[Abhinav Yadav]]></description><link>https://yadui.hashnode.dev</link><generator>RSS for Node</generator><lastBuildDate>Sat, 07 Nov 2026 12:56:11 GMT</lastBuildDate><atom:link href="https://yadui.hashnode.dev/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[Always Set persist-credentials: false in actions/checkout]]></title><description><![CDATA[Set persist-credentials: false in actions/checkout. The default leaves a GitHub token on disk for later steps. The fix, and how to still git push.]]></description><link>https://yadui.hashnode.dev/always-set-persist-credentials-false-in-actions-checkout</link><guid isPermaLink="true">https://yadui.hashnode.dev/always-set-persist-credentials-false-in-actions-checkout</guid><category><![CDATA[github-actions]]></category><dc:creator><![CDATA[Abhinav Yadav]]></dc:creator><pubDate>Fri, 30 Oct 2026 17:44:13 GMT</pubDate><content:encoded><![CDATA[<p>There's a default in `actions/checkout` that most teams never change — and that quietly leaves a GitHub token sitting in a readable file for every subsequent step in the job.</p>
<p>The fix is one line. The reasoning is worth understanding.</p>
<h2>What the full guide covers</h2>
<ul>
<li>The Setting</li>
<li>What the File Looks Like</li>
<li>How Easy It Is to Exploit</li>
<li>The Practical Risk</li>
<li>What If I Need Git Auth in Later Steps?</li>
<li>Pinning Actions by Commit SHA</li>
<li>Automated Detection</li>
<li>Checklist</li>
</ul>
<p><strong>Read the complete guide, with commands and sources, on my site: <a href="https://yadui.dev/blog/github-actions-persist-credentials-security">Always Set persist-credentials: false in actions/checkout</a></strong></p>
<p><em>Written by Abhinav Yadav, Cloud &amp; AI Engineer. More at <a href="https://yadui.dev">yadui.dev</a>.</em></p>
]]></content:encoded></item><item><title><![CDATA[Stop giving AI agents your production keys]]></title><description><![CDATA[CERT-In says AI agents reached live systems through exposed keys and broad cloud roles. How to scope AI agent credentials, identity and egress.]]></description><link>https://yadui.hashnode.dev/stop-giving-ai-agents-your-production-keys</link><guid isPermaLink="true">https://yadui.hashnode.dev/stop-giving-ai-agents-your-production-keys</guid><category><![CDATA[AI]]></category><dc:creator><![CDATA[Abhinav Yadav]]></dc:creator><pubDate>Fri, 30 Oct 2026 17:43:48 GMT</pubDate><content:encoded><![CDATA[<p>On 15 October 2026, CERT-In issued advisory <a href="https://www.cert-in.org.in/s2cMainServlet?VLCODE=CIAD-2026-0049&amp;pageid=PUBVLNOTES02">CIAD-2026-0049</a>, rated critical, titled "AI Agents as Attack Vectors". It describes two kinds of incident, and both come down to how AI agent credentials are exposed and scoped.</p>
<p>In the first, AI model providers voluntarily disclosed that their models, during research and evaluation on the internet, reached the live systems of Indian organizations. The advisory says the agents read business records, including personal data and confidential material, using credentials and connection settings exposed in application configuration and public code repositories, and through permissive cloud service roles. It states that the agents' actions exceeded their assigned tasks and that none of the affected organizations detected the access themselves.</p>
<h2>What the full guide covers</h2>
<ul>
<li>What CERT-In reported</li>
<li>Two sides of the same problem</li>
<li>Step 1: find the keys you already leaked</li>
<li>Step 2: replace stored secrets with workload identity</li>
<li>Step 3: one identity per agent run, scoped to the task</li>
<li>Step 4: default-deny egress, enforced by the network</li>
<li>Step 5: logs the agent cannot edit</li>
<li>A short checklist</li>
</ul>
<p><strong>Read the complete guide, with commands and sources, on my site: <a href="https://yadui.dev/blog/stop-giving-ai-agents-production-keys">Stop giving AI agents your production keys</a></strong></p>
<p><em>Written by Abhinav Yadav, Cloud &amp; AI Engineer. More at <a href="https://yadui.dev">yadui.dev</a>.</em></p>
]]></content:encoded></item><item><title><![CDATA[PHP2Shell: a practical patch and check guide for PHP servers]]></title><description><![CDATA[Is your PHP server exposed to PHP2Shell? Check your version, patch to 8.5.12, 8.4.27, 8.3.36 or 8.2.35, and apply the one-line fix for CVE-2026-115560]]></description><link>https://yadui.hashnode.dev/php2shell-a-practical-patch-and-check-guide-for-php-servers</link><guid isPermaLink="true">https://yadui.hashnode.dev/php2shell-a-practical-patch-and-check-guide-for-php-servers</guid><category><![CDATA[PHP]]></category><dc:creator><![CDATA[Abhinav Yadav]]></dc:creator><pubDate>Fri, 30 Oct 2026 17:43:23 GMT</pubDate><content:encoded><![CDATA[<p>PHP2Shell is the nickname for CVE-2026-109618 and CVE-2026-109619. On October 21, 2026, the PHP project shipped emergency releases, PHP 8.5.12, 8.4.27, 8.3.36 and 8.2.35, to fix two critical flaws that it says "can allow unauthenticated remote code execution" (<a href="https://www.php.net/archive/2026.php#2026-10-21-5">PHP security advisory</a>). The day before, PHP had given <a href="https://www.php.net/archive/2026.php#2026-10-20-1">advance notice</a> that both were rated CVSS v4.0 9.2. If you upgrade, also rotate any secrets a compromised host could have read; the <a href="https://yadui.dev/blog/railway-emudhra-sbi-breaches-explained">Railway breach the same week</a> shows why.</p>
<p>Two days later, on October 23, PHP published a short <a href="https://www.php.net/archive/2026.php#2026-10-23-1">informational advisory</a> about a separate issue, CVE-2026-115560. It is not fixed by the October 21 releases. PHP calls it "an unlikely RCE vector" and is handling it in the regular release cycle rather than with another emergency release.</p>
<h2>What the full guide covers</h2>
<ul>
<li>What happened</li>
<li>Who is exposed</li>
<li>What attackers are doing</li>
<li>The checklist</li>
<li>What comes next</li>
</ul>
<p><strong>Read the complete guide, with commands and sources, on my site: <a href="https://yadui.dev/blog/php2shell-cve-2026-109618-109619-patch-guide">PHP2Shell: a practical patch and check guide for PHP servers</a></strong></p>
<p><em>Written by Abhinav Yadav, Cloud &amp; AI Engineer. More at <a href="https://yadui.dev">yadui.dev</a>.</em></p>
]]></content:encoded></item><item><title><![CDATA[LiteLLM 1.107.0 compromise: incident response guide]]></title><description><![CDATA[The LiteLLM 1.107.0 compromise ran at Python startup. How to investigate safely, rebuild, rotate keys and close the gaps the attack chain exposed.]]></description><link>https://yadui.hashnode.dev/litellm-1-107-0-compromise-incident-response-guide</link><guid isPermaLink="true">https://yadui.hashnode.dev/litellm-1-107-0-compromise-incident-response-guide</guid><category><![CDATA[Python]]></category><category><![CDATA[Security]]></category><category><![CDATA[AI]]></category><category><![CDATA[Devops]]></category><dc:creator><![CDATA[Abhinav Yadav]]></dc:creator><pubDate>Fri, 30 Oct 2026 17:40:32 GMT</pubDate><content:encoded><![CDATA[<p>The LiteLLM 1.107.0 compromise began on October 21, 2026, when a compromised <code>litellm==1.107.0</code> was published to PyPI and to LiteLLM's container registries. LiteLLM's <a href="https://docs.litellm.ai/blog/security-incident-oct-21-2026">incident post</a> states that earlier versions are safe, that the affected releases were pulled, and that customers on the private enterprise release were not affected. Its <a href="https://docs.litellm.ai/blog/security-incident-oct-21-2026-attack-chain">attack-chain post</a> says the artifacts were live for about two hours: PyPI releases were frozen by 13:23 UTC and Docker images removed by 14:20 UTC.</p>
<p>Two hours is enough. LiteLLM is commonly deployed as a gateway between applications and model providers, and <a href="https://www.microsoft.com/en-us/security/blog/2026/10/23/inside-the-litellm-1-107-0-supply-chain-compromise-credential-theft-through-python-startup-hooks/">Microsoft's analysis</a> notes that in that position it may hold model-provider API keys, database connection strings, workload identities and routing configuration. The same package also sits on developer laptops and build agents. If you run an AI gateway, treat this as a template for the next incident, whichever package it is.</p>
<h2>What the full guide covers</h2>
<ul>
<li>What happened</li>
<li>Why "I never imported it" is not a defence</li>
<li>What the collector went after</li>
<li>Response, in order</li>
<li>Hardening that would have narrowed the blast radius</li>
<li>The lesson upstream: one unrevoked key, one unscoped token</li>
</ul>
<p><strong>Read the complete guide, with commands and sources, on my site: <a href="https://yadui.dev/blog/litellm-1-107-0-incident-response-ai-gateways">LiteLLM 1.107.0 compromise: incident response guide</a></strong></p>
<p><em>Written by Abhinav Yadav, Cloud &amp; AI Engineer. More at <a href="https://yadui.dev">yadui.dev</a>.</em></p>
]]></content:encoded></item></channel></rss>