<?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>PGSTY SILO Blog on SILO</title>
    <link>https://silo.pgsty.com/blog/</link>
    <description>Recent content in PGSTY SILO Blog on SILO</description>
    <generator>Hugo</generator>
    <language>en</language>
    
    
    
      <lastBuildDate>Wed, 16 Sep 2026 18:05:55 +0800</lastBuildDate>
    
    
      <atom:link href="https://silo.pgsty.com/blog/index.xml" rel="self" type="application/rss+xml" />
    
    <item>
        <title>SILO Console 2.4.1 Released</title>
        <link>https://silo.pgsty.com/blog/release/console-2.4.1/</link>
        <pubDate>Wed, 16 Sep 2026 16:36:03 +0800</pubDate>
        
        <guid>https://silo.pgsty.com/blog/release/console-2.4.1/</guid>
        <description>&lt;p&gt;&lt;a href=&#34;https://github.com/pgsty/silo-console/releases/tag/v2.4.1&#34;&gt;SILO Console v2.4.1&lt;/a&gt;&#xA;was released on September 16, 2026 from&#xA;&lt;a href=&#34;https://github.com/pgsty/silo-console/commit/1360e26d976d82eda395b0b2e449df8c9d49f39c&#34;&gt;&lt;code&gt;1360e26d976d&lt;/code&gt;&lt;/a&gt;.&#xA;It integrates pkg v3.14.1 and mcli 20260916, restricts the anonymous sharing proxy,&#xA;streams multi-object ZIP downloads and adds signed, traceable release artifacts.&lt;/p&gt;&#xA;&lt;h2 id=&#34;sharing&#34;&gt;Shared downloads&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;The fix for &lt;a href=&#34;https://github.com/pgsty/silo-console/issues/52&#34;&gt;#52&lt;/a&gt; restricts the&#xA;anonymous proxy to &lt;strong&gt;object-content GET requests at the configured S3 origin&lt;/strong&gt;.&#xA;It rejects redirects, system paths and query-selected operations that are not&#xA;object downloads. Public objects, presigned links and version-specific downloads&#xA;continue to work. &lt;strong&gt;No new sharing-disable environment variable is needed.&lt;/strong&gt;&lt;/p&gt;</description>
      </item>
    <item>
        <title>mcli 20260916 Released</title>
        <link>https://silo.pgsty.com/blog/release/mcli-20260916/</link>
        <pubDate>Wed, 16 Sep 2026 00:00:00 +0800</pubDate>
        
        <guid>https://silo.pgsty.com/blog/release/mcli-20260916/</guid>
        <description>&lt;p&gt;&lt;strong&gt;Release:&lt;/strong&gt; &lt;a href=&#34;https://github.com/pgsty/mc/releases/tag/RELEASE.2026-09-16T00-00-00Z&#34;&gt;RELEASE.2026-09-16T00-00-00Z&lt;/a&gt; · &lt;strong&gt;Package:&lt;/strong&gt; &lt;code&gt;20260916000000.0.0&lt;/code&gt; · &lt;strong&gt;Source:&lt;/strong&gt; &lt;a href=&#34;https://github.com/pgsty/mc/commit/e952aa78f10a2b77dd525a2b7e3143bcda0cd377&#34;&gt;&lt;code&gt;e952aa78f10a&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;changes&#34;&gt;Changes since 20260913&#xA;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Adopt silo-pkg &lt;strong&gt;v3.14.1&lt;/strong&gt;, upstream minio-go &lt;strong&gt;v7.3.1-0.20260915093545-32e1f32cb176&lt;/strong&gt;, and &lt;strong&gt;JWX v3.3.0&lt;/strong&gt;. CopyObject retries and propagates S3 errors embedded in HTTP 200 responses, so a failed copy cannot authorize &lt;code&gt;mv&lt;/code&gt; to delete its source. JWX correctly escapes JSON field names.&lt;/li&gt;&#xA;&lt;li&gt;Report &lt;code&gt;mirror&lt;/code&gt; permission failures, including unreadable sources, rejected writes and failed local destination removals. Later objects continue; a finite mirror with failures exits &lt;strong&gt;1&lt;/strong&gt;. These per-object permission errors do not require &lt;code&gt;--skip-errors&lt;/code&gt; and do not restart an entire watch scan.&lt;/li&gt;&#xA;&lt;li&gt;Preserve the existing cancellation/retry path for listing and watcher failures. Persistent listing permission denial can still cause repeated scans; this release does not redesign that retry policy.&lt;/li&gt;&#xA;&lt;li&gt;Suppress normal final success statistics after a failed mirror. Explicit &lt;code&gt;--summary&lt;/code&gt; retains statistics: JSON uses &lt;strong&gt;&lt;code&gt;status: failure&lt;/code&gt;&lt;/strong&gt;; text error diagnostics remain on stderr. Transfers completed within one clock tick no longer produce infinite JSON speeds.&lt;/li&gt;&#xA;&lt;li&gt;Return failure for legalhold set/clear errors, partial recursive retention failures, and moves whose source deletion fails. &lt;code&gt;mv&lt;/code&gt; waits for deletion results; successful copies are not rolled back. Retention reports each failed object once instead of duplicate or misleading diagnostics.&lt;/li&gt;&#xA;&lt;li&gt;Reject empty retention durations and invalid &lt;code&gt;find --regex&lt;/code&gt; expressions with normal CLI errors instead of panics.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;upgrade&#34;&gt;Automation and upgrade notes&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;Affected failure paths that returned 0 now return 1.&lt;/strong&gt; Check final exit status and error records. Per-object success start messages and progress byte counters are not proof that a transfer completed. For &lt;code&gt;mv&lt;/code&gt;, a deletion failure may leave both the source and the successfully copied destination; inspect both before retrying.&lt;/p&gt;</description>
      </item>
    <item>
        <title>mcli 20260913 Released</title>
        <link>https://silo.pgsty.com/blog/release/mcli-20260913/</link>
        <pubDate>Sun, 13 Sep 2026 09:47:11 +0800</pubDate>
        
        <guid>https://silo.pgsty.com/blog/release/mcli-20260913/</guid>
        <description>&lt;p&gt;&lt;strong&gt;Release:&lt;/strong&gt; &lt;a href=&#34;https://github.com/pgsty/mc/releases/tag/RELEASE.2026-09-13T00-00-00Z&#34;&gt;RELEASE.2026-09-13T00-00-00Z&lt;/a&gt;&#xA;· &lt;strong&gt;Package:&lt;/strong&gt; &lt;code&gt;20260913000000.0.0&lt;/code&gt;&#xA;· &lt;strong&gt;Source:&lt;/strong&gt; &lt;a href=&#34;https://github.com/pgsty/mc/commit/4f609a4da3bb8548446715867b68ab6c2d53a097&#34;&gt;&lt;code&gt;4f609a4d&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;changes&#34;&gt;Changes since 20260903&#xA;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Preserve historical destination versions under &lt;code&gt;mirror --remove --watch&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Keep service-restart dry runs from executing a restart and make noninteractive&#xA;behavior explicit.&lt;/li&gt;&#xA;&lt;li&gt;Return failure for transfer and S3 Select errors, honor explicit checksums on&#xA;empty uploads, and retain &lt;code&gt;pipe&lt;/code&gt; JSON output when quiet mode is enabled.&lt;/li&gt;&#xA;&lt;li&gt;Accept on/off boolean environment values and repair CLI/JSON behavior across&#xA;supported platforms.&lt;/li&gt;&#xA;&lt;li&gt;Adopt &lt;a href=&#34;https://silo.pgsty.com/blog/release/pkg-3.14.0/&#34;&gt;pkg v3.14.0&lt;/a&gt; and upstream SDK&#xA;&lt;code&gt;v7.3.1-0.20260910142817-60bd07042d49&lt;/code&gt;, refresh Go x/* and UBI dependencies,&#xA;and keep Go 1.27.1. NetBSD retains the go-systemd v22.6.0 portability pin.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;The package retains the policy Deny/NotResource and bounded wildcard repairs&#xA;from pkg v3.13.3. Correctly preserved denies may now reject requests that relied&#xA;on lost clauses. Recover already-lost clauses from the original policy source.&lt;/p&gt;</description>
      </item>
    <item>
        <title>silo-pkg 3.14.0 Released</title>
        <link>https://silo.pgsty.com/blog/release/pkg-3.14.0/</link>
        <pubDate>Sun, 13 Sep 2026 08:55:28 +0800</pubDate>
        
        <guid>https://silo.pgsty.com/blog/release/pkg-3.14.0/</guid>
        <description>&lt;p&gt;&lt;a href=&#34;https://github.com/pgsty/silo-pkg/releases/tag/v3.14.0&#34;&gt;v3.14.0&lt;/a&gt; was published on&#xA;2026-09-13 from &lt;a href=&#34;https://github.com/pgsty/silo-pkg/commit/827f8109ff11bf6239a35d8d6d137cb5738539c3&#34;&gt;&lt;code&gt;827f8109&lt;/code&gt;&lt;/a&gt;.&#xA;It is consumed directly as &lt;code&gt;github.com/pgsty/silo-pkg/v3&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;migration&#34;&gt;Password-policy migration&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;This release changes authorization semantics.&lt;/strong&gt; The public&#xA;&lt;code&gt;Policy.IsAllowedActions&lt;/code&gt; method now reports &lt;code&gt;admin:ChangeMyPassword&lt;/code&gt; unless&#xA;explicitly denied; &lt;code&gt;admin:CreateUser&lt;/code&gt; requires an explicit Allow. With matching&#xA;Server/Console source, a CreateUser deny alone no longer locks the caller&amp;rsquo;s&#xA;password, while a ChangeMyPassword deny does.&lt;/p&gt;&#xA;&lt;p&gt;The built-in &lt;code&gt;readonly&lt;/code&gt; drops its CreateUser deny. A separate CreateUser Allow&#xA;can therefore become effective; the added &lt;code&gt;consolereadonly&lt;/code&gt; follows the same&#xA;split and includes bucket listing. Neither policy grants user administration&#xA;by itself. Saved policies and overrides are not rewritten.&lt;/p&gt;</description>
      </item>
    <item>
        <title>SN-2026-011: Fix and Release Status</title>
        <link>https://silo.pgsty.com/blog/security/20260913-signed-header-status/</link>
        <pubDate>Sun, 13 Sep 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/security/20260913-signed-header-status/</guid>
        <description>&lt;p&gt;&lt;strong&gt;Status on 2026-09-13:&lt;/strong&gt; SN-2026-011 is fixed on Server main, starting with&#xA;&lt;a href=&#34;https://github.com/pgsty/silo/commit/1233254309b15571f101b2b26d531951ceaeef1e&#34;&gt;&lt;code&gt;123325430&lt;/code&gt;&lt;/a&gt;.&#xA;The latest published Server, &lt;code&gt;RELEASE.2026-09-03T13-18-01Z&lt;/code&gt;, and earlier public&#xA;Server releases are affected. No new fixed Server release is established by&#xA;the pkg v3.14.0 or mcli 20260913 publication.&lt;/p&gt;&#xA;&lt;p&gt;A holder of a signed PUT request could add an unsigned &lt;code&gt;x-amz-copy-source&lt;/code&gt;&#xA;header and turn the permitted write into a copy of another object readable by&#xA;the signing key. A destination that permits anonymous reads can expose those&#xA;copied bytes. This affects both presigned and Authorization-header requests;&#xA;the holder does not need the signing credentials.&lt;/p&gt;</description>
      </item>
    <item>
        <title>SILO Console 2.4.0 Released</title>
        <link>https://silo.pgsty.com/blog/release/console-2.4.0/</link>
        <pubDate>Tue, 08 Sep 2026 22:51:37 +0800</pubDate>
        
        <guid>https://silo.pgsty.com/blog/release/console-2.4.0/</guid>
        <description>&lt;p&gt;&lt;a href=&#34;https://github.com/pgsty/silo-console/releases/tag/v2.4.0&#34;&gt;v2.4.0&lt;/a&gt; was published&#xA;on 2026-09-08 from &lt;a href=&#34;https://github.com/pgsty/silo-console/commit/c103d08ec36aab8e08ba091d77b639158ce9f18f&#34;&gt;&lt;code&gt;c103d08e&lt;/code&gt;&lt;/a&gt;.&#xA;&lt;strong&gt;September 16 follow-up:&lt;/strong&gt; &lt;a href=&#34;https://silo.pgsty.com/blog/release/console-2.4.1/&#34;&gt;Console v2.4.1&lt;/a&gt; is the&#xA;current release. This article records the v2.4.0 behavior and dependencies.&lt;/p&gt;&#xA;&lt;h2 id=&#34;changes&#34;&gt;Released behavior&#xA;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Object-browser directories load 100 entries per page by default, with choices&#xA;of 50, 100, 250, 500 and 1000. Each page uses one S3 continuation-token request.&#xA;Sorting, filtering and selection apply to the displayed page, not a complete&#xA;directory scan; there is no unbounded “all” mode.&lt;/li&gt;&#xA;&lt;li&gt;Version deletion stays bound to the selected object and directory deletion to&#xA;its prefix. Lifecycle edits preserve independent actions and unexposed&#xA;settings; replication rule deletion is saved consistently.&lt;/li&gt;&#xA;&lt;li&gt;Transient network failures preserve sessions. Empty versioning state,&#xA;malformed sidebar preferences and stale dropdown selections are handled.&lt;/li&gt;&#xA;&lt;li&gt;Embedded Console restores loopback proxy behavior when Server explicitly&#xA;enables the policy; standalone trust defaults remain unchanged.&lt;/li&gt;&#xA;&lt;li&gt;Dependencies include pkg &lt;strong&gt;v3.13.3&lt;/strong&gt;, MC source&#xA;&lt;strong&gt;&lt;code&gt;v0.0.0-20260908140805-c8aa5d25a63a&lt;/code&gt;&lt;/strong&gt;, and upstream SDK &lt;strong&gt;&lt;code&gt;0e78d3f18efe&lt;/code&gt;&lt;/strong&gt;.&#xA;This release consumed MC as source and did not itself publish a new mcli tag.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Correctly preserved Deny/NotResource clauses may reject requests that relied on&#xA;old deduplication defects. Restore already-lost clauses from the original policy&#xA;source. Embedders must copy the MC replacement from the&#xA;&lt;a href=&#34;https://github.com/pgsty/silo-console/blob/v2.4.0/README.md&#34;&gt;tagged README&lt;/a&gt;.&lt;/p&gt;</description>
      </item>
    <item>
        <title>Silo Console 2.2.0 Release Notes</title>
        <link>https://silo.pgsty.com/blog/release/console-2.2.0/</link>
        <pubDate>Wed, 26 Aug 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/release/console-2.2.0/</guid>
        <description>&lt;div class=&#34;td-callout td-callout--note&#34; role=&#34;note&#34;&gt;&#xA;  &lt;div class=&#34;td-callout__title&#34;&gt;&lt;i class=&#34;td-callout__icon fa-solid fa-circle-info&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;&lt;span class=&#34;td-callout__label&#34;&gt;Note&lt;/span&gt;&lt;/div&gt;&#xA;  &lt;div class=&#34;td-callout__body&#34;&gt;&#xA;&lt;p&gt;&lt;strong&gt;Released on 2026-08-26.&lt;/strong&gt; &lt;a href=&#34;https://github.com/pgsty/silo-console/releases/tag/v2.2.0&#34;&gt;&lt;code&gt;v2.2.0&lt;/code&gt;&lt;/a&gt; points to final commit &lt;a href=&#34;https://github.com/pgsty/silo-console/commit/7dc4258a6a33b6e01b5b3bae8a0fd63f02b3bad8&#34;&gt;&lt;code&gt;7dc4258a6&lt;/code&gt;&lt;/a&gt;. The exact tagged tree passed the full CI matrix, vulnerability checks, and release pipeline. The public release contains six standalone binaries, nine Linux packages, and a SHA-256 checksum manifest.&lt;/p&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Version:&lt;/strong&gt; &lt;a href=&#34;https://github.com/pgsty/silo-console/releases/tag/v2.2.0&#34;&gt;&lt;code&gt;v2.2.0&lt;/code&gt;&lt;/a&gt; · &lt;strong&gt;Release commit:&lt;/strong&gt; &lt;code&gt;7dc4258a6&lt;/code&gt; · &lt;strong&gt;Status:&lt;/strong&gt; released · &lt;strong&gt;Repository:&lt;/strong&gt; &lt;a href=&#34;https://github.com/pgsty/silo-console&#34;&gt;pgsty/silo-console&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;SILO Console 2.2.0 is a correctness-and-hardening release. It adds one new feature — a strictly bounded text preview for logs and structured text — and spends the rest of its budget making existing surfaces tell the truth: downloads that cannot silently ship a truncated archive, progress bars that cannot fabricate a percentage, permission gates that actually disable what they claim to disable, a user API that no longer entangles status changes with group membership, and database notification forms that emit exactly the connection string the server will store.&lt;/p&gt;</description>
      </item>
    <item>
        <title>Silo Console 2.1.0 Released</title>
        <link>https://silo.pgsty.com/blog/release/console-2.1.0/</link>
        <pubDate>Thu, 06 Aug 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/release/console-2.1.0/</guid>
        <description>&lt;p&gt;&lt;strong&gt;Published:&lt;/strong&gt; 2026-08-06 · &lt;strong&gt;Version:&lt;/strong&gt; &lt;a href=&#34;https://github.com/pgsty/silo-console/releases/tag/v2.1.0&#34;&gt;v2.1.0&lt;/a&gt; · &lt;strong&gt;Repository:&lt;/strong&gt; &lt;a href=&#34;https://github.com/pgsty/silo-console&#34;&gt;pgsty/silo-console&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;SILO Console 2.1.0 is the first feature release after the independent 2.0.0. It does three things:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;Speaks two languages&lt;/strong&gt; — every console screen, help topic, and documentation link now renders in English or Chinese, behind a toggle on every page, with zero new runtime dependencies;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Reads the right metrics&lt;/strong&gt; — the dashboard moves off the MinIO Metrics V2 names onto V3, with explicit handling for the semantics V3 changed underneath it;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Stops lying in edge cases&lt;/strong&gt; — a select-all that matched what a bulk action would delete, placeholders that survive object names containing &lt;code&gt;$&amp;amp;&lt;/code&gt;, timestamps that carry a timezone, and empty metrics that read &amp;ldquo;no data&amp;rdquo; instead of a fabricated &lt;code&gt;0&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;This is a &lt;strong&gt;minor release&lt;/strong&gt;. No environment variable, module path, API contract, binary name, or data layout changes. Upgrading is a binary or image swap.&lt;/p&gt;</description>
      </item>
    <item>
        <title>Silo Console 2.0.0 Released</title>
        <link>https://silo.pgsty.com/blog/release/console-2.0.0/</link>
        <pubDate>Tue, 04 Aug 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/release/console-2.0.0/</guid>
        <description>&lt;p&gt;&lt;strong&gt;Published:&lt;/strong&gt; 2026-08-04 · &lt;strong&gt;Version:&lt;/strong&gt; &lt;a href=&#34;https://github.com/pgsty/silo-console/releases/tag/v2.0.0&#34;&gt;v2.0.0&lt;/a&gt; · &lt;strong&gt;Repository:&lt;/strong&gt; &lt;a href=&#34;https://github.com/pgsty/silo-console&#34;&gt;pgsty/silo-console&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;SILO Console 2.0.0 is the first major release of this object-storage administration console as an independent project. Continuing from the &lt;code&gt;georgmangold/console&lt;/code&gt; v1.9.1 maintenance line, it accomplishes three things:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;An independent identity&lt;/strong&gt; — product name, visual system, documentation entry points, source attribution, and the release pipeline all move into the SILO project, while the Go module path, environment variables, and other compatibility contracts are deliberately retained;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;A redesigned interface&lt;/strong&gt; — the login page, theme system, dashboard, and console details are reworked under one design language, backed by a regenerated brand icon set;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Hardened engineering&lt;/strong&gt; — the embedded frontend payload shrinks from roughly 10MB to 3.5MB, known dependency vulnerabilities drop to zero, and a batch of inherited defects — including a real runtime data race — is fixed.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Before publication this release went through two independent review passes: a full code review with commit-history restructuring, followed by an adversarial re-verification (exhaustive asset validation, HTTP semantics probing, full routing regression, and smoke tests against the published artifacts themselves).&lt;/p&gt;</description>
      </item>
    <item>
        <title>silo-pkg 3.13.0 Released</title>
        <link>https://silo.pgsty.com/blog/release/pkg-3.13.0/</link>
        <pubDate>Sun, 30 Aug 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/release/pkg-3.13.0/</guid>
        <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;Follow-up, 2026-09-13:&lt;/strong&gt; this article preserves the v3.13.0 release-time migration record. All four maintained components have since adopted the own-module path; current pkg is &lt;a href=&#34;https://silo.pgsty.com/blog/release/pkg-3.14.0/&#34;&gt;v3.14.0&lt;/a&gt;. The “not yet migrated” statements below describe that earlier date; see the &lt;a href=&#34;https://silo.pgsty.com/compatibility/versions/&#34;&gt;current component matrix&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;Release date:&lt;/strong&gt; 2026-08-30 · &lt;strong&gt;Version:&lt;/strong&gt; &lt;a href=&#34;https://github.com/pgsty/silo-pkg/releases/tag/v3.13.0&#34;&gt;v3.13.0&lt;/a&gt; · &lt;strong&gt;Commit:&lt;/strong&gt; &lt;a href=&#34;https://github.com/pgsty/silo-pkg/commit/215f116ec25120ce365c79bce4096cd7665b2c1e&#34;&gt;&lt;code&gt;215f116&lt;/code&gt;&lt;/a&gt; · &lt;strong&gt;Repository:&lt;/strong&gt; &lt;a href=&#34;https://github.com/pgsty/silo-pkg&#34;&gt;pgsty/silo-pkg&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Version 3.13.0 is a breaking release with one theme: the module stops claiming upstream&amp;rsquo;s import path and takes its own. It also retires the &lt;code&gt;pgsty/silo-go&lt;/code&gt; fork, which no longer carried anything upstream lacks.&lt;/p&gt;</description>
      </item>
    <item>
        <title>silo-pkg 3.12.0 Released</title>
        <link>https://silo.pgsty.com/blog/release/pkg-3.12.0/</link>
        <pubDate>Mon, 24 Aug 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/release/pkg-3.12.0/</guid>
        <description>&lt;p&gt;&lt;strong&gt;Release date:&lt;/strong&gt; 2026-08-24 · &lt;strong&gt;Version:&lt;/strong&gt; &lt;a href=&#34;https://github.com/pgsty/silo-pkg/releases/tag/v3.12.0&#34;&gt;v3.12.0&lt;/a&gt; · &lt;strong&gt;Commit:&lt;/strong&gt; &lt;a href=&#34;https://github.com/pgsty/silo-pkg/commit/2b087a11cf3547313a2e79275f52a0654c212e58&#34;&gt;&lt;code&gt;2b087a1&lt;/code&gt;&lt;/a&gt; · &lt;strong&gt;Repository:&lt;/strong&gt; &lt;a href=&#34;https://github.com/pgsty/silo-pkg&#34;&gt;pgsty/silo-pkg&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Version 3.12.0 is a main-line minor release with two themes: a policy-write guard for ARN prefixes that name no resource, and the maintained Go 1.27 / etcd 3.7 dependency baseline. It adds two exported inspection/validation methods, raises the verified consumer floor to Go 1.26, and is the first &lt;code&gt;silo-pkg&lt;/code&gt; release whose strict validation path is enabled by the SILO server for named-policy and service-account policy writes.&lt;/p&gt;</description>
      </item>
    <item>
        <title>Silo Pkg 3.11.0 Released</title>
        <link>https://silo.pgsty.com/blog/release/pkg-3.11.0/</link>
        <pubDate>Tue, 04 Aug 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/release/pkg-3.11.0/</guid>
        <description>&lt;p&gt;&lt;strong&gt;Release date:&lt;/strong&gt; 2026-08-04 · &lt;strong&gt;Version:&lt;/strong&gt; &lt;a href=&#34;https://github.com/pgsty/silo-pkg/releases/tag/v3.11.0&#34;&gt;v3.11.0&lt;/a&gt; · &lt;strong&gt;Commit:&lt;/strong&gt; &lt;a href=&#34;https://github.com/pgsty/silo-pkg/commit/d8b1fa7&#34;&gt;&lt;code&gt;d8b1fa7&lt;/code&gt;&lt;/a&gt; · &lt;strong&gt;Repository:&lt;/strong&gt; &lt;a href=&#34;https://github.com/pgsty/silo-pkg&#34;&gt;pgsty/silo-pkg&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is the fork&amp;rsquo;s &lt;strong&gt;first pinned release&lt;/strong&gt;. It restores the IAM bucket/object resource boundary reported as upstream &lt;a href=&#34;https://github.com/minio/minio/issues/20449&#34;&gt;minio/minio#20449&lt;/a&gt;: a policy condition-key bypass fix, three LDAP connection defects, a certificate watcher leak, a seeded-RNG defect, and the module&amp;rsquo;s real minimum Go version.&lt;/p&gt;&#xA;&lt;div class=&#34;td-callout td-callout--warning&#34; role=&#34;note&#34;&gt;&#xA;  &lt;div class=&#34;td-callout__title&#34;&gt;&lt;i class=&#34;td-callout__icon fa-solid fa-triangle-exclamation&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;&lt;span class=&#34;td-callout__label&#34;&gt;Warning&lt;/span&gt;&lt;/div&gt;&#xA;  &lt;div class=&#34;td-callout__body&#34;&gt;&#xA;&lt;p&gt;&lt;strong&gt;Two things to check before upgrading&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;This release tightens authorization.&lt;/strong&gt; Twelve bucket-level write actions are no longer reachable through an object-only resource pattern such as &lt;code&gt;arn:aws:s3:::bucket/*&lt;/code&gt;. If you write your own bucket-scoped policies, read &lt;a href=&#34;https://silo.pgsty.com/blog/release/pkg-3.11.0/#bucket-boundary&#34;&gt;The IAM bucket/object boundary&lt;/a&gt; — the fix is one line of policy for anyone affected, and &lt;code&gt;MINIO_API_LEGACY_BUCKET_RESOURCE_MATCH=on&lt;/code&gt; restores the previous behaviour in full.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;The condition-key fix still needs its server half.&lt;/strong&gt; The policy lookup change and the server changes that reserve internal condition-key names each cover one half of that problem. The companion server work exists in &lt;code&gt;pgsty/minio&lt;/code&gt; commit &lt;code&gt;2f55347f7&lt;/code&gt; but is not yet on public &lt;code&gt;origin/master&lt;/code&gt;, and no published Silo server release contains it. Verify that a later server release explicitly includes it.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/div&gt;&lt;h2 id=&#34;what-is-this&#34;&gt;What This Repository Is&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;code&gt;silo-pkg&lt;/code&gt; is a maintained fork of &lt;a href=&#34;https://github.com/minio/pkg&#34;&gt;minio/pkg&lt;/a&gt;, carrying fixes needed by community MinIO forks that the now commercially driven upstream no longer accepts. The repository was renamed from &lt;code&gt;pgsty/minio-pkg&lt;/code&gt; on 2026-08-02.&lt;/p&gt;</description>
      </item>
    <item>
        <title>CVE-2025-62506: Session-Policy Privilege Escalation</title>
        <link>https://silo.pgsty.com/blog/security/cve-2025-62506/</link>
        <pubDate>Wed, 15 Oct 2025 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/security/cve-2025-62506/</guid>
        <description>&lt;p&gt;&lt;strong&gt;Status:&lt;/strong&gt; Inherited and released&lt;br&gt;&#xA;&lt;strong&gt;First Silo community release:&lt;/strong&gt; &lt;a href=&#34;https://github.com/pgsty/silo/releases/tag/RELEASE.2025-12-03T12-00-00Z&#34;&gt;RELEASE.2025-12-03T12-00-00Z&lt;/a&gt;&lt;br&gt;&#xA;&lt;strong&gt;Upstream fixed release:&lt;/strong&gt; &lt;a href=&#34;https://github.com/minio/minio/releases/tag/RELEASE.2025-10-15T17-29-55Z&#34;&gt;RELEASE.2025-10-15T17-29-55Z&lt;/a&gt;&lt;br&gt;&#xA;&lt;strong&gt;GitHub advisory:&lt;/strong&gt; &lt;a href=&#34;https://github.com/advisories/GHSA-jjjj-jwhf-8rgr&#34;&gt;GHSA-jjjj-jwhf-8rgr&lt;/a&gt;&lt;br&gt;&#xA;&lt;strong&gt;Upstream fix:&lt;/strong&gt; &lt;a href=&#34;https://github.com/minio/minio/pull/21642&#34;&gt;minio/minio#21642&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;A service account or STS account with a restricted session policy could use an &amp;ldquo;own account&amp;rdquo; operation to create another service account without the restriction. The child account then inherited broader parent permissions, turning valid low-privilege credentials into a privilege-escalation path.&lt;/p&gt;&#xA;&lt;p&gt;Silo did not need a separate backport. The upstream fix and its two regression groups were already in the history from which the community fork was released. This note records that inheritance without duplicating the tests or reconstructing the investigation already captured by the upstream advisory and PR.&lt;/p&gt;</description>
      </item>
    <item>
        <title>Bucket Configuration Replication: Source Times, Deletions, and Deterministic Convergence</title>
        <link>https://silo.pgsty.com/blog/design/bucket-metadata-convergence/</link>
        <pubDate>Sat, 12 Sep 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/design/bucket-metadata-convergence/</guid>
        <description>The research and design record for SILO #77: why source times, deletion records, and the whole-bucket lock are all needed; how six configuration types handle duplicates and reordering; why rollout needs a default-off switch; and what the tests can and cannot establish.</description>
      </item>
    <item>
        <title>An Unsigned Header Is Not Part of the Request</title>
        <link>https://silo.pgsty.com/blog/design/signed-header-coverage/</link>
        <pubDate>Wed, 09 Sep 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/design/signed-header-coverage/</guid>
        <description>A presigned or signed PUT authorized for one object could be turned into a server-side copy of any object the signing key can read, because SigV4 verification only walked the list of signed header names and never the x-amz-* headers that actually arrived, while the router selects CopyObject from an unsigned x-amz-copy-source header. This record defines SILO&amp;rsquo;s unsigned-header rejection boundary, the payload-hash exception and trusted signature-age derivation, the PutObjectTagging injection reorder, the scope across signature modes, and the release evidence.</description>
      </item>
    <item>
        <title>Replication Reliability: Delete Completion, MRF Visibility, and Resync Cancellation</title>
        <link>https://silo.pgsty.com/blog/design/replication-reliability/</link>
        <pubDate>Wed, 09 Sep 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/design/replication-reliability/</guid>
        <description>The decision record for SILO #153, #152, and #137: distinguish external reports from local evidence, classify delete-marker purges correctly, expose drops from the bounded MRF queue, and give resync cancellation a complete lifecycle. Includes review, rejected alternatives, final validation, and a 2026-09-16 second round covering worker-side purge classification and persisted MRF marker recovery (PR #196).</description>
      </item>
    <item>
        <title>Replicated Tag Ordering: Revision Timestamps, Tombstones, and Resurrection</title>
        <link>https://silo.pgsty.com/blog/design/replicated-tag-ordering/</link>
        <pubDate>Wed, 16 Sep 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/design/replicated-tag-ordering/</guid>
        <description>The decision record for the replicated-tag repairs merged as PR #193 and #196: SSE-KMS destination copies silently dropped tag revision timestamps, and an empty tag value had no representable revision, so a delayed replication event could resurrect deleted tags. Covers the tombstone semantics, the stored-wins tie change, the two-ended upgrade requirement, and the cost of extra metadata copies during resync.</description>
      </item>
    <item>
        <title>SILO 20260903 Security Notes: SN-2026-006 through 010</title>
        <link>https://silo.pgsty.com/blog/security/20260903-server-hardening/</link>
        <pubDate>Thu, 03 Sep 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/security/20260903-server-hardening/</guid>
        <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;Released in SILO 20260903.&lt;/strong&gt; These fixes are part of &lt;a href=&#34;https://github.com/pgsty/silo/releases/tag/RELEASE.2026-09-03T13-18-01Z&#34;&gt;&lt;code&gt;RELEASE.2026-09-03T13-18-01Z&lt;/code&gt;&lt;/a&gt;. See the &lt;a href=&#34;https://silo.pgsty.com/blog/release/silo-20260903/&#34;&gt;complete release notes&lt;/a&gt; for the 20260806-to-20260903 upgrade boundary, components, verification evidence, and known deferrals.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;This bulletin collects five related security findings from the final SILO Server review. They cover customer-provided encryption keys, client-controlled replication headers, administrative status changes, and explicit object-version deletion.&lt;/p&gt;&#xA;&lt;p&gt;The identifiers &lt;code&gt;SN-2026-006&lt;/code&gt; through &lt;code&gt;SN-2026-010&lt;/code&gt; are fork-local security-note IDs. They are &lt;strong&gt;not CVEs&lt;/strong&gt;, are not registered in a vulnerability database, and should not be represented as such. The individual CVE chronicle remains one article per CVE; this release bulletin groups findings without CVEs so operators can evaluate one upgrade boundary.&lt;/p&gt;</description>
      </item>
    <item>
        <title>SILO Server 20260903 Pre-release Review</title>
        <link>https://silo.pgsty.com/blog/design/server-release-readiness/</link>
        <pubDate>Thu, 03 Sep 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/design/server-release-readiness/</guid>
        <description>The final adversarial review of every server change after 20260806: confirmed defects, fixes, rejected simplifications, necessary complexity, validation evidence, explicit deferrals, and the distinction between code-level GO and production release. Updated 2026-09-16 with the #116 restart-and-readback verification method.</description>
      </item>
    <item>
        <title>Replica Metadata Normalization: What a Trusted Copy May Not Re-Inject</title>
        <link>https://silo.pgsty.com/blog/design/replica-metadata-normalization/</link>
        <pubDate>Wed, 16 Sep 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/design/replica-metadata-normalization/</guid>
        <description>The decision record for PR #194 (fix 4fcdf37ce): trusted replication COPY re-extracted raw request metadata through the permissive path, so transport-only aws-chunked encodings and GHSA-redacted user metadata came back into stored objects. Covers the expected encoding mappings, the Snowball behavior change, why upgrading does not repair existing objects, and the status of the stored-metadata remediation proposal.</description>
      </item>
    <item>
        <title>Silo 20260903 Released</title>
        <link>https://silo.pgsty.com/blog/release/silo-20260903/</link>
        <pubDate>Thu, 03 Sep 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/release/silo-20260903/</guid>
        <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;Status on 2026-09-13:&lt;/strong&gt; this remains the latest published Server; its dependencies have not changed. Later security, storage and dependency fixes are on main, including the unreleased &lt;a href=&#34;https://silo.pgsty.com/blog/security/20260913-signed-header-status/&#34;&gt;SN-2026-011 fix&lt;/a&gt;. New standalone mcli/pkg releases do not replace this artifact’s contents; see the &lt;a href=&#34;https://silo.pgsty.com/compatibility/versions/&#34;&gt;component matrix&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;Version date:&lt;/strong&gt; 2026-09-03 · &lt;strong&gt;Published:&lt;/strong&gt; 2026-09-04 · &lt;strong&gt;Version:&lt;/strong&gt; &lt;a href=&#34;https://github.com/pgsty/silo/releases/tag/RELEASE.2026-09-03T13-18-01Z&#34;&gt;&lt;code&gt;RELEASE.2026-09-03T13-18-01Z&lt;/code&gt;&lt;/a&gt; · &lt;strong&gt;Previous release:&lt;/strong&gt; &lt;a href=&#34;https://silo.pgsty.com/blog/release/silo-20260806/&#34;&gt;RELEASE.2026-08-06T00-00-00Z&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;SILO 20260903 is the security and correctness release following the first fully rebranded Silo release. Its main theme is not a new delivery surface but a tighter set of server invariants: client headers do not create replication authority, browser origins cannot trigger bucket-metadata I/O before authentication, concurrent bucket-configuration writers cannot silently overwrite one another, and authorization and checksum behavior more closely match AWS S3.&lt;/p&gt;</description>
      </item>
    <item>
        <title>Explicit Version Deletes Now Require DeleteObjectVersion</title>
        <link>https://silo.pgsty.com/blog/release/delete-object-version-authorization/</link>
        <pubDate>Wed, 02 Sep 2026 00:00:00 +0800</pubDate>
        
        <guid>https://silo.pgsty.com/blog/release/delete-object-version-authorization/</guid>
        <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;Release status:&lt;/strong&gt; this change is implemented in&#xA;&lt;a href=&#34;https://github.com/pgsty/silo/pull/104&#34;&gt;pgsty/silo#104&lt;/a&gt;, tracking&#xA;&lt;a href=&#34;https://github.com/pgsty/silo/issues/58&#34;&gt;issue #58&lt;/a&gt;. Publishing this note&#xA;does not by itself mean that a server release, package, image, or deployment&#xA;contains the change.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;SILO now maps object-delete authorization to the operation the request will&#xA;actually perform:&lt;/p&gt;&#xA;&lt;div class=&#34;td-table-scroll td-table-scroll--static&#34;&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;th scope=&#34;col&#34;&gt;Request&lt;/th&gt;&#xA;      &lt;th scope=&#34;col&#34;&gt;Required action&lt;/th&gt;&#xA;    &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td&gt;No &lt;code&gt;versionId&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td&gt;&lt;code&gt;s3:DeleteObject&lt;/code&gt;&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td&gt;Version UUID&lt;/td&gt;&#xA;      &lt;td&gt;&lt;code&gt;s3:DeleteObjectVersion&lt;/code&gt;&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td&gt;Explicit &lt;code&gt;versionId=null&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td&gt;&lt;code&gt;s3:DeleteObjectVersion&lt;/code&gt;&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td&gt;&lt;code&gt;DeleteObjects&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td&gt;The mapping is applied independently to every XML entry&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;p&gt;Previously, SILO required &lt;code&gt;s3:DeleteObject&lt;/code&gt; for every case and used&#xA;&lt;code&gt;s3:DeleteObjectVersion&lt;/code&gt; only as an explicit-deny check. A principal holding&#xA;only &lt;code&gt;DeleteObject&lt;/code&gt; could therefore permanently remove a named historical&#xA;version. Conversely, a least-privilege purge principal holding only&#xA;&lt;code&gt;DeleteObjectVersion&lt;/code&gt; could not perform the operation it was intended for.&lt;/p&gt;</description>
      </item>
    <item>
        <title>Request-Header Deadlines: Absolute Header Limits and Rolling Body Idle Timeouts</title>
        <link>https://silo.pgsty.com/blog/design/request-header-timeouts/</link>
        <pubDate>Wed, 16 Sep 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/design/request-header-timeouts/</guid>
        <description>The decision record for PR #196&amp;rsquo;s HTTP deadline repair (fix 055030ea5): the connection wrapper&amp;rsquo;s rolling deadline overwrote every absolute read-header deadline, and the &amp;ndash;read-header-timeout flag was never wired into the server. Covers the two timeout classes, the configuration matrix, what HTTP/1, HTTP/2, and TLS each get, and why the rejected alternatives would have killed long uploads.</description>
      </item>
    <item>
        <title>mcli 20260903 Released</title>
        <link>https://silo.pgsty.com/blog/release/mcli-20260903/</link>
        <pubDate>Thu, 03 Sep 2026 15:39:20 +0800</pubDate>
        
        <guid>https://silo.pgsty.com/blog/release/mcli-20260903/</guid>
        <description>&lt;p&gt;&lt;strong&gt;Published:&lt;/strong&gt; 2026-09-03 · &lt;strong&gt;Version:&lt;/strong&gt; &lt;a href=&#34;https://github.com/pgsty/mc/releases/tag/RELEASE.2026-09-03T07-13-05Z&#34;&gt;RELEASE.2026-09-03T07-13-05Z&lt;/a&gt; · &lt;strong&gt;Source:&lt;/strong&gt; &lt;a href=&#34;https://github.com/pgsty/mc/commit/a2ef95c035d9ae7cc01469a63926900f1786f9e2&#34;&gt;&lt;code&gt;a2ef95c0&lt;/code&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Twenty-eight days after &lt;a href=&#34;https://silo.pgsty.com/blog/release/mcli-20260806/&#34;&gt;mcli 20260806&lt;/a&gt;, this release carries everything the client accumulated since. The toolchain moves to Go 1.27.1 and the shared dependency stack is aligned with the SILO family, with &lt;code&gt;silo-pkg&lt;/code&gt; imported under its own module path so &lt;code&gt;go.mod&lt;/code&gt; says what the binary is built from. The first genuinely new command since the fork arrives — &lt;code&gt;mcli checksum verify&lt;/code&gt;, a read-only audit of stored S3 additional checksums against the bytes an endpoint actually returns. The panic that made &lt;code&gt;--json admin prometheus metrics&lt;/code&gt; unusable is fixed, as is the response double-close that could panic after &lt;code&gt;mcli sql&lt;/code&gt; had printed valid rows. And every path that can print a credential — &lt;code&gt;--debug&lt;/code&gt; traces, &lt;code&gt;admin trace&lt;/code&gt;, error messages, JSON error documents, checksum reports — was rewritten fail-closed after adversarial review. The release process changed as much as the code: artifacts come from a GPG-signed tag at the exact tip of &lt;code&gt;main&lt;/code&gt; with green CI for that commit, ship &lt;code&gt;LICENSE&lt;/code&gt;, &lt;code&gt;NOTICE&lt;/code&gt;, and a generated &lt;code&gt;CREDITS&lt;/code&gt; in every format, carry Sigstore build provenance, and land in an immutable GitHub release.&lt;/p&gt;</description>
      </item>
    <item>
        <title>Conditional DELETE: Why the Condition Must Be Evaluated Once</title>
        <link>https://silo.pgsty.com/blog/design/conditional-delete/</link>
        <pubDate>Wed, 26 Aug 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/design/conditional-delete/</guid>
        <description>SILO PR #12 attempted to add If-Match to DeleteObject, but evaluated the condition independently in every storage pool, allowing a 412 response after a partial deletion or a stale copy to reappear after success. This record documents the defect, AWS contract, counterexamples, minimal repair, test requirements, and follow-up boundary for batch conditions and policy enforcement.</description>
      </item>
    <item>
        <title>DSN-Only Database Notifications: A Compatibility Boundary for #53</title>
        <link>https://silo.pgsty.com/blog/design/notify-url/</link>
        <pubDate>Sun, 23 Aug 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/design/notify-url/</guid>
        <description>SILO will keep PostgreSQL and MySQL notification targets, but standardize their configuration on complete connection strings. Pre-KV discrete database fields are an unsupported migration input and must abort server startup with an explicit error instead of being accepted and silently disabling every bucket notification.</description>
      </item>
    <item>
        <title>Preview Text, Never Execute It: SILO Console Text Preview PRD</title>
        <link>https://silo.pgsty.com/blog/design/console-text-preview/</link>
        <pubDate>Sun, 23 Aug 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/design/console-text-preview/</guid>
        <description>The accepted PRD for previewing small log, text, JSON, and XML objects in SILO Console as bounded, strict UTF-8 text—never as a same-origin executable document.</description>
      </item>
    <item>
        <title>mcli 20260806 Released</title>
        <link>https://silo.pgsty.com/blog/release/mcli-20260806/</link>
        <pubDate>Thu, 06 Aug 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/release/mcli-20260806/</guid>
        <description>&lt;p&gt;&lt;strong&gt;Published:&lt;/strong&gt; 2026-08-06 · &lt;strong&gt;Version:&lt;/strong&gt; &lt;a href=&#34;https://github.com/pgsty/mc/releases/tag/RELEASE.2026-08-06T00-00-00Z&#34;&gt;RELEASE.2026-08-06T00-00-00Z&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Two days after &lt;a href=&#34;https://silo.pgsty.com/blog/release/mcli-20260804/&#34;&gt;mcli 20260804&lt;/a&gt;, this release completes the client&amp;rsquo;s transition to the Silo identity. It is deliberately a pure rebranding and lockdown release: &lt;code&gt;--version&lt;/code&gt; and &lt;code&gt;--help&lt;/code&gt; now present the Silo client, every remaining path to MinIO&amp;rsquo;s SUBNET service is disabled at build time, the embedded vendor encryption key is removed from the diagnostics tooling, and the contribution policy moves to no-CLA with a mandatory DCO sign-off. There are &lt;strong&gt;no dependency changes and no protocol changes&lt;/strong&gt; in this cycle — &lt;code&gt;go.mod&lt;/code&gt; is byte-for-byte identical to 20260804 — so the regression surface is confined to text, command gating, and CI.&lt;/p&gt;</description>
      </item>
    <item>
        <title>Silo 20260806 Released</title>
        <link>https://silo.pgsty.com/blog/release/silo-20260806/</link>
        <pubDate>Thu, 06 Aug 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/release/silo-20260806/</guid>
        <description>&lt;p&gt;&lt;strong&gt;Version:&lt;/strong&gt; &lt;code&gt;RELEASE.2026-08-06T00-00-00Z&lt;/code&gt; · &lt;strong&gt;Commit:&lt;/strong&gt; &lt;code&gt;3be10fcc1a44f6620ded0bd303461f9d688cca23&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;SILO 20260806 is the &lt;strong&gt;first release published under the Silo name&lt;/strong&gt;. The previous release, &lt;a href=&#34;https://silo.pgsty.com/blog/release/silo-20260804/&#34;&gt;20260804&lt;/a&gt;, was the last one delivered as &lt;code&gt;pgsty/minio&lt;/code&gt;; this release completes the cutover to &lt;a href=&#34;https://github.com/pgsty/silo&#34;&gt;&lt;code&gt;github.com/pgsty/silo&lt;/code&gt;&lt;/a&gt; and renames every delivery surface — binary, packages, container images, systemd unit, Helm chart — while deliberately preserving every wire and configuration surface a MinIO deployment depends on. On top of the rename it adds native health checking (&lt;code&gt;silo healthcheck&lt;/code&gt;), a single-binary &lt;strong&gt;distroless&lt;/strong&gt; container image pilot, complete license-compliance materials in every artifact, and a release pipeline gated on compatibility snapshots and build provenance.&lt;/p&gt;</description>
      </item>
    <item>
        <title>Silo 20260804 Released</title>
        <link>https://silo.pgsty.com/blog/release/silo-20260804/</link>
        <pubDate>Wed, 05 Aug 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/release/silo-20260804/</guid>
        <description>&lt;p&gt;&lt;strong&gt;Version:&lt;/strong&gt; &lt;code&gt;RELEASE.2026-08-04T00-00-00Z&lt;/code&gt; · &lt;strong&gt;Commit:&lt;/strong&gt; &lt;code&gt;d88f46ccee345a9c2fabe2d221d9a9e56bc11aec&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;SILO 20260804 is a security, correctness, and release-engineering update to the &lt;code&gt;pgsty/minio&lt;/code&gt; community fork. It completes the internode storage-containment work begun with CVE-2026-42600, prevents request-controlled values from impersonating server-calculated S3/IAM policy conditions, restores streaming flush behavior, fixes several multipart and versioning edge cases, hardens notification configuration migration, moves the build baseline to Go 1.26.5, and connects the server to the SILO-maintained Console, shared package, and &lt;code&gt;mcli&lt;/code&gt; releases. The release pipeline was rebuilt to produce reproducible binaries and GPG-signed packages.&lt;/p&gt;</description>
      </item>
    <item>
        <title>mcli 20260804 Released</title>
        <link>https://silo.pgsty.com/blog/release/mcli-20260804/</link>
        <pubDate>Tue, 04 Aug 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/release/mcli-20260804/</guid>
        <description>&lt;p&gt;&lt;strong&gt;Published:&lt;/strong&gt; 2026-08-04 · &lt;strong&gt;Version:&lt;/strong&gt; &lt;a href=&#34;https://github.com/pgsty/mc/releases/tag/RELEASE.2026-08-04T00-00-00Z&#34;&gt;RELEASE.2026-08-04T00-00-00Z&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is the first release of the &lt;code&gt;pgsty/mc&lt;/code&gt; community fork since &lt;a href=&#34;https://silo.pgsty.com/blog/release/20260417/&#34;&gt;20260417&lt;/a&gt;. It fixes a credential leak in debug logging, severs every remaining connection between the client and upstream release channels, moves containers and packages onto artifacts this fork builds itself, and migrates packaging from MinIO&amp;rsquo;s &lt;code&gt;pkger&lt;/code&gt; to standard nFPM — with GPG-signed RPMs for the first time.&lt;/p&gt;&#xA;&lt;p&gt;Upstream &lt;code&gt;minio/mc&lt;/code&gt; was archived in July 2026. Its final commit, &lt;a href=&#34;https://github.com/minio/mc/commit/77f82e18b5401a65958f1619df6ebb994634bd88&#34;&gt;&lt;code&gt;77f82e18&lt;/code&gt;&lt;/a&gt;, is exactly this fork&amp;rsquo;s base, and upstream never cut a release containing it — so this build is strictly newer than any official &lt;code&gt;mc&lt;/code&gt; binary ever published.&lt;/p&gt;</description>
      </item>
    <item>
        <title>Silo 20260618 Released</title>
        <link>https://silo.pgsty.com/blog/release/20260618/</link>
        <pubDate>Thu, 18 Jun 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/release/20260618/</guid>
        <description>&lt;p&gt;&lt;strong&gt;Published:&lt;/strong&gt; 2026-06-18 · &lt;strong&gt;Version:&lt;/strong&gt; &lt;a href=&#34;https://github.com/pgsty/minio/releases/tag/RELEASE.2026-06-18T00-00-00Z&#34;&gt;RELEASE.2026-06-18T00-00-00Z&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This release is a security and dependency-maintenance update for the &lt;code&gt;pgsty/minio&lt;/code&gt; fork. It hardens LDAP STS throttling, completes S3 Select oversized-record enforcement, removes the obsolete &lt;code&gt;ReadMultiple&lt;/code&gt; internode storage-REST API, upgrades the Go build baseline to &lt;code&gt;1.26.4&lt;/code&gt;, and refreshes Go module dependencies to pick up additional third-party security fixes.&lt;/p&gt;&#xA;&lt;div class=&#34;td-callout td-callout--note&#34; role=&#34;note&#34;&gt;&#xA;  &lt;div class=&#34;td-callout__title&#34;&gt;&lt;i class=&#34;td-callout__icon fa-solid fa-circle-info&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;&lt;span class=&#34;td-callout__label&#34;&gt;Note&lt;/span&gt;&lt;/div&gt;&#xA;  &lt;div class=&#34;td-callout__body&#34;&gt;&#xA;&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Known issue&lt;/strong&gt;: this release — like every earlier community release since &lt;code&gt;RELEASE.2025-12-03T12-00-00Z&lt;/code&gt; — carries a silent streaming-flush regression inherited from upstream that breaks &lt;code&gt;mc watch&lt;/code&gt; / bucket-notification listeners and S3 Select keep-alives. There is no workaround. The fix was merged to &lt;code&gt;master&lt;/code&gt; on 2026-07-29 but has not shipped in a published server release; see &lt;a href=&#34;https://github.com/pgsty/minio/pull/34&#34;&gt;PR #34&lt;/a&gt; for the implementation.&lt;/p&gt;</description>
      </item>
    <item>
        <title>MinIO Fork, Promise Kept</title>
        <link>https://silo.pgsty.com/blog/post/minio-promise-kept/</link>
        <pubDate>Fri, 17 Apr 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/post/minio-promise-kept/</guid>
        <description>Two months after forking MinIO, pgsty/minio ships patches for four CVEs and related security issues.  No new features — just working builds, a restored console, and timely security fixes.</description>
      </item>
    <item>
        <title>CVE-2026-32285: The jsonparser Advisory That Required No Patch</title>
        <link>https://silo.pgsty.com/blog/security/cve-2026-32285/</link>
        <pubDate>Wed, 15 Apr 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/security/cve-2026-32285/</guid>
        <description>&lt;p&gt;&lt;strong&gt;Status:&lt;/strong&gt; Closed without a code change&lt;br&gt;&#xA;&lt;strong&gt;GitHub issue:&lt;/strong&gt; &lt;a href=&#34;https://github.com/pgsty/minio/issues/26&#34;&gt;pgsty/minio#26&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Security maintenance is not always a sequence of “find a vulnerability, then ship a patch.” The initial assessment of CVE-2026-32285 was that the repository might still carry a vulnerable &lt;code&gt;jsonparser&lt;/code&gt;; replacing the dependency or maintaining another fork was even considered. Checking the resolved module version and actual reachability changed the conclusion: the tree already used &lt;code&gt;v1.1.2&lt;/code&gt;, which contained the fix, and &lt;code&gt;govulncheck&lt;/code&gt; found no reachable vulnerable symbol.&lt;/p&gt;</description>
      </item>
    <item>
        <title>Go 1.27 TLS Defaults and OIDC Discovery Failure Modes</title>
        <link>https://silo.pgsty.com/blog/design/go127-tls-oidc-discovery/</link>
        <pubDate>Wed, 16 Sep 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/design/go127-tls-oidc-discovery/</guid>
        <description>What the Go 1.27 toolchain move changed at the TLS layer, how to diagnose an OIDC discovery failure by phase, and which health endpoint actually reports an offline identity provider. Written from the investigation of issue #154: mechanisms verified by synthetic experiments, with the customer-side root cause explicitly left unconfirmed.</description>
      </item>
    <item>
        <title>No I/O Before Auth, No Privilege From Headers</title>
        <link>https://silo.pgsty.com/blog/design/cors-replication-trust/</link>
        <pubDate>Tue, 01 Sep 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/design/cors-replication-trust/</guid>
        <description>A pre-authentication CORS lookup turned arbitrary path segments into metadata I/O and cache entries, while a client-controlled replication marker acquired privileges across SSE-C reads, source timestamps, checksums, object lock, events, and deletes. This record defines SILO&amp;rsquo;s resident-only CORS hot path, two-level replication trust model, post-signature sanitization boundary, wire-compatibility matrix, and release evidence.</description>
      </item>
    <item>
        <title>One Endpoint, Two Privileges: Separating User and Group Status</title>
        <link>https://silo.pgsty.com/blog/design/user-status-permissions/</link>
        <pubDate>Wed, 26 Aug 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/design/user-status-permissions/</guid>
        <description>Shared user and group status endpoints historically checked their Enable action even for disable requests. This record explains the least-privilege defect, SILO&amp;rsquo;s strict target-state authorization design, the user repair merged through PR #73, the group follow-up, four-way IAM tests, and the boundary between committed code and a delivered release.</description>
      </item>
    <item>
        <title>Config Environment Files Are Not Shell Scripts</title>
        <link>https://silo.pgsty.com/blog/design/config-env-file/</link>
        <pubDate>Fri, 28 Aug 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/design/config-env-file/</guid>
        <description>MINIO_CONFIG_ENV_FILE is parsed directly by SILO, not sourced by a shell. A shell-identifier check therefore rejected valid named configuration targets such as my-hook. This record defines the compatible key grammar, whitespace and quoting rules, failure behavior, security boundary, and regression tests.</description>
      </item>
    <item>
        <title>Two SSE-C Keys, One CopyObject Response</title>
        <link>https://silo.pgsty.com/blog/design/copyobject-ssec-checksum-response/</link>
        <pubDate>Fri, 28 Aug 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/design/copyobject-ssec-checksum-response/</guid>
        <description>CopyObject can carry one SSE-C key for the source and another for the destination. SILO stored the destination checksum correctly but tried to decrypt it for the response with the source key, silently omitting checksum fields. This record explains the key-context boundary, response-only repair, single-decryption design, and regression matrix.</description>
      </item>
    <item>
        <title>Why CompleteMultipartUpload Must Return ChecksumType: Review of PR #57</title>
        <link>https://silo.pgsty.com/blog/design/complete-multipart-checksum-type/</link>
        <pubDate>Tue, 25 Aug 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/design/complete-multipart-checksum-type/</guid>
        <description>SILO persisted the right multipart checksum and could report its type through HEAD and other APIs, but CompleteMultipartUpload dropped ChecksumType from its XML result. This record explains the defect, why PR #57 fixes it with two production lines, the review findings, the CI and merge decision, compatibility impact, and the remaining release boundary.</description>
      </item>
    <item>
        <title>When the Total Is Unknown: Folder Download Progress</title>
        <link>https://silo.pgsty.com/blog/design/dir-percentage/</link>
        <pubDate>Sun, 23 Aug 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/design/dir-percentage/</guid>
        <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;Status&lt;/strong&gt;: Shipped in SILO Console 2.2.0 (&lt;code&gt;16960f7ab&lt;/code&gt;); the server embeds it since its Console pin was updated (&lt;code&gt;4d6e1ea8e&lt;/code&gt;) · &lt;strong&gt;Priority&lt;/strong&gt;: P1 · &lt;strong&gt;Owner&lt;/strong&gt;: &lt;a href=&#34;https://github.com/pgsty/silo-console&#34;&gt;&lt;code&gt;pgsty/silo-console&lt;/code&gt;&lt;/a&gt; · &lt;strong&gt;Related issue&lt;/strong&gt;: &lt;a href=&#34;https://github.com/pgsty/silo/issues/62&#34;&gt;&lt;code&gt;pgsty/silo#62&lt;/code&gt;&lt;/a&gt; · &lt;strong&gt;PRD review&lt;/strong&gt;: Claude Fable 5 (&lt;code&gt;xhigh&lt;/code&gt;) — &lt;strong&gt;APPROVE&lt;/strong&gt; · &lt;strong&gt;Implementation review&lt;/strong&gt;: Claude Fable 5 (&lt;code&gt;xhigh&lt;/code&gt;), 2026-08-23 — &lt;strong&gt;APPROVE&lt;/strong&gt;, no P0/P1/P2 findings&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;SILO Console shows &lt;code&gt;NaN%&lt;/code&gt; in Downloads / Uploads while downloading a folder. The ZIP normally keeps streaming and the stored objects are intact, but the progress bar has crossed from &amp;ldquo;unknown&amp;rdquo; into an invalid determinate state. Users see a full-looking bar, assume the transfer failed or finished, and retry it.&lt;/p&gt;</description>
      </item>
    <item>
        <title>Silo 20260417 Released</title>
        <link>https://silo.pgsty.com/blog/release/20260417/</link>
        <pubDate>Fri, 17 Apr 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/release/20260417/</guid>
        <description>&lt;p&gt;&lt;strong&gt;Published:&lt;/strong&gt; 2026-04-17 · &lt;strong&gt;Version:&lt;/strong&gt; &lt;a href=&#34;https://github.com/pgsty/minio/releases/tag/RELEASE.2026-04-17T00-00-00Z&#34;&gt;RELEASE.2026-04-17T00-00-00Z&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This release focuses on security hardening and compatibility tightening. It bundles fixes across OIDC, LDAP STS, S3 Select, replication metadata handling, unsigned-trailer flows, the Snowball upload path, and multiple dependency- and Go toolchain-related security issues, while also incorporating the LDAP TLS regression fix and a cleanup of community-fork documentation.&lt;/p&gt;&#xA;&lt;h2 id=&#34;major-changes&#34;&gt;Major Changes&#xA;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Tighten the identity-authentication flow: OIDC / WebIdentity now accepts only asymmetrically signed &lt;code&gt;ID Token&lt;/code&gt; values backed by the IdP &lt;code&gt;JWKS&lt;/code&gt;; symmetrically signed tokens such as &lt;code&gt;HS256&lt;/code&gt; are no longer accepted. LDAP STS also now hides the distinction between unknown-user and bad-password failures to reduce username-enumeration risk.&lt;/li&gt;&#xA;&lt;li&gt;Update LDAP STS rate limiting: limits now apply to both source IP and normalized username, and successful requests no longer consume quota incorrectly. By default MinIO now uses only the socket peer address as the source and no longer trusts &lt;code&gt;X-Forwarded-For&lt;/code&gt;, &lt;code&gt;X-Real-IP&lt;/code&gt;, or &lt;code&gt;Forwarded&lt;/code&gt;; to rate-limit by real client IP, configure &lt;code&gt;MINIO_IDENTITY_LDAP_STS_TRUSTED_PROXIES&lt;/code&gt; explicitly.&lt;/li&gt;&#xA;&lt;li&gt;Make upload and write paths stricter: presigned query parameters can no longer be combined with &lt;code&gt;unsigned-trailer&lt;/code&gt; &lt;code&gt;PUT&lt;/code&gt; or multipart uploads. Snowball auto-extract now also performs full signature validation on the &lt;code&gt;unsigned-trailer&lt;/code&gt; path and rejects anonymous or forged-signature requests.&lt;/li&gt;&#xA;&lt;li&gt;Prevent replication metadata spoofing: internal &lt;code&gt;X-Minio-Replication-*&lt;/code&gt; headers attached to ordinary &lt;code&gt;PUT&lt;/code&gt; / &lt;code&gt;COPY&lt;/code&gt; requests are now rejected or ignored, and only trusted replication flows may write the related internal metadata.&lt;/li&gt;&#xA;&lt;li&gt;Clarify S3 Select error semantics: oversized CSV and line-delimited JSON records now return &lt;code&gt;OverMaxRecordSize&lt;/code&gt; directly instead of the generic &lt;code&gt;InternalError&lt;/code&gt;; clients or alerting rules that depend on the old error code should be adjusted.&lt;/li&gt;&#xA;&lt;li&gt;Upgrade the runtime and dependency baseline: fix the regression where &lt;code&gt;ldaps://&lt;/code&gt; did not correctly apply TLS settings, replace &lt;code&gt;minio/pkg/v3&lt;/code&gt; with &lt;code&gt;pgsty/minio-pkg/v3&lt;/code&gt;, and pin several critical dependencies that are prone to breaking changes. The release also upgrades &lt;code&gt;go-jose&lt;/code&gt;, &lt;code&gt;go.opentelemetry.io&lt;/code&gt;, and Go &lt;code&gt;1.26.2&lt;/code&gt; to unify the build and release baseline.&lt;/li&gt;&#xA;&lt;li&gt;Refresh documentation and security guidance: update &lt;code&gt;SECURITY.md&lt;/code&gt;, &lt;code&gt;VULNERABILITY_REPORT.md&lt;/code&gt;, &lt;code&gt;docs/sts/ldap.md&lt;/code&gt;, and related documents, add a security advisory index, and switch upstream &lt;code&gt;minio/minio&lt;/code&gt; references in the security guidance over to &lt;code&gt;pgsty/minio&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;fixed-cves&#34;&gt;Fixed CVEs&#xA;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/advisories?query=CVE-2026-34986&#34;&gt;CVE-2026-34986&lt;/a&gt;: upgrade &lt;code&gt;go-jose&lt;/code&gt; to &lt;code&gt;v4.1.4&lt;/code&gt; and fix known security issues in the JWT / JOSE dependency chain.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/advisories/GHSA-hfvc-g4fc-pqhx&#34;&gt;CVE-2026-39883&lt;/a&gt;: upgrade the &lt;code&gt;go.opentelemetry.io&lt;/code&gt; dependency stack to fix the PATH-hijacking risk.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/advisories?query=CVE-2026-33322&#34;&gt;CVE-2026-33322&lt;/a&gt;: restore the strict JWKS-only OIDC JWT verification path to block keyring injection and algorithm-confusion risk.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/advisories?query=CVE-2026-33419&#34;&gt;CVE-2026-33419&lt;/a&gt;: systematically harden LDAP STS authentication, rate limiting, source-address identification, and accounting logic across four follow-up fixes.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/advisories?query=CVE-2026-34204&#34;&gt;CVE-2026-34204&lt;/a&gt;: reject injection of &lt;code&gt;X-Minio-Replication-*&lt;/code&gt; metadata by untrusted requests to prevent objects from being written with invalid replication state.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/advisories?query=CVE-2026-39414&#34;&gt;CVE-2026-39414&lt;/a&gt;: reject oversized S3 Select records early to avoid continued buffering and parsing of abnormal inputs.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/advisories/GHSA-hv4r-mvr4-25vw&#34;&gt;GHSA-hv4r-mvr4-25vw&lt;/a&gt;: close the unsigned-trailer query-auth bypass.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/advisories/GHSA-9c4q-hq6p-c237&#34;&gt;GHSA-9c4q-hq6p-c237&lt;/a&gt;: harden unsigned-trailer authentication and signature validation in Snowball auto-extract scenarios.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://pkg.go.dev/vuln/GO-2026-4947&#34;&gt;CVE-2026-32280&lt;/a&gt;, &lt;a href=&#34;https://pkg.go.dev/vuln/GO-2026-4946&#34;&gt;CVE-2026-32281&lt;/a&gt;, and &lt;a href=&#34;https://pkg.go.dev/vuln/GO-2026-4870&#34;&gt;CVE-2026-32283&lt;/a&gt;: upgrade Go to &lt;code&gt;1.26.2&lt;/code&gt; and absorb the upstream toolchain and stdlib security fixes.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;related-commits&#34;&gt;Related Commits&#xA;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/pgsty/minio/commit/c878ca075678e943666ec2365afe95d992a0cc76&#34;&gt;c878ca0&lt;/a&gt;: fix: pin deps with breaking changes and fix LDAP TLS regression (#15)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/pgsty/minio/commit/e970ec5629068a1fc5938dddb4e3f1e70e1e2929&#34;&gt;e970ec5&lt;/a&gt;: fix: upgrade go-jose to v4.1.4 to patch CVE-2026-34986&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/pgsty/minio/commit/a2065105a0e1b67f44b537e9d246ace2acc6aec0&#34;&gt;a206510&lt;/a&gt;: fix: CVE-2026-39883 upgrade go.opentelemetry.io&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/pgsty/minio/commit/fd65f1199bac0317cc18fc9630dcee3f0c168024&#34;&gt;fd65f11&lt;/a&gt;: merge: PR #18 upgrade go-jose to v4.1.4 for CVE-2026-34986&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/pgsty/minio/commit/bc087e40a3a4feaa7d9817cfc621e79bed5ad84a&#34;&gt;bc087e4&lt;/a&gt;: merge: PR #19 upgrade go.opentelemetry.io for CVE-2026-39883&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/pgsty/minio/commit/f1f2239ef8f44de48f6730327643e454574cbcdd&#34;&gt;f1f2239&lt;/a&gt;: fix: CVE-2026-33322 restore JWKS-only OIDC JWT verification&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/pgsty/minio/commit/6619d0cd326b022dd34f7da4d637c5aca37bbd23&#34;&gt;6619d0c&lt;/a&gt;: fix: CVE-2026-33419 harden LDAP STS auth&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/pgsty/minio/commit/fcb8f242dee3394263e5b7a2cf02af87d34701f8&#34;&gt;fcb8f24&lt;/a&gt;: fix: CVE-2026-34204 reject untrusted replication metadata&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/pgsty/minio/commit/c5765dcbbe28b2fb001c30ef44e95ff9ca026ca9&#34;&gt;c5765dc&lt;/a&gt;: fix: CVE-2026-39414 reject oversized S3 Select records&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/pgsty/silo/commit/f444b6f37e4494aa043b8786214c7c2c5703e5ff&#34;&gt;f444b6f37&lt;/a&gt;: fix: fake CVE-2026-40027 block unsigned-trailer query auth bypass&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/pgsty/silo/commit/efb6e5b00b03e189b44c0349efcee07d440ec428&#34;&gt;efb6e5b00&lt;/a&gt;: fix: fake CVE-2026-40028 harden snowball unsigned-trailer auth&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/pgsty/minio/commit/9a4b3cd92f8fff72d31c3e41d68d878f39253eaa&#34;&gt;9a4b3cd&lt;/a&gt;: fix: CVE-2026-32280/CVE-2026-32281/CVE-2026-32283 upgrade Go to 1.26.2&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/pgsty/minio/commit/c55b52caf183db40adb3fdb56cb8b0f0067a8dd1&#34;&gt;c55b52c&lt;/a&gt;: fix: CVE-2026-33419 preserve LDAP STS rate limits on success&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/pgsty/minio/commit/817a4570165b3073451b4b392a3aafcaafcdcea9&#34;&gt;817a457&lt;/a&gt;: fix: CVE-2026-33419 harden LDAP STS rate-limit source IP&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/pgsty/minio/commit/084a15461a03944e50b37987c9446d4c2f87f9b8&#34;&gt;084a154&lt;/a&gt;: fix: CVE-2026-33419 tighten LDAP STS rate-limit accounting&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/pgsty/minio/commit/16e34f900cf90b541561a450e2588332e17213b9&#34;&gt;16e34f9&lt;/a&gt;: docs: refresh security guidance and fork references&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
      </item>
    <item>
        <title>CVE-2026-33322: OIDC JWT Algorithm Confusion</title>
        <link>https://silo.pgsty.com/blog/security/cve-2026-33322/</link>
        <pubDate>Wed, 15 Apr 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/security/cve-2026-33322/</guid>
        <description>&lt;p&gt;&lt;strong&gt;Status:&lt;/strong&gt; Released&lt;br&gt;&#xA;&lt;strong&gt;First containing release:&lt;/strong&gt; &lt;a href=&#34;https://github.com/pgsty/minio/releases/tag/RELEASE.2026-04-17T00-00-00Z&#34;&gt;RELEASE.2026-04-17T00-00-00Z&lt;/a&gt;&lt;br&gt;&#xA;&lt;strong&gt;Affected entry points:&lt;/strong&gt; &lt;code&gt;AssumeRoleWithWebIdentity&lt;/code&gt;, &lt;code&gt;AssumeRoleWithClientGrants&lt;/code&gt;&lt;br&gt;&#xA;&lt;strong&gt;GitHub issue:&lt;/strong&gt; &lt;a href=&#34;https://github.com/pgsty/minio/issues/22&#34;&gt;pgsty/minio#22&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;The old implementation placed the OIDC client secret in the JWT verifier keyring while also accepting HMAC signing methods. An attacker who knew that client secret could therefore mint an HS-signed token and exchange it through STS for temporary credentials. The final fix restored asymmetric, JWKS-only verification. It deliberately broke HS256/384/512 compatibility instead of keeping an option that would reintroduce ambiguous trust semantics.&lt;/p&gt;</description>
      </item>
    <item>
        <title>MinIO Is Dead, Long Live MinIO</title>
        <link>https://silo.pgsty.com/blog/post/minio-resurrect/</link>
        <pubDate>Sat, 14 Feb 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/post/minio-resurrect/</guid>
        <description>MinIO&amp;rsquo;s repo is officially archived and abandoned. And how AI Agents helped bring it back from the dead. This post explains how a community fork restores the admin console and ships binaries via CI/CD pipeline.</description>
      </item>
    <item>
        <title>A ListObjects Shortcut Must Not Turn a Missing Bucket into an Empty One</title>
        <link>https://silo.pgsty.com/blog/design/listobjects-nosuchbucket/</link>
        <pubDate>Wed, 26 Aug 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/design/listobjects-nosuchbucket/</guid>
        <description>Three ListObjects shortcuts return EOF before touching storage, causing a missing bucket to appear as an empty listing. This record explains the SILO #32 / PR #37 regression, S3 compatibility value, minimal shortcut-only existence check, cluster fan-out cost, derived risks, and acceptance decision.</description>
      </item>
    <item>
        <title>Read-Only Checksum Audit and Reliable CLI Output</title>
        <link>https://silo.pgsty.com/blog/design/checksum-verify/</link>
        <pubDate>Sat, 29 Aug 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/design/checksum-verify/</guid>
        <description>MCLI can audit stored S3 checksums against logical object bytes without mutating data. This record defines selection, classification, report and exit semantics, and the non-TTY output contract required by pipelines and CI.</description>
      </item>
    <item>
        <title>Optional Checksums, Mandatory Failure: Repairing UploadPart and UploadPartCopy Compatibility</title>
        <link>https://silo.pgsty.com/blog/design/uploadpart-checksum/</link>
        <pubDate>Mon, 24 Aug 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/design/uploadpart-checksum/</guid>
        <description>SILO required every part in a checksum-enabled multipart upload to carry a per-part checksum. That rejected ordinary UploadPart requests that omitted an optional header and made UploadPartCopy unusable. This record covers discovery, AWS and AIStor research, rejected designs, the one-pass plaintext solution, the compatibility-baseline blocker, adversarial review, and the consistency contract for follow-up repairs.</description>
      </item>
    <item>
        <title>CVE-2026-33419: LDAP STS Enumeration and the Throttling Chain</title>
        <link>https://silo.pgsty.com/blog/security/cve-2026-33419/</link>
        <pubDate>Wed, 15 Apr 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/security/cve-2026-33419/</guid>
        <description>&lt;p&gt;&lt;strong&gt;Status:&lt;/strong&gt; Released, followed by two rounds of corrections&lt;br&gt;&#xA;&lt;strong&gt;First containing release:&lt;/strong&gt; &lt;a href=&#34;https://github.com/pgsty/minio/releases/tag/RELEASE.2026-04-17T00-00-00Z&#34;&gt;RELEASE.2026-04-17T00-00-00Z&lt;/a&gt;&lt;br&gt;&#xA;&lt;strong&gt;Complete correction:&lt;/strong&gt; &lt;a href=&#34;https://github.com/pgsty/minio/releases/tag/RELEASE.2026-06-18T00-00-00Z&#34;&gt;RELEASE.2026-06-18T00-00-00Z&lt;/a&gt;&lt;br&gt;&#xA;&lt;strong&gt;GitHub issue:&lt;/strong&gt; &lt;a href=&#34;https://github.com/pgsty/minio/issues/23&#34;&gt;pgsty/minio#23&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;The core vulnerability was straightforward: LDAP STS returned different results for “user does not exist” and “password is wrong,” creating a username oracle. The first fix unified the external authentication failure and added limits by source IP and username. Continued review then showed that success refunds, spoofable source headers, reservation accounting, and the shared username bucket could turn the security control itself into a new attack surface.&lt;/p&gt;</description>
      </item>
    <item>
        <title>Silo 20260325 Released</title>
        <link>https://silo.pgsty.com/blog/release/20260325/</link>
        <pubDate>Wed, 25 Mar 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/release/20260325/</guid>
        <description>&lt;p&gt;&lt;strong&gt;Published:&lt;/strong&gt; 2026-03-25 · &lt;strong&gt;Version:&lt;/strong&gt; &lt;a href=&#34;https://github.com/pgsty/minio/releases/tag/RELEASE.2026-03-25T00-00-00Z&#34;&gt;RELEASE.2026-03-25T00-00-00Z&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a maintenance release centered on packaging, stability, and security disclosure. It improves the shipping artifacts, fixes an LDAP TLS regression, and explicitly documents the secure dependency set carried by the release.&lt;/p&gt;&#xA;&lt;h2 id=&#34;major-changes&#34;&gt;Major Changes&#xA;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Bundle &lt;code&gt;mcli/mc&lt;/code&gt; into the Docker image and add checksum verification for a better out-of-the-box image experience.&lt;/li&gt;&#xA;&lt;li&gt;Fix the LDAP TLS regression affecting &lt;code&gt;ldaps://&lt;/code&gt; deployments so TLS settings are correctly honored.&lt;/li&gt;&#xA;&lt;li&gt;Remove inherited upstream CI/CD workflows that are no longer used in the community-maintained fork.&lt;/li&gt;&#xA;&lt;li&gt;Pin several critical dependencies to avoid further fallout from upstream breaking changes.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;fixed-cves&#34;&gt;Fixed CVEs&#xA;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://pkg.go.dev/vuln/GO-2026-4394&#34;&gt;CVE-2026-24051&lt;/a&gt;: the release notes explicitly call out &lt;code&gt;go.opentelemetry.io/otel/sdk v1.42.0&lt;/code&gt;, which avoids the macOS PATH-hijacking arbitrary code execution issue.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://pkg.go.dev/vuln/GO-2025-4173&#34;&gt;CVE-2025-10543&lt;/a&gt;: the release notes explicitly ship &lt;code&gt;github.com/eclipse/paho.mqtt.golang v1.5.1&lt;/code&gt;, fixing incorrect MQTT packet encoding for oversized UTF-8 strings.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://pkg.go.dev/vuln/GO-2025-4134&#34;&gt;CVE-2025-58181&lt;/a&gt;: the release notes explicitly ship &lt;code&gt;golang.org/x/crypto v0.49.0&lt;/code&gt;, fixing unbounded memory consumption in &lt;code&gt;ssh&lt;/code&gt; GSSAPI authentication handling.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;related-commits&#34;&gt;Related Commits&#xA;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/pgsty/minio/commit/f2f9a40dce9597d5d1fa758b3316d41a86e73cff&#34;&gt;f2f9a40&lt;/a&gt;: add mcli/mc from pgsty/mc to Docker image&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/pgsty/minio/commit/ce1c537eb1dd6c4efa1cf75cf5df0e2c489c947a&#34;&gt;ce1c537&lt;/a&gt;: fix: pin deps with breaking changes and fix LDAP TLS regression (#15)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/pgsty/minio/commit/ee55e5391a5d5e4bd46d555a11b2215eb6ed836e&#34;&gt;ee55e53&lt;/a&gt;: remove upstream CI/CD workflows inherited from minio/minio&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
      </item>
    <item>
        <title>MinIO Is Dead. Which Next?</title>
        <link>https://silo.pgsty.com/blog/post/minio-alternative/</link>
        <pubDate>Mon, 08 Dec 2025 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/post/minio-alternative/</guid>
        <description>MinIO just entered maintenance mode. What replaces it? Can RustFS step in? I tested the contenders so you don’t have to.</description>
      </item>
    <item>
        <title>BadDigest, InvalidRequest, and the CompleteMultipartUpload Checksum Contract</title>
        <link>https://silo.pgsty.com/blog/design/complete-multipart-checksum-errors/</link>
        <pubDate>Thu, 27 Aug 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/design/complete-multipart-checksum-errors/</guid>
        <description>SILO rejected three invalid CompleteMultipartUpload requests, but returned the wrong S3 error codes and missed checksum-type validation paths. This record establishes the AWS evidence, upstream history, operation-scoped repair, type-only follow-up, regression matrix, and the separate evidence gate for CRC64NVME plus COMPOSITE.</description>
      </item>
    <item>
        <title>Should SILO Fix ListMultipartUploads? Design Review of Issue #79</title>
        <link>https://silo.pgsty.com/blog/design/list-multipart-uploads/</link>
        <pubDate>Sun, 30 Aug 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/design/list-multipart-uploads/</guid>
        <description>SILO treats ListMultipartUploads prefix as an exact object key and uses a node-local volatile cache for bucket-wide listing. This record explains the defect and its sources, evaluates the compatibility and operational impact, compares four response and storage options, and recommends a staged metadata-plus-scan repair rather than either a cosmetic cache patch or an immediate durable index.</description>
      </item>
    <item>
        <title>CVE-2026-34204: Replication Metadata Injection</title>
        <link>https://silo.pgsty.com/blog/security/cve-2026-34204/</link>
        <pubDate>Wed, 15 Apr 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/security/cve-2026-34204/</guid>
        <description>&lt;p&gt;&lt;strong&gt;Status:&lt;/strong&gt; Released&lt;br&gt;&#xA;&lt;strong&gt;First containing release:&lt;/strong&gt; &lt;a href=&#34;https://github.com/pgsty/minio/releases/tag/RELEASE.2026-04-17T00-00-00Z&#34;&gt;RELEASE.2026-04-17T00-00-00Z&lt;/a&gt;&lt;br&gt;&#xA;&lt;strong&gt;GitHub issue:&lt;/strong&gt; &lt;a href=&#34;https://github.com/pgsty/minio/issues/24&#34;&gt;pgsty/minio#24&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Ordinary &lt;code&gt;PUT&lt;/code&gt; and &lt;code&gt;COPY&lt;/code&gt; requests could smuggle &lt;code&gt;X-Minio-Replication-*&lt;/code&gt; headers into internal &lt;code&gt;X-Minio-Internal-*&lt;/code&gt; SSE metadata, creating objects whose replication state did not match the authorized path and could even make them unreadable. The final fix stopped accepting replication-only metadata by default, restored it only in a trusted flow authorized for &lt;code&gt;ReplicateObjectAction&lt;/code&gt;, and sanitized &lt;code&gt;CopyObject&lt;/code&gt; before any header consumer ran.&lt;/p&gt;&#xA;&lt;h2 id=&#34;threat-model&#34;&gt;Threat model&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;An attacker needed only ordinary object-write permission, not internode credentials. The input came entirely from client-controlled &lt;code&gt;X-Minio-Replication-*&lt;/code&gt; headers, but metadata extraction converted it into internal replication or SSE state.&lt;/p&gt;</description>
      </item>
    <item>
        <title>Silo 20260321 Released</title>
        <link>https://silo.pgsty.com/blog/release/20260321/</link>
        <pubDate>Sat, 21 Mar 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/release/20260321/</guid>
        <description>&lt;p&gt;&lt;strong&gt;Published:&lt;/strong&gt; 2026-03-21 · &lt;strong&gt;Version:&lt;/strong&gt; &lt;a href=&#34;https://github.com/pgsty/minio/releases/tag/RELEASE.2026-03-21T00-00-00Z&#34;&gt;RELEASE.2026-03-21T00-00-00Z&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This maintenance release is built around the Go 1.26.1 upgrade and a broad dependency refresh. Beyond stricter compiler and linter compatibility fixes, it also delivers the most substantial security dependency refresh in the current release line.&lt;/p&gt;&#xA;&lt;h2 id=&#34;major-changes&#34;&gt;Major Changes&#xA;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Upgrade the build environment from Go &lt;code&gt;1.26.0&lt;/code&gt; to Go &lt;code&gt;1.26.1&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Refresh direct and indirect dependencies to converge on the newer toolchain.&lt;/li&gt;&#xA;&lt;li&gt;Fix linter and test issues exposed by the stricter Go 1.26.1 checks.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;fixed-cves&#34;&gt;Fixed CVEs&#xA;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://pkg.go.dev/vuln/GO-2026-4599&#34;&gt;CVE-2026-27137&lt;/a&gt;: Go stdlib &lt;code&gt;1.26.0&lt;/code&gt; -&amp;gt; &lt;code&gt;1.26.1&lt;/code&gt; fixes incomplete email-constraint enforcement in &lt;code&gt;crypto/x509&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://pkg.go.dev/vuln/GO-2026-4600&#34;&gt;CVE-2026-27138&lt;/a&gt;: Go stdlib &lt;code&gt;1.26.0&lt;/code&gt; -&amp;gt; &lt;code&gt;1.26.1&lt;/code&gt; fixes a &lt;code&gt;crypto/x509&lt;/code&gt; panic triggered by malformed certificates.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://pkg.go.dev/vuln/GO-2026-4601&#34;&gt;CVE-2026-25679&lt;/a&gt;: Go stdlib &lt;code&gt;1.26.0&lt;/code&gt; -&amp;gt; &lt;code&gt;1.26.1&lt;/code&gt; fixes insufficient validation of IPv6 host literals in &lt;code&gt;net/url&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://pkg.go.dev/vuln/GO-2026-4602&#34;&gt;CVE-2026-27139&lt;/a&gt;: Go stdlib &lt;code&gt;1.26.0&lt;/code&gt; -&amp;gt; &lt;code&gt;1.26.1&lt;/code&gt; fixes &lt;code&gt;FileInfo&lt;/code&gt; metadata escaping the &lt;code&gt;Root&lt;/code&gt; boundary in &lt;code&gt;os&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://pkg.go.dev/vuln/GO-2026-4603&#34;&gt;CVE-2026-27142&lt;/a&gt;: Go stdlib &lt;code&gt;1.26.0&lt;/code&gt; -&amp;gt; &lt;code&gt;1.26.1&lt;/code&gt; fixes missing URL escaping in &lt;code&gt;html/template&lt;/code&gt; for &lt;code&gt;meta refresh&lt;/code&gt; content.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://pkg.go.dev/vuln/GO-2026-4503&#34;&gt;CVE-2026-26958&lt;/a&gt;: &lt;code&gt;filippo.io/edwards25519&lt;/code&gt; &lt;code&gt;v1.1.0&lt;/code&gt; -&amp;gt; &lt;code&gt;v1.2.0&lt;/code&gt; fixes incorrect or undefined &lt;code&gt;MultiScalarMult&lt;/code&gt; behavior.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://pkg.go.dev/vuln/GO-2025-4173&#34;&gt;CVE-2025-10543&lt;/a&gt;: &lt;code&gt;github.com/eclipse/paho.mqtt.golang&lt;/code&gt; &lt;code&gt;v1.5.0&lt;/code&gt; -&amp;gt; &lt;code&gt;v1.5.1&lt;/code&gt; fixes incorrect MQTT packet encoding for oversized UTF-8 strings.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://pkg.go.dev/vuln/GO-2026-4394&#34;&gt;CVE-2026-24051&lt;/a&gt;: &lt;code&gt;go.opentelemetry.io/otel/sdk&lt;/code&gt; &lt;code&gt;v1.38.0&lt;/code&gt; -&amp;gt; &lt;code&gt;v1.42.0&lt;/code&gt; fixes the macOS PATH-hijacking arbitrary code execution issue.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://pkg.go.dev/vuln/GO-2026-4762&#34;&gt;CVE-2026-33186&lt;/a&gt;: &lt;code&gt;google.golang.org/grpc&lt;/code&gt; &lt;code&gt;v1.77.0&lt;/code&gt; -&amp;gt; &lt;code&gt;v1.79.3&lt;/code&gt; fixes authorization bypass caused by a missing leading slash in the HTTP/2 &lt;code&gt;:path&lt;/code&gt; pseudo-header.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;related-commits&#34;&gt;Related Commits&#xA;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/pgsty/minio/commit/5abd9a80f66f6fe2812d2eded18961a65712eb9e&#34;&gt;5abd9a8&lt;/a&gt;: bump golang to 1.26.1 and update deps&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/pgsty/minio/commit/377fc616d9c5944d9d0aff081089d2d0c4ebb12c&#34;&gt;377fc61&lt;/a&gt;: fix: satisfy stricter Go 1.26.1 linter checks&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
      </item>
    <item>
        <title>MinIO is Dead</title>
        <link>https://silo.pgsty.com/blog/post/minio-is-dead/</link>
        <pubDate>Thu, 04 Dec 2025 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/post/minio-is-dead/</guid>
        <description>MinIO announces it is entering maintenance mode, the dragon-slayer has become the dragon – how MinIO transformed from an open-source S3 alternative to just another commercial software company</description>
      </item>
    <item>
        <title>CVE-2026-39414: Oversized S3 Select Records and a SIMD Bypass</title>
        <link>https://silo.pgsty.com/blog/security/cve-2026-39414/</link>
        <pubDate>Wed, 15 Apr 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/security/cve-2026-39414/</guid>
        <description>&lt;p&gt;&lt;strong&gt;Status:&lt;/strong&gt; Released; the second-round fix was completed in June&lt;br&gt;&#xA;&lt;strong&gt;Initial fix release:&lt;/strong&gt; &lt;a href=&#34;https://github.com/pgsty/minio/releases/tag/RELEASE.2026-04-17T00-00-00Z&#34;&gt;RELEASE.2026-04-17T00-00-00Z&lt;/a&gt;&lt;br&gt;&#xA;&lt;strong&gt;Complete fix release:&lt;/strong&gt; &lt;a href=&#34;https://github.com/pgsty/minio/releases/tag/RELEASE.2026-06-18T00-00-00Z&#34;&gt;RELEASE.2026-06-18T00-00-00Z&lt;/a&gt;&lt;br&gt;&#xA;&lt;strong&gt;GitHub issue:&lt;/strong&gt; &lt;a href=&#34;https://github.com/pgsty/minio/issues/25&#34;&gt;pgsty/minio#25&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;The first fix in April reused the existing 1 MiB &lt;code&gt;maxCharsPerRecord&lt;/code&gt; limit for both CSV and ordinary JSON Lines. This prevented unbounded buffering while waiting for a delimiter and returned the explicit &lt;code&gt;OverMaxRecordSize&lt;/code&gt; error to clients. A June review then found that CPUs with SIMD support took a different &lt;code&gt;simdjson&lt;/code&gt; fast path that bypassed the limit completely.&lt;/p&gt;</description>
      </item>
    <item>
        <title>Silo 20260314 Released</title>
        <link>https://silo.pgsty.com/blog/release/20260314/</link>
        <pubDate>Sat, 14 Mar 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/release/20260314/</guid>
        <description>&lt;p&gt;&lt;strong&gt;Published:&lt;/strong&gt; 2026-03-14 · &lt;strong&gt;Version:&lt;/strong&gt; &lt;a href=&#34;https://github.com/pgsty/minio/releases/tag/RELEASE.2026-03-14T12-00-00Z&#34;&gt;RELEASE.2026-03-14T12-00-00Z&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This release switches the project to the community-maintained Console fork and performs a sizeable dependency refresh to establish the base for the later Go 1.26.x maintenance releases.&lt;/p&gt;&#xA;&lt;h2 id=&#34;major-changes&#34;&gt;Major Changes&#xA;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Switch to the community-maintained &lt;code&gt;georgmangold/console v1.9.1&lt;/code&gt; fork in place of the unmaintainable upstream Console dependency.&lt;/li&gt;&#xA;&lt;li&gt;Refresh a large portion of the direct and indirect dependency graph so the new Console and toolchain combination builds cleanly.&lt;/li&gt;&#xA;&lt;li&gt;Fix the &lt;code&gt;go vet&lt;/code&gt; format directive issue in &lt;code&gt;grid_test.go&lt;/code&gt; and adjust tests for the HTTP behavior changes in Go 1.26.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;fixed-cves&#34;&gt;Fixed CVEs&#xA;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://pkg.go.dev/vuln/GO-2025-4116&#34;&gt;CVE-2025-47913&lt;/a&gt;: &lt;code&gt;golang.org/x/crypto&lt;/code&gt; &lt;code&gt;v0.37.0&lt;/code&gt; -&amp;gt; &lt;code&gt;v0.46.0&lt;/code&gt; fixes a panic in &lt;code&gt;ssh/agent&lt;/code&gt; when handling malformed responses.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://pkg.go.dev/vuln/GO-2025-4134&#34;&gt;CVE-2025-58181&lt;/a&gt;: &lt;code&gt;golang.org/x/crypto&lt;/code&gt; &lt;code&gt;v0.37.0&lt;/code&gt; -&amp;gt; &lt;code&gt;v0.46.0&lt;/code&gt; fixes unbounded memory consumption in &lt;code&gt;ssh&lt;/code&gt; GSSAPI authentication parsing.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://pkg.go.dev/vuln/GO-2025-4135&#34;&gt;CVE-2025-47914&lt;/a&gt;: &lt;code&gt;golang.org/x/crypto&lt;/code&gt; &lt;code&gt;v0.37.0&lt;/code&gt; -&amp;gt; &lt;code&gt;v0.46.0&lt;/code&gt; fixes a panic in &lt;code&gt;ssh/agent&lt;/code&gt; caused by malformed identity messages.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://pkg.go.dev/vuln/GO-2026-4440&#34;&gt;CVE-2025-47911&lt;/a&gt;: &lt;code&gt;golang.org/x/net&lt;/code&gt; &lt;code&gt;v0.39.0&lt;/code&gt; -&amp;gt; &lt;code&gt;v0.48.0&lt;/code&gt; fixes quadratic parsing complexity in &lt;code&gt;html.Parse&lt;/code&gt; for crafted inputs.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://pkg.go.dev/vuln/GO-2026-4441&#34;&gt;CVE-2025-58190&lt;/a&gt;: &lt;code&gt;golang.org/x/net&lt;/code&gt; &lt;code&gt;v0.39.0&lt;/code&gt; -&amp;gt; &lt;code&gt;v0.48.0&lt;/code&gt; fixes an infinite parsing loop in &lt;code&gt;golang.org/x/net/html&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;related-commits&#34;&gt;Related Commits&#xA;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/pgsty/minio/commit/68521b37f2697c79b7fe14676eaf687864a1cf26&#34;&gt;68521b3&lt;/a&gt;: add github ci/cd pipeline&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/pgsty/minio/commit/00f3cf74fc4319f3d34c4e47c87ad39386318755&#34;&gt;00f3cf7&lt;/a&gt;: RELEASE.2026-03-14T12-00-00Z with go 1.26.0&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
      </item>
    <item>
        <title>CVE-2026-40344: Snowball Auto-Extract Authentication Bypass</title>
        <link>https://silo.pgsty.com/blog/security/cve-2026-40344/</link>
        <pubDate>Thu, 16 Apr 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/security/cve-2026-40344/</guid>
        <description>&lt;p&gt;&lt;strong&gt;Status:&lt;/strong&gt; Released&lt;br&gt;&#xA;&lt;strong&gt;First containing release:&lt;/strong&gt; &lt;a href=&#34;https://github.com/pgsty/minio/releases/tag/RELEASE.2026-04-17T00-00-00Z&#34;&gt;RELEASE.2026-04-17T00-00-00Z&lt;/a&gt;&lt;br&gt;&#xA;&lt;strong&gt;GitHub advisory:&lt;/strong&gt; &lt;a href=&#34;https://github.com/advisories/GHSA-9c4q-hq6p-c237&#34;&gt;GHSA-9c4q-hq6p-c237&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Snowball&amp;rsquo;s &lt;code&gt;PutObjectExtractHandler&lt;/code&gt; omitted the streaming unsigned-trailer authentication case. A tar stream with a forged signature could enter &lt;code&gt;untar()&lt;/code&gt; before authentication completed, and one request could fan out into many object writes. The final fix initialized the correct reader, handled the decoded length, and completed SigV4 verification before any tar byte reached the extractor.&lt;/p&gt;&#xA;&lt;h2 id=&#34;cve-number&#34;&gt;Why the identifier changed&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;The official CVE had not been assigned when the fix was written, so the commit subject used the temporary identifier &lt;code&gt;fake CVE-2026-40028&lt;/code&gt;. The final identifier is &lt;strong&gt;CVE-2026-40344&lt;/strong&gt;. The historical commit was not rewritten; the advisory and this article use the official number.&lt;/p&gt;</description>
      </item>
    <item>
        <title>Silo 20260214 Released</title>
        <link>https://silo.pgsty.com/blog/release/20260214/</link>
        <pubDate>Sat, 14 Feb 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/release/20260214/</guid>
        <description>&lt;p&gt;&lt;strong&gt;Published:&lt;/strong&gt; 2026-02-14 · &lt;strong&gt;Version:&lt;/strong&gt; &lt;a href=&#34;https://github.com/pgsty/minio/releases/tag/RELEASE.2026-02-14T12-00-00Z&#34;&gt;RELEASE.2026-02-14T12-00-00Z&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This early infrastructure-focused community release restores the embedded Console, introduces GitHub CI/CD, and lifts the Go baseline to 1.26.0, which also absorbs a batch of security fixes from the older toolchain generation.&lt;/p&gt;&#xA;&lt;h2 id=&#34;major-changes&#34;&gt;Major Changes&#xA;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Restore the embedded Console and refresh the README to clarify the community fork position.&lt;/li&gt;&#xA;&lt;li&gt;Add GitHub CI/CD workflows as the base for automated builds and multi-platform delivery.&lt;/li&gt;&#xA;&lt;li&gt;Add quick links for docs, Docker, the GitHub repository, and installation through the &lt;code&gt;pig&lt;/code&gt; package manager.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;fixed-cves&#34;&gt;Fixed CVEs&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;These issues were absorbed as part of the Go &lt;code&gt;1.25.5&lt;/code&gt; -&amp;gt; &lt;code&gt;1.26.0&lt;/code&gt; upgrade:&lt;/p&gt;</description>
      </item>
    <item>
        <title>CVE-2026-41145: Unsigned-Trailer Query Authentication Bypass</title>
        <link>https://silo.pgsty.com/blog/security/cve-2026-41145/</link>
        <pubDate>Thu, 16 Apr 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/security/cve-2026-41145/</guid>
        <description>&lt;p&gt;&lt;strong&gt;Status:&lt;/strong&gt; Released&lt;br&gt;&#xA;&lt;strong&gt;First containing release:&lt;/strong&gt; &lt;a href=&#34;https://github.com/pgsty/minio/releases/tag/RELEASE.2026-04-17T00-00-00Z&#34;&gt;RELEASE.2026-04-17T00-00-00Z&lt;/a&gt;&lt;br&gt;&#xA;&lt;strong&gt;GitHub advisory:&lt;/strong&gt; &lt;a href=&#34;https://github.com/advisories/GHSA-hv4r-mvr4-25vw&#34;&gt;GHSA-hv4r-mvr4-25vw&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Query-string SigV4 credentials could enter a &lt;code&gt;STREAMING-UNSIGNED-PAYLOAD-TRAILER&lt;/code&gt; data flow, while the old code verified the signature only when an &lt;code&gt;Authorization&lt;/code&gt; header was present. A request carrying a valid access-key identifier could therefore complete a write without a correct signature.&lt;/p&gt;&#xA;&lt;p&gt;The final fix moved presigned rejection and SigV4 verification into &lt;code&gt;newUnsignedV4ChunkedReader()&lt;/code&gt;, making every caller consuming that stream share one authentication boundary.&lt;/p&gt;&#xA;&lt;h2 id=&#34;cve-number&#34;&gt;Identifier note&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;The official CVE had not been assigned when the patch was written, so its commit subject used &lt;code&gt;fake CVE-2026-40027&lt;/code&gt;. The final identifier is &lt;strong&gt;CVE-2026-41145&lt;/strong&gt;. The historical commit remains unchanged; public material uses the official identifier.&lt;/p&gt;</description>
      </item>
    <item>
        <title>Silo 20251203 Released</title>
        <link>https://silo.pgsty.com/blog/release/20251203/</link>
        <pubDate>Mon, 15 Dec 2025 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/release/20251203/</guid>
        <description>&lt;p&gt;&lt;strong&gt;Published:&lt;/strong&gt; 2025-12-15 · &lt;strong&gt;Version:&lt;/strong&gt; &lt;a href=&#34;https://github.com/pgsty/minio/releases/tag/RELEASE.2025-12-03T12-00-00Z&#34;&gt;RELEASE.2025-12-03T12-00-00Z&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is the earliest traceable community release. Its purpose is to establish the community packaging and distribution baseline rather than to deliver incremental fixes over an earlier community release.&lt;/p&gt;&#xA;&lt;h2 id=&#34;major-changes&#34;&gt;Major Changes&#xA;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Build the community packaging flow around &lt;code&gt;minio/pkger&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Choose a maintenance-mode upstream MinIO baseline as the starting point for the community-maintained fork.&lt;/li&gt;&#xA;&lt;li&gt;Produce the first &lt;code&gt;apk&lt;/code&gt;, &lt;code&gt;deb&lt;/code&gt;, and &lt;code&gt;rpm&lt;/code&gt; artifacts for ongoing community releases.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;fixed-cves&#34;&gt;Fixed CVEs&#xA;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;This is the first community release. The GitHub Release does not provide a delta-style security-fix list against an earlier community version, and this page does not attempt to reconstruct the full historical CVE delta against the upstream maintenance baseline.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;related-commits&#34;&gt;Related Commits&#xA;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/pgsty/minio/commit/d4cd4b433797e1cdcd2e46cc72df45b0897bdc0a&#34;&gt;d4cd4b4&lt;/a&gt;: RELEASE.2025-12-03T12-00-00Z with go 1.25.5&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
      </item>
    <item>
        <title>CVE-2026-42600: ReadMultiple Storage-REST Path Traversal</title>
        <link>https://silo.pgsty.com/blog/security/cve-2026-42600/</link>
        <pubDate>Fri, 12 Jun 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/security/cve-2026-42600/</guid>
        <description>&lt;p&gt;&lt;strong&gt;Status:&lt;/strong&gt; Released&lt;br&gt;&#xA;&lt;strong&gt;First containing release:&lt;/strong&gt; &lt;a href=&#34;https://github.com/pgsty/minio/releases/tag/RELEASE.2026-06-18T00-00-00Z&#34;&gt;RELEASE.2026-06-18T00-00-00Z&lt;/a&gt;&lt;br&gt;&#xA;&lt;strong&gt;GitHub advisory:&lt;/strong&gt; &lt;a href=&#34;https://github.com/advisories/GHSA-xh8f-g2qw-gcm7&#34;&gt;GHSA-xh8f-g2qw-gcm7&lt;/a&gt;&lt;br&gt;&#xA;&lt;strong&gt;Affected scope:&lt;/strong&gt; Distributed erasure only; cluster-root / internode JWT required&lt;/p&gt;&#xA;&lt;p&gt;The msgpack body of &lt;code&gt;/rmpl&lt;/code&gt; carried &lt;code&gt;Bucket&lt;/code&gt;, &lt;code&gt;Prefix&lt;/code&gt;, and &lt;code&gt;Files&lt;/code&gt;. The old code joined those values into filesystem paths without a containment check. The initial fix implemented full preflight validation. Continued call-chain review then found that this API had had no production caller since 2024. The final solution changed from “retain and harden” to removing the route, handler, client, interface, and generated code.&lt;/p&gt;</description>
      </item>
    <item>
        <title>Internode Path Containment Audit: Paying Off What CVE-2026-42600 Left Owing</title>
        <link>https://silo.pgsty.com/blog/security/internode-path-containment/</link>
        <pubDate>Sun, 02 Aug 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/security/internode-path-containment/</guid>
        <description>&lt;p&gt;&lt;strong&gt;Release status (verified 2026-09-13):&lt;/strong&gt; the primary fix in this article is included in &lt;a href=&#34;https://github.com/pgsty/silo/releases/tag/RELEASE.2026-08-04T00-00-00Z&#34;&gt;20260804&lt;/a&gt; and later releases. The investigation below retains its original test boundaries; see the &lt;a href=&#34;https://silo.pgsty.com/compatibility/versions/&#34;&gt;component matrix&lt;/a&gt; for current unreleased work.&#xA;&lt;strong&gt;Affected scope:&lt;/strong&gt; Distributed erasure only; cluster-root / internode JWT required&#xA;&lt;strong&gt;Prerequisite reading:&lt;/strong&gt; &lt;a href=&#34;https://silo.pgsty.com/blog/security/cve-2026-42600/&#34;&gt;CVE-2026-42600 · ReadMultiple&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;This article is now public. The primary fix shipped as recorded above; residual findings below are the investigation-time record, not a claim that publishing one fix closed the entire defect class.&lt;/p&gt;</description>
      </item>
    <item>
        <title>The Parser Knew, the Schema Didn&#39;t: Config Keys That Could Take Every Notification Down</title>
        <link>https://silo.pgsty.com/blog/security/notify-keyspace-registration/</link>
        <pubDate>Tue, 04 Aug 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/security/notify-keyspace-registration/</guid>
        <description>&lt;p&gt;&lt;strong&gt;Release status (verified 2026-09-13):&lt;/strong&gt; the primary fix in this article is included in &lt;a href=&#34;https://github.com/pgsty/silo/releases/tag/RELEASE.2026-08-04T00-00-00Z&#34;&gt;20260804&lt;/a&gt; and later releases. The investigation below retains its original test boundaries; see the &lt;a href=&#34;https://silo.pgsty.com/compatibility/versions/&#34;&gt;component matrix&lt;/a&gt; for current unreleased work.&#xA;&lt;strong&gt;Classification:&lt;/strong&gt; Configuration-schema consistency and availability, &lt;strong&gt;not a vulnerability&lt;/strong&gt;; includes one defensive hardening (credential values no longer echoed in validation errors)&#xA;&lt;strong&gt;Affected scope:&lt;/strong&gt; &lt;code&gt;notify_nats&lt;/code&gt; JWT/NKey/TLS-handshake-first options, &lt;code&gt;notify_amqp&lt;/code&gt; &lt;code&gt;immediate&lt;/code&gt;, and any pre-2020 config migrated with an enabled NATS target — whose failure then silences &lt;strong&gt;every&lt;/strong&gt; notification backend&#xA;&lt;strong&gt;Tracking:&lt;/strong&gt; &lt;code&gt;pgsty/minio&lt;/code&gt; issue #39&lt;/p&gt;</description>
      </item>
    <item>
        <title>Object Grant, Bucket Reach: When &#39;bucket/*&#39; Could Rewrite the Bucket Itself</title>
        <link>https://silo.pgsty.com/blog/security/object-grant-bucket-reach/</link>
        <pubDate>Tue, 04 Aug 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/security/object-grant-bucket-reach/</guid>
        <description>&lt;p&gt;&lt;strong&gt;Status:&lt;/strong&gt; Fixed on &lt;code&gt;pgsty/silo-pkg&lt;/code&gt; &lt;code&gt;main&lt;/code&gt; (&lt;code&gt;3c24ad1&lt;/code&gt;, extended by &lt;code&gt;1f97549&lt;/code&gt;, scoped to its final twelve actions in &lt;code&gt;d8b1fa7&lt;/code&gt;), &lt;strong&gt;released as &lt;code&gt;silo-pkg v3.11.0&lt;/code&gt;&lt;/strong&gt;; consumed by &lt;code&gt;pgsty/minio&lt;/code&gt;&#xA;&lt;strong&gt;Classification:&lt;/strong&gt; Access-control hardening — a privilege boundary, narrowly restored&#xA;&lt;strong&gt;Affected scope:&lt;/strong&gt; IAM users/roles/service accounts granted only object-scoped (&lt;code&gt;arn:aws:s3:::bucket/*&lt;/code&gt;) access, in deployments that share a cluster across tenants&#xA;&lt;strong&gt;Tracking:&lt;/strong&gt; upstream &lt;code&gt;minio/minio&lt;/code&gt; issue &lt;a href=&#34;https://github.com/minio/minio/issues/20449&#34;&gt;#20449&lt;/a&gt; (public since 2024, still open)&lt;/p&gt;&#xA;&lt;h2 id=&#34;summary&#34;&gt;Conclusions first&#xA;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;In IAM policy matching, a bucket-level request carries an &lt;strong&gt;empty object name&lt;/strong&gt;, and the matcher built its resource string as &lt;code&gt;&amp;quot;bucket/&amp;quot;&lt;/code&gt;. An object-only policy pattern — &lt;code&gt;&amp;quot;arn:aws:s3:::bucket/*&amp;quot;&lt;/code&gt; — then matched that string, so a grant that should cover only objects &lt;strong&gt;also authorized bucket-level actions.&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;The dangerous one is &lt;strong&gt;&lt;code&gt;PutBucketPolicy&lt;/code&gt;&lt;/strong&gt;. A tenant holding only &lt;code&gt;s3:*&lt;/code&gt; on &lt;code&gt;bucket/*&lt;/code&gt; could install a bucket policy with &lt;code&gt;Principal:&amp;quot;*&amp;quot;&lt;/code&gt; — making the bucket &lt;strong&gt;publicly readable or writable&lt;/strong&gt; — or grant itself bucket-level control. Same mechanism, same class: &lt;code&gt;DeleteBucket&lt;/code&gt;/&lt;code&gt;ForceDeleteBucket&lt;/code&gt; (the issue&amp;rsquo;s own reproduction), &lt;code&gt;PutReplicationConfiguration&lt;/code&gt; (exfiltration), &lt;code&gt;PutBucketLifecycle&lt;/code&gt; (mass deletion), &lt;code&gt;PutBucketVersioning&lt;/code&gt;, &lt;code&gt;PutBucketObjectLockConfiguration&lt;/code&gt;, and the rest of the bucket-configuration writes.&lt;/li&gt;&#xA;&lt;li&gt;The &lt;strong&gt;full&lt;/strong&gt; correction is a two-directional behavior change: it tightens over-granting &lt;code&gt;Allow&lt;/code&gt; statements &lt;strong&gt;and&lt;/strong&gt; loosens over-blocking &lt;code&gt;Deny&lt;/code&gt; statements, and it would revoke &lt;code&gt;ListBucket&lt;/code&gt;/&lt;code&gt;GetBucketLocation&lt;/code&gt; grants that &lt;strong&gt;many real deployments write as &lt;code&gt;bucket/*&lt;/code&gt; today&lt;/strong&gt;. That is a compatibility break, not a clean patch.&lt;/li&gt;&#xA;&lt;li&gt;So we shipped a &lt;strong&gt;narrow&lt;/strong&gt; fix — first six sensitive bucket-configuration writes, then, in a second pass, &lt;strong&gt;twelve&lt;/strong&gt;: the bucket-level writes that hand the caller something its object access does not already give it, plus four that no handler implements. Only on &lt;code&gt;Allow&lt;/code&gt; statements, so no &lt;code&gt;Deny&lt;/code&gt; and no &lt;code&gt;NotResource&lt;/code&gt; exclusion is ever weakened, with an environment-variable escape hatch. The compatibility-sensitive read/list family, &lt;code&gt;CreateBucket&lt;/code&gt;, and three bucket writes with plausible tenant use are &lt;strong&gt;left unchanged, by decision&lt;/strong&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Twice we claimed the change could only remove permissions, and twice an untested case said otherwise — the second time found by an independent review of a shipped release. The protected path now requires the resource to match &lt;strong&gt;both&lt;/strong&gt; the bare and the historical form, which makes the property hold by construction rather than by argument.&lt;/li&gt;&#xA;&lt;li&gt;The fix is &lt;strong&gt;red/green proven&lt;/strong&gt; at the matcher layer and end to end through the real handlers; the object-scoped hot path is untouched.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;the-defect&#34;&gt;The slash, and the empty object name&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Every bucket-level S3 operation authorizes with an empty object name — &lt;code&gt;checkRequestAuthType(ctx, r, policy.PutBucketPolicyAction, bucket, &amp;quot;&amp;quot;)&lt;/code&gt;. The IAM matcher turned that into a resource string, and for the empty-object case it appended a trailing slash:&lt;/p&gt;</description>
      </item>
    <item>
        <title>Absent Is Not Empty: A Blank versionid and the Fail-Open It Invites</title>
        <link>https://silo.pgsty.com/blog/security/s3-versionid-conditions/</link>
        <pubDate>Tue, 04 Aug 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/security/s3-versionid-conditions/</guid>
        <description>&lt;p&gt;&lt;strong&gt;Release status (verified 2026-09-13):&lt;/strong&gt; the primary fix in this article is included in &lt;a href=&#34;https://github.com/pgsty/silo/releases/tag/RELEASE.2026-08-04T00-00-00Z&#34;&gt;20260804&lt;/a&gt; and later releases. The investigation below retains its original test boundaries; see the &lt;a href=&#34;https://silo.pgsty.com/compatibility/versions/&#34;&gt;component matrix&lt;/a&gt; for current unreleased work.&#xA;&lt;strong&gt;Classification:&lt;/strong&gt; Policy-enforcement correctness — a fail-&lt;strong&gt;closed&lt;/strong&gt; report, a fail-&lt;strong&gt;open&lt;/strong&gt; trap avoided, and one narrow trim bypass closed. &lt;strong&gt;Not a headline CVE&lt;/strong&gt; — see &lt;a href=&#34;https://silo.pgsty.com/blog/security/s3-versionid-conditions/#not-a-cve&#34;&gt;How we classify this&lt;/a&gt;&#xA;&lt;strong&gt;Affected scope:&lt;/strong&gt; Any deployment with a bucket/IAM policy using &lt;code&gt;Null&lt;/code&gt; or &lt;code&gt;StringEquals&lt;/code&gt; on &lt;code&gt;s3:versionid&lt;/code&gt;; the reported break is on &lt;code&gt;DeleteObject&lt;/code&gt;/&lt;code&gt;DeleteObjects&lt;/code&gt;&#xA;&lt;strong&gt;Tracking:&lt;/strong&gt; upstream &lt;code&gt;minio/minio&lt;/code&gt; issue #21735 (reporter iTrooz, 2026-01-10); upstream repository archived read-only since 2026-04-25&lt;/p&gt;</description>
      </item>
    <item>
        <title>Three Headers, One Lie: Making the Client Source Address Mean Something</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;Release status (verified 2026-09-13):&lt;/strong&gt; the primary fix in this article is included in &lt;a href=&#34;https://github.com/pgsty/silo/releases/tag/RELEASE.2026-08-04T00-00-00Z&#34;&gt;20260804&lt;/a&gt; and later releases. The investigation below retains its original test boundaries; see the &lt;a href=&#34;https://silo.pgsty.com/compatibility/versions/&#34;&gt;component matrix&lt;/a&gt; for current unreleased work.&#xA;&lt;strong&gt;Classification:&lt;/strong&gt; Opt-in hardening plus a documentation defect, &lt;strong&gt;not a vulnerability and not a regression&lt;/strong&gt;; no CVE assigned. The underlying weakness is inherited from upstream and its default behaviour is unchanged here&#xA;&lt;strong&gt;Affected scope:&lt;/strong&gt; &lt;code&gt;aws:SourceIp&lt;/code&gt; policy conditions, the audit log &lt;code&gt;remotehost&lt;/code&gt; field, S3 event notification &lt;code&gt;Host&lt;/code&gt;, and the client shown by &lt;code&gt;mc admin trace&lt;/code&gt; — on any deployment whose S3 API port is reachable without passing through a header-sanitising proxy&#xA;&lt;strong&gt;Upstream:&lt;/strong&gt; nothing to file — &lt;code&gt;minio/minio&lt;/code&gt; is archived. Prior art there: &lt;a href=&#34;https://github.com/minio/minio/pull/4736&#34;&gt;PR #4736&lt;/a&gt; (2017, the concern raised and half-addressed), &lt;a href=&#34;https://github.com/minio/minio/discussions/17878&#34;&gt;discussion #17878&lt;/a&gt; (2023, maintainer marks it working as intended), &lt;a href=&#34;https://github.com/minio/minio/pull/20977&#34;&gt;PR #20977&lt;/a&gt; (2025, the partial switch)&lt;/p&gt;</description>
      </item>
    <item>
        <title>Sorted Is Not Increasing: How One Duplicate Part Number Doubled an Object</title>
        <link>https://silo.pgsty.com/blog/security/duplicate-part-numbers/</link>
        <pubDate>Mon, 03 Aug 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/security/duplicate-part-numbers/</guid>
        <description>&lt;p&gt;&lt;strong&gt;Release status (verified 2026-09-13):&lt;/strong&gt; the primary fix in this article is included in &lt;a href=&#34;https://github.com/pgsty/silo/releases/tag/RELEASE.2026-08-04T00-00-00Z&#34;&gt;20260804&lt;/a&gt; and later releases. The investigation below retains its original test boundaries; see the &lt;a href=&#34;https://silo.pgsty.com/compatibility/versions/&#34;&gt;component matrix&lt;/a&gt; for current unreleased work.&#xA;&lt;strong&gt;Classification:&lt;/strong&gt; Data correctness, &lt;strong&gt;not a vulnerability&lt;/strong&gt; — see &lt;a href=&#34;https://silo.pgsty.com/blog/security/duplicate-part-numbers/#not-a-cve&#34;&gt;Why this is not a CVE&lt;/a&gt;&#xA;&lt;strong&gt;Affected scope:&lt;/strong&gt; All backends, any authenticated S3 client, on its own upload&#xA;&lt;strong&gt;Tracking:&lt;/strong&gt; &lt;code&gt;pgsty/minio&lt;/code&gt; issue #49&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;This article is now public. The primary fix shipped as recorded above; residual findings below are the investigation-time record, not a claim that publishing one fix closed the entire defect class.&lt;/p&gt;</description>
      </item>
    
  </channel>
</rss>
