<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>aws:SourceIp on SILO</title>
    <link>https://silo.pgsty.com/tags/awssourceip/</link>
    <description>Recent content in aws:SourceIp on SILO</description>
    <generator>Hugo</generator>
    <language>en</language>
    
    
    
      <lastBuildDate>Sat, 24 Oct 2026 18:19:49 +0800</lastBuildDate>
    
    
      <atom:link href="https://silo.pgsty.com/tags/awssourceip/index.xml" rel="self" type="application/rss+xml" />
    
    <item>
        <title>SN-2026-018: Client Source Address Trust, Forwarded Headers, and aws:SourceIp</title>
        <link>https://silo.pgsty.com/blog/security/source-address-trust/</link>
        <pubDate>Tue, 04 Aug 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/security/source-address-trust/</guid>
        <description>&lt;p&gt;&lt;strong&gt;&lt;code&gt;SN-2026-018&lt;/code&gt;&lt;/strong&gt; addresses client source-IP spoofing across &lt;code&gt;aws:SourceIp&lt;/code&gt; IAM conditions, audit logs, bucket notification events, and admin HTTP traces in &lt;a href=&#34;https://github.com/pgsty/silo-pkg/releases/tag/v3.12.0&#34;&gt;silo-pkg &lt;code&gt;v3.12.0&lt;/code&gt;&lt;/a&gt; (&lt;code&gt;62f326d&lt;/code&gt;) and &lt;a href=&#34;https://github.com/pgsty/silo/releases/tag/RELEASE.2026-08-04T00-00-00Z&#34;&gt;Server 20260804&lt;/a&gt; (&lt;code&gt;00a8171cb&lt;/code&gt;, &lt;a href=&#34;https://github.com/pgsty/silo/issues/41&#34;&gt;&lt;code&gt;pgsty/silo#41&lt;/code&gt;&lt;/a&gt;): &lt;code&gt;handlers.GetSourceIP&lt;/code&gt; previously trusted &lt;code&gt;X-Forwarded-For&lt;/code&gt;, &lt;code&gt;X-Real-IP&lt;/code&gt;, and RFC 7239 &lt;code&gt;Forwarded&lt;/code&gt; from any TCP peer by default, and setting &lt;code&gt;_MINIO_API_XFF_HEADER=off&lt;/code&gt; only disabled &lt;code&gt;X-Forwarded-For&lt;/code&gt; while continuing to trust client-supplied &lt;code&gt;X-Real-IP&lt;/code&gt; and &lt;code&gt;Forwarded&lt;/code&gt; headers.&lt;/p&gt;&#xA;&lt;h2 id=&#34;summary&#34;&gt;Conclusions first&#xA;&lt;/h2&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;&lt;code&gt;_MINIO_API_XFF_HEADER=off&lt;/code&gt; left two headers wide open&lt;/strong&gt;: Setting &lt;code&gt;_MINIO_API_XFF_HEADER=off&lt;/code&gt; skipped &lt;code&gt;X-Forwarded-For&lt;/code&gt;, but &lt;code&gt;handlers.GetSourceIP&lt;/code&gt; immediately fell through to &lt;code&gt;X-Real-IP&lt;/code&gt; and &lt;code&gt;Forwarded&lt;/code&gt;. Any direct client could forge &lt;code&gt;X-Real-IP: 10.0.0.1&lt;/code&gt; to satisfy &lt;code&gt;aws:SourceIp&lt;/code&gt; policies.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;&amp;ldquo;Put a reverse proxy in front&amp;rdquo; is often insufficient&lt;/strong&gt;: Even behind an ingress proxy, if the proxy appends to &lt;code&gt;X-Forwarded-For&lt;/code&gt; (&lt;code&gt;proxy_add_x_forwarded_for&lt;/code&gt;) while the server reads the left-most IP, or if internal pods can reach the server&amp;rsquo;s ClusterIP directly, an attacker can still spoof &lt;code&gt;aws:SourceIp&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;&lt;code&gt;MINIO_API_TRUSTED_PROXIES&lt;/code&gt; provides explicit right-to-left chain verification&lt;/strong&gt;: &lt;a href=&#34;https://github.com/pgsty/silo/releases/tag/RELEASE.2026-08-04T00-00-00Z&#34;&gt;Server 20260804&lt;/a&gt; introduces &lt;code&gt;MINIO_API_TRUSTED_PROXIES&lt;/code&gt; (&lt;code&gt;off&lt;/code&gt; / &lt;code&gt;none&lt;/code&gt;, CIDR/IP list, or &lt;code&gt;all&lt;/code&gt; / &lt;code&gt;*&lt;/code&gt; for legacy behavior) and walks &lt;code&gt;X-Forwarded-For&lt;/code&gt; / &lt;code&gt;Forwarded&lt;/code&gt; from right to left, stopping at the first hop not in the trusted proxy set.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;consumers&#34;&gt;Every Consumer of &lt;code&gt;handlers.GetSourceIP&lt;/code&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;In SILO, &lt;code&gt;handlers.GetSourceIP(r)&lt;/code&gt; (&lt;code&gt;silo-pkg/handlers/proxy.go&lt;/code&gt;) is the single function responsible for extracting the client IP address from an incoming &lt;code&gt;*http.Request&lt;/code&gt;. Four security- and observability-sensitive subsystems depend on its return value:&lt;/p&gt;</description>
      </item>
    
  </channel>
</rss>
