<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Security on The David Page</title><link>https://thedavidpage.pages.dev/tags/security/</link><description>Recent content in Security on The David Page</description><generator>Hugo -- gohugo.io</generator><language>en</language><lastBuildDate>Sun, 02 Aug 2026 08:00:00 +0700</lastBuildDate><atom:link href="https://thedavidpage.pages.dev/tags/security/index.xml" rel="self" type="application/rss+xml"/><item><title>AWS Lambda's /tmp Directory Isn't as Clean as You Think</title><link>https://thedavidpage.pages.dev/posts/cloud/aws/lambda/lambda-tmp-warm-start-persistence/</link><pubDate>Sun, 02 Aug 2026 08:00:00 +0700</pubDate><guid>https://thedavidpage.pages.dev/posts/cloud/aws/lambda/lambda-tmp-warm-start-persistence/</guid><description>&lt;p&gt;&lt;strong&gt;Assuming every Lambda invocation runs in a fresh, isolated environment is a very reasonable guess. It&amp;rsquo;s also wrong.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Hi everyone 👋&lt;/p&gt;
&lt;p&gt;A lot of developers write Lambda functions on the assumption that each invocation starts in a completely clean, isolated sandbox — new environment, empty disk, nothing left behind from whatever ran before. That assumption is exactly what &amp;ldquo;serverless&amp;rdquo; seems to promise. It isn&amp;rsquo;t quite what happens.&lt;/p&gt;
&lt;h2 id="-whats-actually-happening-warm-starts"&gt;🔍 What&amp;rsquo;s actually happening: warm starts&lt;/h2&gt;
&lt;p&gt;To keep invocations fast, Lambda reuses the same underlying execution environment (container) for consecutive invocations whenever it can — this is a &lt;strong&gt;warm start&lt;/strong&gt;, as opposed to spinning up a brand-new one from scratch (a &lt;strong&gt;cold start&lt;/strong&gt;). Reusing the container is exactly what makes warm invocations fast.&lt;/p&gt;</description></item><item><title>The IMDSv2 Hop Limit Trap When Running Containers on EC2</title><link>https://thedavidpage.pages.dev/posts/cloud/aws/ec2/imdsv2-hop-limit-container/</link><pubDate>Sat, 01 Aug 2026 18:00:00 +0700</pubDate><guid>https://thedavidpage.pages.dev/posts/cloud/aws/ec2/imdsv2-hop-limit-container/</guid><description>&lt;p&gt;&lt;strong&gt;Switching to IMDSv2 is the right security move, full stop. Do it on an EC2 instance running Docker containers, though, and the app inside loses access to its IAM Role credentials immediately.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Hi everyone 👋&lt;/p&gt;
&lt;p&gt;Upgrading from IMDSv1 to IMDSv2 is standard, correct security guidance — it closes off a real class of credential-theft attacks against the EC2 instance metadata service. But flipping that switch on an instance that runs its application inside a Docker container can break AWS SDK access instantly, with no obvious explanation in the error message.&lt;/p&gt;</description></item><item><title>iam:PassRole + Wildcard: The Privilege Escalation Hiding in Plain Sight</title><link>https://thedavidpage.pages.dev/posts/cloud/aws/iam/iam-passrole-privilege-escalation/</link><pubDate>Sat, 01 Aug 2026 09:00:00 +0700</pubDate><guid>https://thedavidpage.pages.dev/posts/cloud/aws/iam/iam-passrole-privilege-escalation/</guid><description>&lt;p&gt;&lt;strong&gt;A developer account with nothing but &lt;code&gt;lambda:CreateFunction&lt;/code&gt; and a wildcard &lt;code&gt;iam:PassRole&lt;/code&gt; can walk itself up to full Administrator — no exploit, no misconfigured bucket, just permissions doing exactly what they were asked to do.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Hi everyone 👋&lt;/p&gt;
&lt;p&gt;This one doesn&amp;rsquo;t show up as a vulnerability scan finding or a CVE — it&amp;rsquo;s a permissions grant that looks completely reasonable in a policy review, right up until someone connects the dots.&lt;/p&gt;
&lt;h2 id="-the-convenient-habit"&gt;😱 The convenient habit&lt;/h2&gt;
&lt;p&gt;To make deployments easier, it&amp;rsquo;s extremely common to grant developer accounts &lt;code&gt;iam:PassRole&lt;/code&gt; against &lt;code&gt;*&lt;/code&gt; (a wildcard covering every role in the account). The reasoning is simple and, on its own, sounds harmless: developers need to attach an IAM role to whatever they deploy — a Lambda function, an EC2 instance — and wildcarding &lt;code&gt;PassRole&lt;/code&gt; means nobody has to update a policy every time a new role gets created.&lt;/p&gt;</description></item></channel></rss>