This is the multi-page printable view of this section. .
About PGSTY Silo
- 1: The PGSTY SILO Manifesto
- 2: License
- 3: Trademark Notice
- 4: Attribution
- 5: Contributors
- 6: Security Policy
- 7: Security Advisories
Silo is a community fork of MinIO, published and maintained by Pigsty. This section collects the terms the project publishes about itself: the Manifesto with the project’s public commitments, what license the code and the documentation are under, how the MinIO name is used, whom this documentation is attributed to, and how to report a security issue.
Silo is not affiliated with, endorsed by, or sponsored by MinIO, Inc. MinIO® is a registered trademark of MinIO, Inc.; see the Trademark Notice.
Meet the community contributors behind SILO, Console, mcli, shared packages, and this documentation. Issue reports and unmerged pull requests are recognized alongside merged work and security disclosures.
The security advisory ledger indexes security findings, fix commits, and upgrade boundaries. The component matrix lists published component versions and dependencies across the SILO stack.
1 - The PGSTY SILO Manifesto
PGSTY SILO keeps an open-source, feature-complete, S3-compatible object store maintained and installable, with a build and release chain anyone can inspect. That is the whole scope.
This page is the project’s public commitment, and it follows one rule: every article below is either something we already do, with public evidence, or something we explicitly refuse to promise. A promise we could not keep would be worse than no promise.
Article 1 · Reason to exist, and an exit clause
This project started when upstream wound down its community edition: the web console was cut back to a stub, prebuilt community binaries stopped, and the community repository was archived. Silo keeps existing MinIO-compatible deployments running. Pigsty runs it in production as its PostgreSQL backup storage, so our own operations depend on the artifacts we publish.
The fork is a means, not an identity. If upstream restores its community edition, we will narrow our scope and offer our fixes back.
Background:
- MinIO is Dead (2025-12) — what upstream removed, and when.
- MinIO Is Dead. Which Next? (2025-12) — the alternatives, evaluated.
- MinIO Is Dead, Long Live MinIO (2026-02) — the fork, announced.
- MinIO Fork, Promise Kept (2026-04) — the first months of receipts.
Article 2 · The compatibility contract
The product and its trademark are renamed; the protocol and your data are not.
- The S3 API,
MINIO_*environment variables,minio_*metrics,x-minio-*headers,/minio/*routes, and the on-disk format (including.minio.sys) are preserved, and held in place by a CI compatibility check. - Every release documents its tested rollback target and path in the release notes.
- New capabilities do not touch the on-disk format. Any exception must be explicitly marked as non-reversible before you can enable it.
- The migration guide, which includes how to leave Silo, and the per-component compatibility audits are public and maintained.
Article 3 · The license cannot change
Silo is AGPLv3. There is no CLA and no copyright aggregation: contributions are accepted only with DCO sign-off, so copyright stays with each contributor. That is not a verbal promise not to relicense. It means nobody here, ourselves included, holds enough copyright to relicense the project on everyone else’s behalf.
Our reading of the AGPL boundary is a position, not legal advice: using Silo through its S3 API does not make your application a derivative work. We will not use the license as a threat or a sales instrument.
Article 4 · Change discipline
Changes relative to the upstream baseline fall into four classes only: security fixes, defect fixes, restored community features, and optional additions. Existing API semantics change only when a security fix demands it, and every such compatibility cost is recorded in the advisory that caused it. Every divergence from upstream is listed in the code-verified compatibility audit.
Article 5 · The never list
Silo will never:
- move an existing feature behind a paywall;
- put a registration or login wall in front of downloads;
- ship telemetry — the upstream phone-home paths (update checks, SUBNET, call-home) are removed outright, not merely disabled;
- require a CLA;
- change the license;
- use trademarks against normal use or descriptive mention.
This list is append-only: entries may be added, never removed.
Article 6 · Security discipline
- Vulnerabilities are reported through a private channel and triaged reproducibly. Writeups are held until the fixed release ships.
- Every security fix ships with a public advisory, including its evidence and its compatibility cost.
- Dependencies are tracked for CVEs, with reachability analysis before any change.
- Every release ships SHA-256 checksums, SPDX SBOMs, Sigstore-signed manifests, and GitHub build provenance.
Severe, remotely exploitable issues are expedited on a best-effort basis, but we do not commit to a specific fix-time SLA.
Article 7 · Release cadence
Releases ship typically every one to two months, and at most a quarter apart. Security and defect fixes are batched into these releases. The history is public; judge the promise against it.
Version tags keep the RELEASE.YYYY-MM-DDTHH-MM-SSZ format, and each release documents its upstream baseline.
Deprecations get at least six months’ notice and a migration path. The exception is a removal that security requires immediately; the removal and its justification are then published in the security advisories.
Article 8 · Upstream relations
We renamed the project out of respect for upstream’s trademarks. Upstream copyright, license, and third-party notices are preserved in full: attribution and trademark. If upstream resumes accepting contributions, applicable fixes will be offered back as appropriate.
Article 9 · Continuity
- The repositories live under the pgsty organization, not a personal account.
- The build is documented and provenance-attested: anyone can rebuild equivalent artifacts from source without us.
- If active maintenance stops for six months, we will say so publicly and archive the project rather than let it go quiet. Released artifacts and documentation stay up as long as we can keep them up.
- If an established open-source organization (a CNCF-style foundation, say) wanted to bring Silo under more formal governance, we would cooperate.
Article 10 · The commercial boundary
Everything in the Silo repositories is complete and free of charge: the server, the client, the console, and the released artifacts. That does not change.
Article 11 · Amendment discipline
Additions and strengthenings of this manifesto take effect immediately. Weakening or removing any article requires ninety days’ public notice. Article 5 is append-only, always.
Where to check:
- Security advisories: every CVE investigated and fixed, one article per incident.
- Release notes: every release, with its baseline, rollback target, and acceptance record.
- Compatibility audits: where Silo matches MinIO, and where it deliberately differs.
2 - License
Silo carries two separate licenses. The software and the documentation are distributed under different terms, and each inherits the license its upstream work already used.
| What | License | Where |
|---|---|---|
silo server |
AGPL-3.0-or-later | pgsty/silo |
| SILO Console | AGPL-3.0-or-later | pgsty/silo-console |
mcli client |
AGPL-3.0-or-later | pgsty/mc |
| SILO Shared Packages | AGPL-3.0-or-later | pgsty/silo-pkg |
kes key management server (optional) |
AGPL-3.0-or-later | pgsty/kes |
| This documentation | CC BY 4.0 | pgsty/silo.pgsty.com |
Software: AGPLv3
PGSTY SILO is a fork of MinIO, which has been distributed under the GNU Affero General Public License v3.0 since 2021. That license is irrevocable for code already released under it — the legal basis on which this fork exists. PGSTY SILO keeps the same license: no relicensing, no added restrictions, no open-core carve-outs.
In practice, AGPLv3 lets you run, study, modify, and redistribute PGSTY SILO; if you offer a modified PGSTY SILO to users over a network, you must offer those users the corresponding source of your modified version.
Read the full license text before acting on any summary, including this one.
Contributions to PGSTY SILO
Code contributions to all five maintained software repositories use AGPL-3.0-or-later, the same license as each repository. Contributors retain copyright in their original work. SILO requires no CLA, copyright assignment, or separate Apache-2.0 license grant to its maintainers or to upstream MinIO.
Submit changes to the PGSTY repository that owns them and sign commits with
git commit -s to certify the Developer Certificate of Origin 1.1.
See the contribution guides for the server,
Console,
mcli, and
shared packages.
Contributions to this documentation follow CC BY 4.0. Existing copyright, license, and attribution notices remain in place, including the original terms of separately licensed third-party material.
Documentation: CC BY 4.0
Everything published on this site is licensed under the Creative Commons Attribution 4.0 International License (CC BY 4.0) — the same license the upstream MinIO documentation used. The full legal text is reproduced verbatim in the documentation repository.
You are free to share and adapt this documentation, including commercially, provided you give appropriate credit, link to the license, and indicate whether changes were made. You may not impose legal or technological measures that restrict others from doing anything the license permits.
Attribution is the only substantive obligation; Attribution gives you a ready-to-copy credit line along with the full copyright stack.
What the license does not cover
A license grants rights in copyright. It says nothing about names. Permission to use the MinIO codebase and documentation is not permission to use the MinIO trademark — see the Trademark Notice.
Disclaimer
Both licenses provide the work as-is, without warranties or conditions of any kind. See Section 5 of CC BY 4.0 and Sections 15–17 of AGPLv3 for the complete disclaimers of warranty and limitations of liability.
See also
- Attribution — copyright stack, derivation, and how to credit this documentation
- Trademark Notice — how the MinIO name is used here
- Security Policy — how to report a vulnerability
3 - Trademark Notice
Every appearance of the MinIO name in this documentation is descriptive use, and implies no commercial relationship.
PGSTY SILO is a fork maintained independently by the PIGSTY community. It is not affiliated with, endorsed by, or sponsored by MinIO, Inc.
What the project does to avoid confusion
- The fork is published under its own name, PGSTY SILO, not under MinIO’s.
- Every page of this site carries a trademark disclaimer in the footer.
- It is labeled a community fork across every distribution channel — repositories, container images, release artifacts, and this documentation.
- No claim of affiliation, endorsement, certification, or commercial relationship with MinIO, Inc. is ever made.
Why the name still appears in this documentation
A license grants rights in copyright; it says nothing about names. AGPLv3 gives anyone the right to fork and redistribute the MinIO codebase, but trademark law is a separate matter that a license does not settle.
The MinIO name appears in this documentation to identify the upstream project this work derives from, and to name the things that still carry the upstream name in practice:
- the upstream project and its history, in attribution and in prose
- the wire protocol, API surface, and S3 compatibility statements
- command names, configuration keys, environment variables, binary names, and error strings — part of the software’s compatibility contract
- content carried over from the MinIO documentation, where renaming would break the correspondence between the text and the software it describes
Other marks
“Pigsty” and “PGSTY” refer to the Pigsty project and its maintainers, who publish PGSTY SILO. Amazon S3 is a trademark of Amazon.com, Inc. or its affiliates; references to S3 describe protocol compatibility only. All other trademarks are the property of their respective owners.
See also
- License — AGPLv3 for the software, CC BY 4.0 for this documentation
- Attribution — copyright stack and derivation of this documentation
4 - Attribution
Copyright
Copyright © 2020–Present MinIO, Inc. Original MinIO Object Storage Documentation.
Copyright © 2026–Present PIGSTY & SILO Contributors Fork maintenance, format conversion, modifications, restored and newly written content, and Simplified Chinese translation.
Both layers apply at once. A translated or modified page carries MinIO’s copyright in the underlying expression and the PGSTY SILO project’s copyright in the translation and the changes; neither replaces the other.
License
All documentation content on this site is licensed under the Creative Commons Attribution 4.0 International License (CC BY 4.0) — the same license as the upstream work. The full legal text is in LICENSE. The PGSTY SILO software itself is licensed separately; see License.
Derivation
Portions of this documentation are derived from the MinIO Object Storage Documentation. The work has been modified from the original: rebranding to PGSTY SILO, restoration of documentation for features removed upstream, conversion of the frozen RST/MyST source to bilingual Markdown, replacement of the Sphinx presentation layer with Hugo and OINK, link and build fixes, ongoing maintenance, and translation into Chinese. The commit history is the complete record of changes.
The blog, download and release pages, this section, and PGSTY SILO-specific content are original works of the PGSTY SILO project. Pages that carry upstream material include a notice at the bottom of the page, and pages that PGSTY SILO has modified beyond format conversion link to their change history.
Translation
Chinese translations are unofficial and are maintained by the PGSTY SILO project, not by MinIO, Inc. Where a translation and the original English text differ, the English text is authoritative.
How to attribute
If you reuse content from this site, the following credit line satisfies CC BY 4.0:
For Chinese-language contexts:
Disclaimer
Unless otherwise separately undertaken by the Licensor, to the extent possible, the Licensor offers the Licensed Material as-is and as-available, and makes no representations or warranties of any kind concerning the Licensed Material, whether express, implied, statutory, or other. See Section 5 of the license for the complete disclaimer of warranties and limitation of liability.
See also
- License — AGPLv3 for the software, CC BY 4.0 for this documentation
- Trademark Notice — how the MinIO name is used here
5 - Contributors
As of 2026-11-09, 76 community contributors are credited in SILO and related projects. The roll includes maintainers and every human issue / PR author, along with security reporters who have agreed to be acknowledged.
Opening an issue or PR counts, whether open, closed, draft, or unmerged. Each account appears once. Merged PR authors come first, followed by other PR authors and reporters. Within each group, significant fixes, adopted proposals, and reports that led to fixes take priority, followed by first participation. Gold rings highlight significant contributions.
When a proposal was incorporated through a later repair, its adoption is credited alongside the original PR status. Automated accounts are excluded. Upstream authorship remains in Git history and copyright notices.
Merged pull requests
| Contributor | Contribution | Record |
|---|---|---|
| @Vonng | Maintains SILO, Console, mcli, shared packages, releases, and documentation | pgsty/silo: Merged PRs (93) PRs closed without merging: pgsty/silo#155, pgsty/silo#195 pgsty/silo: Closed issues (99) Open issues: pgsty/silo#217 pgsty/silo-console: Merged PRs (42) pgsty/silo-console: Closed issues (39) pgsty/mc: Merged PRs (30) pgsty/mc: Closed issues (42) Merged PRs: pgsty/silo-pkg#1, pgsty/silo-pkg#2, pgsty/silo-pkg#3, pgsty/silo-pkg#4, pgsty/silo-pkg#5, pgsty/silo-pkg#6, pgsty/silo-pkg#7, pgsty/silo-pkg#8, pgsty/silo-pkg#9, pgsty/silo-pkg#10, pgsty/silo-pkg#12, pgsty/silo-pkg#14 Closed issues: pgsty/silo-pkg#13 Merged PRs: pgsty/kes#1 pgsty/silo.pgsty.com: Merged PRs (48) PRs closed without merging: pgsty/silo.pgsty.com#36 |
| @ZouhairCharef | Patched CVE-2026-34986 in go-jose | Merged PRs: pgsty/silo#18 |
| @mfredenhagen | Patched CVE-2026-39883 in OpenTelemetry | Merged PRs: pgsty/silo#19 |
| @cbornet | Reported checksum and missing-bucket defects and aligned S3 checksum error messages | Merged PRs: pgsty/silo#225 Closed issues: pgsty/silo#31, pgsty/silo#32, pgsty/silo#107, pgsty/silo#226 |
| @pinginfo | Repaired bucket notification streaming | Merged PRs: pgsty/silo#34 |
| @ycjlin | Fixed missing-bucket ListObjects semantics | Merged PRs: pgsty/silo#37 |
| @waterkip | Repointed documentation links to the SILO portal | Merged PRs: pgsty/silo#41 |
| @Dansyuqri | Added ChecksumType to multipart completion responses | Merged PRs: pgsty/silo#57 |
| @mrjavadseydi | Fixed bucket quota metrics and mcli alias regions; contributed access-frequency ILM and S3-compatible multipart listing proposals | Merged PRs: pgsty/silo#60, pgsty/silo#132, pgsty/silo#198, pgsty/silo#221 Open PRs: pgsty/silo#249 PRs closed without merging: pgsty/silo#215 Merged PRs: pgsty/mc#44 The access-frequency feature in #60 was merged and later removed. The multipart-listing contribution in #198 was merged after follow-up durability and cancellation repairs; it shipped in Server 20260916 with legacy as the default and strict as an opt-in. |
| @h5vx | Implemented per-bucket CORS configuration and enforcement | Merged PRs: pgsty/silo#71 |
| @nikitapogromsky | Fixed duplicate logger targets that broke Metrics V3 collection | Merged PRs: pgsty/silo#151 Closed issues: pgsty/silo#150 |
| @julienlau | Fixed missing-commit-metadata error handling and stale metadata reuse; contributed replication reports and proposals | Merged PRs: pgsty/silo#232, pgsty/silo#233 Open PRs: pgsty/silo#240, pgsty/silo#241 PRs closed without merging: pgsty/silo#184 Closed issues: pgsty/silo#152, pgsty/silo#153 The original PR was not merged directly. Its purge-state and recovery analysis, proposed fix, tests, and documentation helped shape #196; see the maintainer acknowledgement. |
| @Aeirx | Preserved Object Lock legal-hold headers in federated CopyObject | Merged PRs: pgsty/silo#172 |
| @AleksaMCode | Fixed the Lambda target-set emptiness check and added a regression test | Merged PRs: pgsty/silo#220 |
| @yupoet | Improved checksum mismatch messages, verified erasure-coding documentation, and contributed a single-node migration case | Merged PRs: pgsty/silo#228, pgsty/silo#229 PRs closed without merging: pgsty/silo#230 Also cross-checked the two-drive EC:1 documentation. The single-node migration report in #228 was merged on 2026-10-23; the registry-mirror proposal in #230 was closed without merging. |
| @clown15 | Fixed native multipart-upload timestamp parsing during stale-upload cleanup | Merged PRs: pgsty/silo#236 |
| @botdeniska | Contributed multi-pool migration, deletion and lifecycle safety, conditional multipart checks, native restore reports and verification, LDAP login and storage cleanup fixes, replication checksum repairs, and faster policy evaluation | pgsty/silo: Merged PRs (13) Open PRs: pgsty/silo#294 PRs closed without merging: pgsty/silo#245, pgsty/silo#248, pgsty/silo#262, pgsty/silo#290 pgsty/silo: Closed issues (15) Open issues: pgsty/silo#293 Merged PRs: pgsty/silo-pkg#11 The migration repair from #248 was incorporated in 60c7179dd, retaining the original authorship and DCO. The mixed-EC listing proposal in #262 was superseded by #267. The author closed #290 after verifying the native-restore rework covered the reported defects. |
| @910patin | Fixed long-DN LDAP login while preserving IAM revocation-record errors | Merged PRs: pgsty/silo#250 |
| @cyberbret | Contributed on-demand folder and bucket usage scans and the optional persistent usage worker | Merged PRs: pgsty/silo-console#70 PR #70 was integrated through #79, retaining the original commits and authorship. Usage scans and the optional worker shipped in Console v2.6.0. |
| @EduardoAndradeMachado | Contributed Brazilian Portuguese translations to Console and privately reported a security issue | Merged PRs: pgsty/silo-console#83 PR #83 was merged with its original authored commits; the later ten-language implementation uses shared static dictionaries. Private security reporting is acknowledged with the reporter’s agreement. |
Other pull-request authors
| Contributor | Contribution | Record |
|---|---|---|
| @magicxor | Reported and proposed conditional DELETE support for If-Match | PRs closed without merging: pgsty/silo#12 Closed issues: pgsty/silo#10 The original PR closed after conditional DELETE support landed in #145. |
| @davinkevin | Proposed the distroless container image and dependency automation | PRs closed without merging: pgsty/silo#21 Open issues: pgsty/silo#20 The distroless proposal was superseded by the image shipped in RELEASE.2026-08-06. |
| @metaneutrons | Reported and proposed explicit-version delete authorization | PRs closed without merging: pgsty/silo#59 Closed issues: pgsty/silo#58 The original PR was superseded; its authorization action split informed #104. |
| @mikemikimike | Contributed the replicated SSE-C plaintext part-size fix | PRs closed without merging: pgsty/silo#125 The original PR was superseded; its plaintext-size fix was incorporated through #124, with attribute handling in #128. |
| @chodorenko | Reported and contributed the fix for aws-chunked leaking into replica metadata | PRs closed without merging: pgsty/silo#187 Closed issues: pgsty/silo#185 The implementation was incorporated in #194, with co-author credit; the original PR was closed as superseded. |
| @dihmandrake | Reported dry-run healing safety issues and proposed parallel deep verification and Helm configuration options | Open PRs: pgsty/silo#280, pgsty/silo#283 Dry-run safeguards associated with #280 were incorporated independently in c8dd5678b and dd0a2da55. The PR remains open, including the parallel-verification proposal. |
| @sulin37392 | Proposed dependency updates | PRs closed without merging: pgsty/silo#8 |
| @lem21h | Proposed robustness and goroutine improvements | PRs closed without merging: pgsty/silo#36 |
| @liubin07 | Proposed an opt-in object naming mode for coexisting object and prefix names | PRs closed without merging: pgsty/silo#260 |
| @HaveFun83 | Proposed configurable Kubernetes health probes in the Helm chart | Open PRs: pgsty/silo#288 |
Issue reports
| Contributor | Contribution | Record |
|---|---|---|
| @kh0mka | Reported inter-node I/O timeouts, OIDC configuration-fetch failures, and lost Console bucket quotas | Closed issues: pgsty/silo#51, pgsty/silo#154 Closed issues: pgsty/silo-console#72 |
| @MikeVL | Reported resync throughput overflow and missing JSON status, both fixed in mcli 20261026 | Closed issues: pgsty/mc#48, pgsty/mc#49 |
| @vampywiz17 | Reported LDAP TLS and Console login regressions | Closed issues: pgsty/silo#15, pgsty/silo#108 |
| @jiri-pejchal | Reported the RabbitMQ client vulnerability and the Console share proxy’s exposure of internal metrics | Closed issues: pgsty/silo#176 Closed issues: pgsty/silo-console#52 |
| @AEGEGE | Reported the slow-HTTP denial-of-service vulnerability | Closed issues: pgsty/silo#183 The reproduced slow-header defect was fixed on main through #196. |
| @naiveHobo | Reported an IAM admin API access-control issue and the unavailable private reporting channel | Closed issues: pgsty/silo#222 |
| @orenyomtov | Reported the unsigned-header CopyObject cross-object read (SN-2026-011) | Security disclosure credited in SN-2026-011, fixed in #173. |
| @nik0xFF | Reported a security issue privately by email | Dominik Klug is credited under his full name with his permission. |
| @szopi00 | Reported the Object Lock GOVERNANCE retention authorization bypass | The report led to the Object Lock repairs in #234 and #235. |
| @GhaziTriki | Investigated policy-query and Console slowdown and identified overlapping client mirror jobs | Closed issues: pgsty/silo#251 Closed after the reporter follow-up traced the immediate cause to overlapping client mirror jobs; this incident did not establish a SILO version regression. |
| @haf | Reported audit webhook delivery stopping on peer nodes after configuration reload | Closed issues: pgsty/silo#259 The report led to webhook target lifetime and queue recovery repairs in 0fa4a8c50 and f3e84d54a. |
| @sun1024 | Privately reported a security issue in SILO | Acknowledged with the reporter’s agreement; private report details are not included here. |
| @mosesdd | Requested a maintained Helm chart | Closed issues: pgsty/silo#1 |
| @Xavier-777 | Reported Console lifecycle management and file preview gaps | Closed issues: pgsty/silo#2, pgsty/silo#17 |
| @jiadzh | Requested Windows build guidance | Closed issues: pgsty/silo#3 |
| @AntonOfTheWoods | Asked for clarity on Helm chart and operator options | Closed issues: pgsty/silo#5 |
| @TLINDEN | Reported the missing client in release tarballs | Closed issues: pgsty/silo#4 |
| @zylpsrs | Reported missing Console tiering and site replication | Closed issues: pgsty/silo#6 |
| @nsanitate | Proposed CNCF Sandbox governance | Closed issues: pgsty/silo#7 |
| @makinikm | Reported the missing client in the container image | Closed issues: pgsty/silo#9 |
| @spaceg00se-r | Requested cpuv1 support and reported a workflow token failure | Closed issues: pgsty/silo#11, pgsty/silo#14 |
| @heroes1412 | Reported the unusable profiling option | Closed issues: pgsty/silo#13, pgsty/silo#231 |
| @chalukyaj | Proposed making the SILO Operator easier to discover | Open issues: pgsty/silo#30 |
| @jvasile | Reported missing user, group, and defaults in Debian packages | Closed issues: pgsty/silo#33 |
| @Kesavaambati | Asked about community support and image maintenance | Closed issues: pgsty/silo#35 |
| @redfoxfox | Reported Chinese documentation availability | Closed issues: pgsty/silo#38 |
| @kuldeep-link11 | Reported NATS JWT credentials and target reload issues | Closed issues: pgsty/silo#39 Open issues: pgsty/silo#40 |
| @meesudzu | Requested the migration guide from upstream MinIO | Closed issues: pgsty/silo#42 |
| @pmezhuev | Reported missing RPM package signatures | Closed issues: pgsty/silo#43 |
| @bagutzu | Requested KES-compatible external KMS and OpenBao support | Closed issues: pgsty/silo#61 |
| @liuhaodongliu990-cmyk | Reported indeterminate progress for prefix downloads | Closed issues: pgsty/silo#62 |
| @DestroyLee | Reported the missing documentation navigation | Closed issues: pgsty/silo.pgsty.com#4 |
| @sargarass | Reported ListMultipartUploads prefix and pagination semantics | Open issues: pgsty/silo#79 |
| @mumu-lab | Reported bucket quota metrics reading a deprecated field | Closed issues: pgsty/silo#106 |
| @haiming236 | Proposed a built-in image processing pipeline | Open issues: pgsty/silo#160 |
| @tiredenzo | Reported inconsistent documentation for two-drive EC:1 support | Closed issues: pgsty/silo#197 |
| @aschyolkin | Reported a data race in CPU metrics collection | Closed issues: pgsty/silo#210 |
| @0mp | Requested and discussed FreeBSD support | Open issues: pgsty/silo#219 |
| @ztarbug | Requested publication of the Helm chart | Open issues: pgsty/silo#223 |
| @zmstone | Requested a GitHub Container Registry mirror | Closed issues: pgsty/silo#224 |
| @Crowley723 | Requested friendly names for users | Open issues: pgsty/silo#227 |
| @geraldcombs | Suggested Windows ZIP packaging, adopted across the maintained release tools | Closed issues: pgsty/mc#45 |
| @devTeam-AiReg | Asked about availability of the release containing IAM security fixes | Closed issues: pgsty/silo#247 |
| @azataiot | Reported and analyzed high-latency Console health-report truncation during WebSocket close | Closed issues: pgsty/silo-console#63 |
| @siyahkut | Requested Turkish language support | Open issues: pgsty/silo#277 |
| @seumasdunlop | Reported the outdated default server image tag in the Helm chart | Open issues: pgsty/silo#296 |
Audit scope
Counts below come from every page of the GitHub issue / PR records, across all states, including automated accounts. Review dates are listed per repository; records not rechecked retain their earlier dates and states. There are 72 distinct human public issue / PR authors, plus 4 credited security reporters. Excluded automated accounts: Copilot, dependabot[bot].
| Repository | Issues | Pull requests | Reviewed |
|---|---|---|---|
| pgsty/silo | 171 | 151 | 2026-11-09 |
| pgsty/silo-console | 42 | 44 | 2026-11-09 |
| pgsty/mc | 45 | 32 | 2026-11-09 |
| pgsty/silo-pkg | 1 | 13 | 2026-11-09 |
| pgsty/silo-go | 0 | 0 | 2026-11-09 |
| pgsty/kes | 0 | 1 | 2026-11-09 |
| pgsty/silo.pgsty.com | 1 | 50 | 2026-11-09 |
| pgsty/minio-docs | 0 | 0 | 2026-11-09 |
| Total | 260 | 291 |
Maintainer record
Merged PRs: pgsty/silo#44, pgsty/silo#45, pgsty/silo#56, pgsty/silo#66, pgsty/silo#69, pgsty/silo#70, pgsty/silo#72, pgsty/silo#73, pgsty/silo#74, pgsty/silo#80, pgsty/silo#81, pgsty/silo#85, pgsty/silo#86, pgsty/silo#87, pgsty/silo#88, pgsty/silo#89, pgsty/silo#90, pgsty/silo#91, pgsty/silo#92, pgsty/silo#93, pgsty/silo#94, pgsty/silo#95, pgsty/silo#96, pgsty/silo#97, pgsty/silo#98, pgsty/silo#101, pgsty/silo#103, pgsty/silo#104, pgsty/silo#121, pgsty/silo#122, pgsty/silo#123, pgsty/silo#124, pgsty/silo#126, pgsty/silo#127, pgsty/silo#128, pgsty/silo#129, pgsty/silo#130, pgsty/silo#131, pgsty/silo#134, pgsty/silo#135, pgsty/silo#138, pgsty/silo#140, pgsty/silo#142, pgsty/silo#143, pgsty/silo#145, pgsty/silo#146, pgsty/silo#149, pgsty/silo#156, pgsty/silo#157, pgsty/silo#159, pgsty/silo#161, pgsty/silo#162, pgsty/silo#163, pgsty/silo#164, pgsty/silo#173, pgsty/silo#174, pgsty/silo#175, pgsty/silo#177, pgsty/silo#178, pgsty/silo#179, pgsty/silo#180, pgsty/silo#181, pgsty/silo#182, pgsty/silo#188, pgsty/silo#189, pgsty/silo#190, pgsty/silo#191, pgsty/silo#192, pgsty/silo#193, pgsty/silo#194, pgsty/silo#196, pgsty/silo#205, pgsty/silo#206, pgsty/silo#207, pgsty/silo#208, pgsty/silo#209, pgsty/silo#211, pgsty/silo#212, pgsty/silo#213, pgsty/silo#214, pgsty/silo#216, pgsty/silo#234, pgsty/silo#235, pgsty/silo#237, pgsty/silo#238, pgsty/silo#239, pgsty/silo#242, pgsty/silo#243, pgsty/silo#244, pgsty/silo#258, pgsty/silo#267, pgsty/silo#276, pgsty/silo#295
PRs closed without merging: pgsty/silo#155, pgsty/silo#195
Closed issues: pgsty/silo#22, pgsty/silo#23, pgsty/silo#24, pgsty/silo#25, pgsty/silo#26, pgsty/silo#27, pgsty/silo#28, pgsty/silo#46, pgsty/silo#47, pgsty/silo#48, pgsty/silo#49, pgsty/silo#50, pgsty/silo#52, pgsty/silo#53, pgsty/silo#55, pgsty/silo#63, pgsty/silo#64, pgsty/silo#65, pgsty/silo#67, pgsty/silo#68, pgsty/silo#75, pgsty/silo#76, pgsty/silo#77, pgsty/silo#78, pgsty/silo#82, pgsty/silo#83, pgsty/silo#84, pgsty/silo#99, pgsty/silo#100, pgsty/silo#102, pgsty/silo#105, pgsty/silo#109, pgsty/silo#110, pgsty/silo#111, pgsty/silo#112, pgsty/silo#113, pgsty/silo#114, pgsty/silo#115, pgsty/silo#116, pgsty/silo#117, pgsty/silo#118, pgsty/silo#119, pgsty/silo#120, pgsty/silo#133, pgsty/silo#136, pgsty/silo#137, pgsty/silo#139, pgsty/silo#141, pgsty/silo#144, pgsty/silo#147, pgsty/silo#148, pgsty/silo#158, pgsty/silo#165, pgsty/silo#166, pgsty/silo#167, pgsty/silo#168, pgsty/silo#169, pgsty/silo#170, pgsty/silo#171, pgsty/silo#199, pgsty/silo#200, pgsty/silo#201, pgsty/silo#202, pgsty/silo#203, pgsty/silo#204, pgsty/silo#218, pgsty/silo#246, pgsty/silo#284, pgsty/silo#297, pgsty/silo#298, pgsty/silo#299, pgsty/silo#300, pgsty/silo#301, pgsty/silo#302, pgsty/silo#303, pgsty/silo#304, pgsty/silo#305, pgsty/silo#306, pgsty/silo#307, pgsty/silo#308, pgsty/silo#309, pgsty/silo#310, pgsty/silo#311, pgsty/silo#312, pgsty/silo#313, pgsty/silo#314, pgsty/silo#315, pgsty/silo#316, pgsty/silo#317, pgsty/silo#318, pgsty/silo#319, pgsty/silo#320, pgsty/silo#321, pgsty/silo#322, pgsty/silo#323, pgsty/silo#324, pgsty/silo#325, pgsty/silo#326, pgsty/silo#327
Open issues: pgsty/silo#217
Merged PRs: pgsty/silo-console#9, pgsty/silo-console#10, pgsty/silo-console#11, pgsty/silo-console#38, pgsty/silo-console#39, pgsty/silo-console#40, pgsty/silo-console#41, pgsty/silo-console#42, pgsty/silo-console#43, pgsty/silo-console#44, pgsty/silo-console#45, pgsty/silo-console#46, pgsty/silo-console#47, pgsty/silo-console#48, pgsty/silo-console#49, pgsty/silo-console#50, pgsty/silo-console#51, pgsty/silo-console#53, pgsty/silo-console#54, pgsty/silo-console#55, pgsty/silo-console#56, pgsty/silo-console#57, pgsty/silo-console#58, pgsty/silo-console#59, pgsty/silo-console#60, pgsty/silo-console#61, pgsty/silo-console#62, pgsty/silo-console#64, pgsty/silo-console#65, pgsty/silo-console#66, pgsty/silo-console#67, pgsty/silo-console#68, pgsty/silo-console#69, pgsty/silo-console#71, pgsty/silo-console#74, pgsty/silo-console#79, pgsty/silo-console#80, pgsty/silo-console#81, pgsty/silo-console#82, pgsty/silo-console#84, pgsty/silo-console#85, pgsty/silo-console#86
Closed issues: pgsty/silo-console#1, pgsty/silo-console#2, pgsty/silo-console#3, pgsty/silo-console#4, pgsty/silo-console#5, pgsty/silo-console#6, pgsty/silo-console#7, pgsty/silo-console#8, pgsty/silo-console#12, pgsty/silo-console#13, pgsty/silo-console#14, pgsty/silo-console#15, pgsty/silo-console#16, pgsty/silo-console#17, pgsty/silo-console#18, pgsty/silo-console#19, pgsty/silo-console#20, pgsty/silo-console#21, pgsty/silo-console#22, pgsty/silo-console#23, pgsty/silo-console#24, pgsty/silo-console#25, pgsty/silo-console#26, pgsty/silo-console#27, pgsty/silo-console#28, pgsty/silo-console#29, pgsty/silo-console#30, pgsty/silo-console#31, pgsty/silo-console#32, pgsty/silo-console#33, pgsty/silo-console#34, pgsty/silo-console#35, pgsty/silo-console#36, pgsty/silo-console#37, pgsty/silo-console#73, pgsty/silo-console#75, pgsty/silo-console#76, pgsty/silo-console#77, pgsty/silo-console#78
Merged PRs: pgsty/mc#1, pgsty/mc#2, pgsty/mc#3, pgsty/mc#4, pgsty/mc#8, pgsty/mc#9, pgsty/mc#10, pgsty/mc#11, pgsty/mc#13, pgsty/mc#22, pgsty/mc#24, pgsty/mc#27, pgsty/mc#32, pgsty/mc#33, pgsty/mc#34, pgsty/mc#35, pgsty/mc#36, pgsty/mc#37, pgsty/mc#38, pgsty/mc#39, pgsty/mc#40, pgsty/mc#41, pgsty/mc#42, pgsty/mc#43, pgsty/mc#46, pgsty/mc#47, pgsty/mc#55, pgsty/mc#74, pgsty/mc#76, pgsty/mc#77
Closed issues: pgsty/mc#5, pgsty/mc#6, pgsty/mc#7, pgsty/mc#12, pgsty/mc#14, pgsty/mc#15, pgsty/mc#16, pgsty/mc#17, pgsty/mc#18, pgsty/mc#19, pgsty/mc#20, pgsty/mc#21, pgsty/mc#23, pgsty/mc#25, pgsty/mc#28, pgsty/mc#29, pgsty/mc#30, pgsty/mc#31, pgsty/mc#50, pgsty/mc#51, pgsty/mc#52, pgsty/mc#53, pgsty/mc#54, pgsty/mc#56, pgsty/mc#57, pgsty/mc#58, pgsty/mc#59, pgsty/mc#60, pgsty/mc#61, pgsty/mc#62, pgsty/mc#63, pgsty/mc#64, pgsty/mc#65, pgsty/mc#66, pgsty/mc#67, pgsty/mc#68, pgsty/mc#69, pgsty/mc#70, pgsty/mc#71, pgsty/mc#72, pgsty/mc#73, pgsty/mc#75
Merged PRs: pgsty/silo-pkg#1, pgsty/silo-pkg#2, pgsty/silo-pkg#3, pgsty/silo-pkg#4, pgsty/silo-pkg#5, pgsty/silo-pkg#6, pgsty/silo-pkg#7, pgsty/silo-pkg#8, pgsty/silo-pkg#9, pgsty/silo-pkg#10, pgsty/silo-pkg#12, pgsty/silo-pkg#14
Closed issues: pgsty/silo-pkg#13
Merged PRs: pgsty/kes#1
Merged PRs: pgsty/silo.pgsty.com#2, pgsty/silo.pgsty.com#3, pgsty/silo.pgsty.com#5, pgsty/silo.pgsty.com#6, pgsty/silo.pgsty.com#7, pgsty/silo.pgsty.com#8, pgsty/silo.pgsty.com#9, pgsty/silo.pgsty.com#10, pgsty/silo.pgsty.com#11, pgsty/silo.pgsty.com#13, pgsty/silo.pgsty.com#14, pgsty/silo.pgsty.com#15, pgsty/silo.pgsty.com#16, pgsty/silo.pgsty.com#17, pgsty/silo.pgsty.com#19, pgsty/silo.pgsty.com#20, pgsty/silo.pgsty.com#21, pgsty/silo.pgsty.com#22, pgsty/silo.pgsty.com#23, pgsty/silo.pgsty.com#24, pgsty/silo.pgsty.com#25, pgsty/silo.pgsty.com#26, pgsty/silo.pgsty.com#27, pgsty/silo.pgsty.com#28, pgsty/silo.pgsty.com#29, pgsty/silo.pgsty.com#30, pgsty/silo.pgsty.com#31, pgsty/silo.pgsty.com#32, pgsty/silo.pgsty.com#33, pgsty/silo.pgsty.com#34, pgsty/silo.pgsty.com#35, pgsty/silo.pgsty.com#37, pgsty/silo.pgsty.com#38, pgsty/silo.pgsty.com#39, pgsty/silo.pgsty.com#40, pgsty/silo.pgsty.com#41, pgsty/silo.pgsty.com#42, pgsty/silo.pgsty.com#43, pgsty/silo.pgsty.com#44, pgsty/silo.pgsty.com#45, pgsty/silo.pgsty.com#46, pgsty/silo.pgsty.com#47, pgsty/silo.pgsty.com#48, pgsty/silo.pgsty.com#49, pgsty/silo.pgsty.com#50, pgsty/silo.pgsty.com#51, pgsty/silo.pgsty.com#52, pgsty/silo.pgsty.com#53
PRs closed without merging: pgsty/silo.pgsty.com#36
Merged PRs: pgsty/silo#253, pgsty/silo#255, pgsty/silo#257, pgsty/silo#264, pgsty/silo#266, pgsty/silo#269, pgsty/silo#273, pgsty/silo#274, pgsty/silo#275, pgsty/silo#279, pgsty/silo#282, pgsty/silo#286, pgsty/silo#292
Open PRs: pgsty/silo#294
PRs closed without merging: pgsty/silo#245, pgsty/silo#248, pgsty/silo#262, pgsty/silo#290
Closed issues: pgsty/silo#252, pgsty/silo#254, pgsty/silo#256, pgsty/silo#261, pgsty/silo#263, pgsty/silo#265, pgsty/silo#268, pgsty/silo#270, pgsty/silo#271, pgsty/silo#272, pgsty/silo#278, pgsty/silo#281, pgsty/silo#285, pgsty/silo#289, pgsty/silo#291
Open issues: pgsty/silo#293
Merged PRs: pgsty/silo-pkg#11
The migration repair from #248 was incorporated in 60c7179dd, retaining the original authorship and DCO. The mixed-EC listing proposal in #262 was superseded by #267. The author closed #290 after verifying the native-restore rework covered the reported defects.
Record source: SILO CONTRIBUTORS.md · GitHub data. Please open an issue or PR to correct missing or inaccurate credit.
6 - Security Policy
PGSTY SILO maintains active security tracking and patching for the S3-compatible object storage stack after upstream minio/minio entered archive mode. Current production deployments should run Server 20261026 (which embeds Console v2.5.1 and retains the fixes first shipped in Server 20261018 for Object Lock advisories SN-2026-015 / SN-2026-016 and IAM Admin boundary SN-2026-017, building on SN-2026-011 through SN-2026-014 from Server 20260916), standalone Console v2.6.0, mcli 20261109, and silo-pkg v3.16.0; see the October Security Note, Advisory Ledger, and Component Matrix.
Note that deploying standalone Console does not replace an older Server’s embedded Console, and built-in policy Reset, immediate bucket-list refresh, and bucket quota validation fixes require the corresponding Server or standalone Console versions (see the Console 2.5.1 and Console 2.6.0 release notes).
Reporting a Vulnerability
Report undisclosed vulnerabilities through a private channel rather than a public issue:
- SILO Server, Console,
mcli, andsilo-pkg: Submit a private report via GitHub Security Advisories onpgsty/silo. - Documentation (
silo.pgsty.com): Open an issue onpgsty/silo.pgsty.com, or use the private advisory channel above if the report discloses an exploitable weakness.
Include the affected component version, reproduction steps, and impact scope. SILO is maintained as an open-source project on a best-effort basis without commercial response-time SLAs.
Upstream MinIO Vulnerabilities
Because SILO shares lineage with minio/minio, most vulnerabilities in inherited code affect both codebases. Report findings in inherited code directly to SILO; when a vulnerability affects other active distributions of the same lineage, we coordinate disclosure as appropriate.
Where Fixes Are Published
- Advisory Ledger: The canonical index of all
CVE-*andSN-2026-*identifiers, fix commits, affected versions, and dependency security updates. - Security Advisories: Technical advisories detailing root causes, exploit conditions, code fixes, and upgrade requirements.
- Release Notes: Versioned release announcements for Server, Console,
mcli, andsilo-pkg.
Deployment Hardening
- Security Checklist — production access control, network isolation, and key management.
- Network Encryption (TLS) — certificate configuration for S3, Console, and internode traffic.
See Also
7 - Security Advisories
This ledger summarizes security fixes and upgrade-impacting security notes across the pgsty/silo stack. Each advisory with its own deep-dive investigation links to its full article in the Security Chronicle or Design Notes; this page serves as the canonical index of identifiers, fix commits, exposure conditions, and upgrade boundaries.
Entries with a public CVE use that identifier. Because upstream minio/minio is archived and no longer coordinates CVE assignments for inherited code, findings without a CVE carry a stable SN-<year>-<sequence> identifier (SN-2026-002 through SN-2026-019) so release notes, commits, and issues can reference them unambiguously. SN-2026-001 tracks a non-security streaming-flush regression in trackingResponseWriter (Server 20260804).
Current Release Boundary
The current production baseline is Server 20261026 (with embedded Console v2.5.1 and silo-pkg v3.15.2), standalone Console v2.6.0, mcli 20261109, and silo-pkg v3.16.0, all built with Go 1.27.3. KES 20261026 is the optional external key service. These releases retain the earlier security fixes below and add the dependency security updates. The first fixed versions remain:
- Server 20261018 fixes SN-2026-015 (
PutObjectRetentiongovernance bypass), SN-2026-016 (version-addressed and in-place Object Lock overwrites), and SN-2026-017 (Admin credential authorization boundaries), and adds scoped STS token revocation (0cd388c66). Server 20260916 and earlier remain affected bySN-2026-015throughSN-2026-017; deploy the upgrade to every Server node and replication peer accepting writes. See the October security note and Component Version Matrix. - Server 20260916 and Console v2.4.1 include SN-2026-011 through SN-2026-014, which are absent from Server 20260903.
- Server 20260903 includes SN-2026-006 through SN-2026-010.
- Server 20260804 and silo-pkg v3.11.0 / v3.12.0 include SN-2026-002 through SN-2026-005, SN-2026-018, and SN-2026-019.
Inherited Upstream Advisory Baseline
SILO cut its first community release (RELEASE.2025-12-03T12-00-00Z) from upstream history that already contained CVE-2025-62506.
| ID | Upstream Remediation | SILO Inheritance | Summary & Release Note |
|---|---|---|---|
CVE-2025-62506 |
minio/minio#21642, merged as c1a49490 |
pgsty/silo@c1a49490 |
Resets DenyOnly while evaluating a restricted session policy so a service account or STS session cannot mint an unrestricted child service account. Upstream first fixed this in RELEASE.2025-10-15T17-29-55Z; every SILO release starting with RELEASE.2025-12-03T12-00-00Z contains it. Operators migrating from an older upstream build should upgrade and audit service accounts created by restricted service or STS identities. See the chronicle. |
CVE-2026-32285 |
Same upstream commit c1a49490 (pgsty/silo#26) |
Already present (v1.1.2 buger/jsonparser) |
External vulnerability feeds mislabeled the CVE-2025-62506 session-policy commit (c1a49490) as a buger/jsonparser vulnerability; go.mod already selects v1.1.2 and govulncheck confirms no reachable vulnerable symbols. No code change required. See the chronicle. |
Advisories Since RELEASE.2026-03-21T00-00-00Z
| ID | Fixed By | Affected Area | Chronicle / Release Note |
|---|---|---|---|
CVE-2026-33322 |
d24f449e0 |
OIDC STS (AssumeRoleWithWebIdentity, AssumeRoleWithClientGrants) |
Chronicle |
CVE-2026-33419 |
3b950f8fa + follow-ups |
LDAP STS authentication & rate limiting | Chronicle |
CVE-2026-34204 |
56fa63bfd |
Replication metadata header sanitization | Chronicle |
CVE-2026-39414 |
3252d5b7f, 5dc705936 |
S3 Select oversized CSV and JSON Lines records | Chronicle |
CVE-2026-41145 |
f444b6f37 |
STREAMING-UNSIGNED-PAYLOAD-TRAILER presigned query auth |
Chronicle |
CVE-2026-40344 |
efb6e5b00 |
Snowball PutObjectExtract unsigned-trailer auth |
Chronicle |
CVE-2026-42600 |
73ac52472 (73ac5244d) |
Internode ReadMultiple (/rmpl) path traversal |
Chronicle |
SN-2026-002 |
ca7baa670 .. a36fd8fff |
Internode RPC, peerREST, and xlStorage path/memory containment |
Chronicle |
SN-2026-003 |
silo-pkg v3.11.0, 2f55347f7, 7a8fa5bc2, eb74f7e40 |
S3 policy condition value sources (s3:VersionId, tags, signatureAge) |
Chronicle |
SN-2026-004 |
silo-pkg v3.11.0 (d8b1fa7), 97b7d2804 |
Bucket-level write isolation from object-only arn:aws:s3:::bucket/* grants |
Chronicle |
SN-2026-005 |
silo-pkg v3.12.0 (2b087a1), eee05a17c |
Bare ARN prefix (arn:aws:s3:::) rejection on policy writes |
Chronicle · pkg v3.12.0 |
SN-2026-006 |
b73581b05, c4fd97d0b, e2b0cf32f (#82) |
Zero-byte SSE-C object key authentication | Chronicle |
SN-2026-007 |
474cd5801, 74c97d005, 21870fa2e, e2b0cf32f (#84) |
GetObjectAttributes SSE-C key verification |
Chronicle |
SN-2026-008 |
938603458 .. 04b097fd9 |
Post-auth trust boundary for internal X-Minio-Source-* headers |
Chronicle · Design |
SN-2026-009 |
58735ee38, 229fe2b3c, 0c8b02344, 4dbeb15d8 |
Target-state IAM action check for user/group enable vs. disable | Chronicle · Design |
SN-2026-010 |
75a6734e4 .. d2d47a41f, 04b097fd9 (#58) |
Explicit object version deletion requires s3:DeleteObjectVersion |
Chronicle · Release |
SN-2026-011 |
123325430, #173, #177 |
SigV4 SignedHeaders coverage across all X-Amz- headers |
Chronicle · Design |
SN-2026-012 |
c4b5e1cb4, #177 |
Presigned payload SHA-256 verification when supplied via header | Chronicle |
SN-2026-013 |
f99ed829b, 0cd388c66 |
Durable IAM revocation records and scoped STS revocation | Chronicle · Design |
SN-2026-014 |
silo-console#56, #209 |
Console anonymous share-download proxy path restriction | Chronicle · Console v2.4.1 |
SN-2026-015 |
14042b5aa, #234, #235 |
PutObjectRetention authorization and governance-bypass enforcement |
Chronicle · Design |
SN-2026-016 |
14042b5aa, 0d3ba5d4c |
Version-addressed and in-place Object Lock overwrite prevention | Chronicle · Design |
SN-2026-017 |
2616d43fb, 995439260, #242 |
Delegated IAM Admin credential and policy containment boundaries | Chronicle · Design |
SN-2026-018 |
fe6dc4780 |
Forwarded client IP trust boundary (MINIO_API_TRUSTED_PROXIES) |
Chronicle |
SN-2026-019 |
672c07a0f, f1ba68358 |
Notification key registration & config.HasSensitiveKeys credential redaction |
Chronicle · Design |
Exposure and Upgrade Guidance
CVE-2025-62506 — Session-Policy Privilege Escalation
Remote exploitation: yes (authenticated service account or STS session carrying an inline session policy). Upstream fixed the DenyOnly evaluation reset in c1a49490 (RELEASE.2025-10-15T17-29-55Z), and every SILO release since RELEASE.2025-12-03T12-00-00Z inherits it. Operators migrating from an unpatched upstream MinIO release should upgrade and audit child service accounts created by restricted parent sessions. See the CVE-2025-62506 chronicle.
CVE-2026-32285 — Mislabeled jsonparser Advisory
Public feeds describe CVE-2026-32285 as a buger/jsonparser vulnerability, but its referenced upstream fix (c1a49490) is the session-policy commit for CVE-2025-62506. SILO already selects github.com/buger/jsonparser v1.1.2 and govulncheck confirms no reachable vulnerable symbols. See the CVE-2026-32285 investigation.
CVE-2026-33322 — OIDC JWT Algorithm Confusion
Remote exploitation: yes, if OIDC is enabled (AssumeRoleWithWebIdentity or AssumeRoleWithClientGrants) and an attacker knows or can guess client_secret to forge an HS256/HS384/HS512 token. Commit d24f449e0 binds JWT verification strictly to the provider’s asymmetric JWKS keys and removes the client_secret HMAC fallback from token.Parse. Deployments that relied on symmetric HMAC id_tokens must switch their IdP to asymmetric signing (RS256, ES256, etc.).
CVE-2026-33419 — LDAP STS Enumeration and DoS
Remote exploitation: yes, if LDAP is configured (AssumeRoleWithLDAPIdentity). Returns a uniform 400 InvalidParameterValue on authentication failure without leaking internal directory errors, bounds concurrent LDAP bind operations with a reserve/commit/cancel/refund lifecycle, and removes the shared per-username rate-limit bucket (which previously allowed an attacker who knew a victim’s LDAPUsername to lock out that user from rotating source IPs). See the LDAP STS chronicle.
CVE-2026-34204 — Replication Metadata Injection
Remote exploitation: yes. Blocks untrusted X-Minio-Replication-* headers on client PutObject and CopyObject requests from being stored as internal replication metadata and leaving objects unreadable. Upgrade any server that accepts untrusted object writes. See SN-2026-008 and Replica Metadata Normalization for the subsequent replication-header hardening.
CVE-2026-39414 — S3 Select Oversized Record Memory Exhaustion
Remote exploitation: yes (s3:SelectObjectContent). Rejects CSV and JSON Lines records exceeding 1 MiB (maxCharsPerRecord) with OverMaxRecordSize instead of buffering unbounded lines in memory. The April patch (3252d5b7f) enforced the limit on CSV and standard JSON readers; the June follow-up (5dc705936) routes JSON Lines on AVX2/AVX-512 CPUs through the bounded json.PReader instead of simdj.NewReader, closing the hardware-specific SIMD bypass. See the S3 Select chronicle.
CVE-2026-41145 — Unsigned-Trailer Query Authentication Bypass
Remote exploitation: yes. Closes the presigned query-string authentication bypass when X-Amz-Content-Sha256: STREAMING-UNSIGNED-PAYLOAD-TRAILER is sent on PutObject or PutObjectPart. Upgrade any server reachable by clients on object write endpoints.
CVE-2026-40344 — Snowball Auto-Extract Authentication Bypass
Remote exploitation: yes. Verifies SigV4 authentication in newUnsignedV4ChunkedReader() before PutObjectExtract begins untar() extraction on Snowball unsigned-trailer uploads, guaranteeing that unauthenticated streams never reach the tar extractor.
CVE-2026-42600 — Internode ReadMultiple Path Traversal
Remote exploitation: yes (requires cluster-root / internode JWT). Removes the unused /rmpl (xlStorage.ReadMultiple) RPC endpoint that allowed msgpack request payloads to traverse outside configured drive roots. Single-node deployments do not register internode routes; distributed erasure deployments should upgrade.
SN-2026-002 — Internode Payload Path and Memory Containment
Remote exploitation: yes (requires cluster-root / internode JWT). Completes CVE-2026-42600 across the remaining internode protocol surfaces (storageREST, peerREST, grid WebSocket multiplexing, and xlStorage). Enforces path containment at two storage-layer chokepoints (getVolDir/NSScanner and getStorage() via guardPaths, hasBadPathComponent, and isVolumeRootAlias), caps caller-declared slice allocations (maxDeleteVersions = 1000, max BitrotVerifier size), validates erasure DataBlocks/ParityBlocks before division to prevent per-frame node panics, and verifies shard lengths before reporting intact data. Single-node deployments do not register these routes; no S3 API behavior changes. See the internode containment chronicle.
SN-2026-003 — Policy Condition Value Sources
Remote exploitation: yes (policy-dependent). Prevents raw HTTP query parameters or headers that spell internal IAM condition-key names from shadowing or synthesizing server-derived condition values; confines s3:signatureAge to verified SigV4 presigned requests; separates query-only list parameters from header-backed x-amz-* condition keys; prevents client request tags from impersonating stored ExistingObjectTag values; and evaluates s3:VersionId against the whitespace-trimmed version ID only when ?versionId is actually present. See the version-ID and condition chronicle and condition value sources reference.
SN-2026-004 — Object-Grant Bucket Reach
Remote exploitation: yes (policy-dependent). Withholds 12 sensitive bucket-level write actions from object-only resource patterns (arn:aws:s3:::bucket/*): PutBucketPolicy, DeleteBucketPolicy, PutBucketObjectLockConfiguration, PutBucketVersioning, PutReplicationConfiguration, PutBucketLifecycle, DeleteBucket, ForceDeleteBucket, PutBucketCors, DeleteBucketCors, PutBucketQOS, and PutInventoryConfiguration, and requires a single Allow statement to match both the action and the resource (monotone intersection). Read the SN-2026-004 chronicle before upgrading if you maintain custom bucket-scoped IAM policies: add the bare bucket ARN (arn:aws:s3:::bucket) alongside arn:aws:s3:::bucket/* in any statement intended to grant those 12 bucket-level writes. Built-in canned policies, Deny statements, and NotResource exclusions are unaffected. Setting MINIO_API_LEGACY_BUCKET_RESOURCE_MATCH=on in the process environment before startup restores legacy matching (MINIO_CONFIG_ENV_FILE is read too late for package init).
SN-2026-005 — Bare ARN Prefix Rejection
Policy-hardening change (silo-pkg v3.12.0 / Server eee05a17c). Rejects S3, S3 Tables, and KMS ARN namespace prefixes that name no resource (arn:aws:s3::: and its historical *arn:aws:s3::: form) in both Resource and NotResource when creating named policies or creating/updating service-account session policies. Existing stored policies continue loading, matching, importing, and replicating without disruption, but re-submitting a policy containing a bare prefix requires replacing it with the concrete bucket/object ARN or an explicit wildcard (arn:aws:s3:::*). Note that a bare ARN prefix (arn:aws:s3:::) is distinct from a valid bare bucket ARN (arn:aws:s3:::bucket). See the SN-2026-003 / SN-2026-005 chronicle and silo-pkg v3.12.0 release notes.
SN-2026-006 — Zero-Byte SSE-C Object Key Authentication
Remote exploitation: yes (requires read access to the object). Zero-byte SSE-C objects previously returned 200 OK without unsealing the customer-provided key, allowing a caller with the wrong SSE-C key to pass HeadObject/GetObject or copy/overwrite the object under a newly chosen key. Zero-byte SSE-C reads and copies now unseal and verify the customer key, returning 403 AccessDenied on key mismatch as on AWS S3. Shipped in Server 20260903.
SN-2026-007 — GetObjectAttributes on SSE-C Objects
Remote exploitation: yes (requires read access to the object). GetObjectAttributes previously returned object attributes for SSE-C objects without authenticating the customer key, and skipped the check whenever a client sent X-Minio-Source-Replication-Request. Wrong SSE-C keys now return 403 AccessDenied, and unauthenticated replication markers return 400 InvalidArgument; authorized replication peers holding s3:ReplicateObject remain unaffected. Shipped in Server 20260903.
SN-2026-008 — Post-Auth Trust Boundary for Internal Replication Headers
Remote exploitation: yes (any authenticated principal with read or write access to the object). Completes CVE-2026-34204: internal headers (X-Minio-Source-Etag, X-Minio-Source-Mtime, X-Minio-Source-Replication-Request, X-Minio-Source-DeleteMarker, replication SSE key headers, and X-Amz-Bucket-Replication-Status) were previously trusted on mere presence in several handlers. Server 20260903 strips these headers from a post-authentication clone unless the caller sends the exact marker value and holds s3:ReplicateObject or s3:ReplicateDelete. Site replication service accounts and bucket-replication targets holding replication permissions are unaffected. See the chronicle and CORS & Replication Trust Design.
SN-2026-009 — User and Group Status Authorization
Remote exploitation: yes (authenticated Admin API). SetUserStatus and UpdateGroupStatus previously checked admin:EnableUser and admin:EnableGroup regardless of whether the request enabled or disabled the target, allowing an operator granted only enable permission to disable accounts (and vice versa). Status changes now check admin:EnableUser / admin:DisableUser and admin:EnableGroup / admin:DisableGroup according to the requested target state. Policies granting admin:* or consoleAdmin are unaffected; least-privilege policies granting only one action of the pair now authorize only that direction. See the chronicle and User Status Permissions Design.
SN-2026-010 — Explicit Object Version Delete Authorization
Remote exploitation: yes (authenticated S3 API). DeleteObject?versionId=... and DeleteObjects entries carrying a VersionId were previously authorized against s3:DeleteObject with only a negative check for Deny s3:DeleteObjectVersion. Explicit version deletes now require s3:DeleteObjectVersion, matching AWS S3. Two policy effects: principals granted only s3:DeleteObject can still create delete markers on unversioned DELETE calls but can no longer permanently delete specific versions; and policies that relied solely on Deny s3:DeleteObject alongside Allow s3:* to block permanent version deletion must also add Deny s3:DeleteObjectVersion. Replication targets retain the s3:ReplicateDelete contract. See DeleteObjectVersion Authorization.
SN-2026-011 — Unsigned X-Amz-* Operation Headers
Remote exploitation: yes (holder of a presigned URL or intercepted Authorization-header PUT request). Because cmd/api-router.go dispatches PUT requests carrying x-amz-copy-source to CopyObjectHandler, an attacker holding a presigned PUT URL could append an unsigned x-amz-copy-source: /src/secret header and trick the server into copying any object readable by the signer into the destination object. Reported by Oren Yomtov.
Fixed in Server 20260916 (status note, 123325430, PR #173 and #177). Both doesPresignedSignatureMatch and doesSignatureMatch now invoke checkUnsignedHeaders and reject any request carrying an unsigned X-Amz- header with 400 AccessDenied (ErrUnsignedHeaders). X-Amz-Content-Sha256 is the sole explicit header exemption because its payload digest is bound by the canonical request and verified by SN-2026-012; PR #177 also derives s3:signatureAge directly from the signed X-Amz-Date without mutating r.Header. Standard AWS SDKs, mcli, and minio-go already sign all X-Amz- headers; custom clients that append X-Amz-* headers to a presigned URL must include them in X-Amz-SignedHeaders at signing time. See Signed Header Coverage Design.
SN-2026-012 — Header-Only Presigned Payload Hash Verification
Remote exploitation: yes (holder of a presigned URL whose payload hash was bound via X-Amz-Content-Sha256 header rather than query string). Generic authenticated handlers such as PutBucketPolicy previously verified the signature against the header digest but did not verify the consumed request body against that digest, allowing a holder of the presigned URL to substitute a different body. Commit c4b5e1cb4 (Server 20260916) binds generic body verification to the same effective payload hash used during signature verification (query parameter first, header fallback) and rejects tampered bodies with XAmzContentSHA256Mismatch.
SN-2026-013 — Durable IAM Revocation and Scoped STS Revocation
Remote exploitation: requires a previously issued credential and a restart, peer-sync delay, or same-name parent recreation scenario. Before Server 20260916 (#191, #192, f99ed829b), disabling or deleting a user, rotating credentials, or recreating a user under the same name could leave previously minted STS tokens or child service accounts valid until JWT expiration, or allow stale site-replication records to resurrect deleted identities. Server 20260916 persists deletion tombstones, parent revocation timestamps, and group-grant revisions under .minio.sys/iam/revocations/, and Server 20261018 (0cd388c66) adds POST /minio/admin/v3/sts-revoke for per-principal and per-token (jti) STS revocation without invalidating unrelated sessions. Coordinate upgrades across all nodes sharing an IAM backend; see IAM Revocations Design and the IAM Upgrade Runbook.
SN-2026-014 — Anonymous Console Share-Download Proxy Restriction
Remote exploitation: yes (anonymous caller reaching the Console /api/v1/download-shared-object endpoint). The Console share-download proxy previously accepted arbitrary paths and query parameters on its configured S3 origin, allowing an unauthenticated caller to reach internal origin paths (such as /minio/v2/metrics/cluster) that operators had isolated behind the Console network boundary. Reported by Jiri Pejchal (@jiri-pejchal). Fixed in Console v2.4.1 (silo-console#56) and embedded in Server 20260916 (#209): the proxy now restricts forwarding strictly to single-object GET downloads on the configured S3 origin, rejects /minio/* system paths and subresource management queries before dialing, and refuses HTTP redirects.
SN-2026-015 — PutObjectRetention Authorization and Governance Bypass
Remote exploitation: yes (authenticated S3 caller). Three flaws in PutObjectRetentionHandler (cmd/object-handlers.go) allowed an authenticated caller to: (1) modify object retention without holding s3:PutObjectRetention by supplying X-Amz-Bypass-Governance-Retention: true when holding s3:BypassGovernanceRetention (short-circuiting the base action check); (2) clear (Mode: "") or shorten an active GOVERNANCE lock using only s3:PutObjectRetention without s3:BypassGovernanceRetention; and (3) bypass IAM Deny policies on s3:object-lock-remaining-retention-days when clearing retention. Fixed in Server 20261018 (PR #234, #235, 14042b5aa): s3:PutObjectRetention is unconditionally enforced before object lookup, weakening or clearing an active GOVERNANCE lock requires both X-Amz-Bypass-Governance-Retention: true and s3:BypassGovernanceRetention, and clearing retention evaluates s3:object-lock-remaining-retention-days = 0. See the SN-2026-015 / SN-2026-016 Advisory and Repair Architecture.
SN-2026-016 — Version-Addressed and In-Place Object Lock Overwrites
Remote exploitation: yes (authenticated S3 writer). Callers supplying ?versionId=<existing-uuid> on PutObject, CopyObject, CompleteMultipartUpload, or PutObjectExtract, or overwriting unversioned/null-version objects in place (including directory objects and multipart completions), could overwrite an existing version protected by COMPLIANCE or GOVERNANCE retention or LegalHold without triggering an Object Lock check. Fixed in Server 20261018 (14042b5aa, 0d3ba5d4c): S3 handlers reject caller-supplied ?versionId= unless the request is an authenticated replication write (isReplicationRequest), preflight checks fail closed on unreadable metadata, and storage write paths (PutObject, CopyObject, CompleteMultipartUpload, PutObjectDir) re-verify destination version lock state (checkObjectLockForOverwrite) inside the namespace write lock. Upgrade every Server node and replication peer accepting writes. See the Repair Architecture.
SN-2026-017 — Delegated IAM Admin Credential Authorization Boundaries
Remote exploitation: yes (authenticated delegated IAM administrator or restricted derived credential). In Server 20260916 and earlier, delegated admins holding admin:CreateUser, admin:AttachUserOrGroupPolicy, or admin:UpdateServiceAccount could assign policies broader than their own effective permissions, mutate higher-privilege users/groups/service accounts, or use self-service admin routes to escape session-policy or Deny restrictions. Fixed in Server 20261018 (2616d43fb, 995439260, PR #242): delegated IAM mutations now enforce target-policy containment (authorizePolicyChange, authorizeGroupTargets, authorizeTargetUser) and block non-root self-permission escalation (ErrAdminChangeUserSelfPermission). See IAM Admin Authorization Design.
SN-2026-018 — Client Source Address Trust Boundary (MINIO_API_TRUSTED_PROXIES)
Forwarded-Header Trust Policy
Opt-in security hardening (fe6dc4780, shipped in Server 20260804). By default, inherited upstream code trusts X-Forwarded-For and X-Real-IP from any direct peer, allowing clients that can reach the server directly (or behind an appending proxy) to spoof aws:SourceIp IAM conditions and evade per-IP LDAP rate limits. MINIO_API_TRUSTED_PROXIES establishes an enforceable trust boundary: when set to none, forwarded headers are never trusted; when set to a comma-separated list of proxy IPs or CIDRs, forwarded headers are accepted only from listed peers (plus loopback sidecars) and X-Forwarded-For is walked right-to-left past trusted hops to extract the first untrusted client IP. Multi-node clusters that enable MINIO_API_TRUSTED_PROXIES must include their own cluster node IPs/CIDRs in the list so peer-forwarded S3 requests preserve the original client IP. See the Source Address Trust Chronicle and Settings Reference.
SN-2026-019 — Notification Key Registration and Secret Redaction
Config-subsystem hardening (672c07a0f in Server 20260804, followed by f1ba68358 in Server 20260903). Auditing notify_postgres and notify_mysql revealed that config.HasSensitiveKeys did not redact password, dsn_string, or connection_string when returning validation errors or GetConfigKV payloads, and five discrete connection keys were missing from the registered Keyspace. Commit 672c07a0f added credential redaction in config.HasSensitiveKeys and a structural test verifying key registration across all config subsystems; Server 20260903 subsequently retired the five discrete keys in favor of connection_string and dsn_string to eliminate split-brain overwrites during startup migration. See the Notification Keyspace Chronicle and Notify URL Design.
Dependency Security Updates
Server 20261018 builds with Go 1.27.2 and selects golang.org/x/net v0.61.0, golang.org/x/crypto v0.58.0, golang.org/x/text v0.43.0, and github.com/go-jose/go-jose/v4 v4.1.6 (note that the go-jose RSA JWK parsing fix rejects RSA keys larger than 4096 bits; verify OIDC/JWKS identity providers before upgrading). Unified Go 1.27.3 and static curl 8.23.0 updates are tracked in SILO 20261026.
| Advisory / Scope | Fixed By | Summary |
|---|---|---|
CVE-2026-39883 |
1869bd30b, e4fa06394 |
Updates OpenTelemetry dependencies (RELEASE.2026-03-21). |
| 2026-03-25 release | RELEASE.2026-03-25 |
OTel SDK, Paho MQTT, and x/crypto updates addressing CVE-2026-24051, CVE-2025-10543, and CVE-2025-58181. |
CVE-2026-34986 |
68e0ba997 |
Upgrades go-jose to v4.1.4. |
| Go 1.26.2 stdlib | db4c0fd5e |
Fixes CVE-2026-32280 and CVE-2026-32281 (crypto/x509) and CVE-2026-32283 (crypto/tls). |
| Go 1.26.4 & module refresh | df627ff89, 3e61b1d3a |
Fixes CVE-2026-32952 (Azure NTLM) and CVE-2026-41602 (Thrift), plus NATS and Prometheus dependency updates (RELEASE.2026-06-18). |
| Go 1.26.5 stdlib | Go 1.26.5 (Server 20260806) | Fixes GO-2026-4946, GO-2026-4947, and GO-2026-4948 in crypto/tls and os. |
| GO-2026-6061 / GHSA-hrxh-6v49-42gf | 4dfc27ce3 |
Updates gRPC to v1.82.1 (xDS RBAC engine and HTTP/2 transport fixes) and golang.org/x/text to v0.39.0 (GO-2026-5970 / CVE-2026-56852). |
| GO-2026-5841 | c1aec0518 |
Updates github.com/klauspost/compress to v1.18.7. |
| Go 1.27.1 & September stack refresh | Go 1.27.1 via 43f4bb7ed, edc8be6ed, 4d6e1ea8e |
Upgrades toolchain to Go 1.27.1, updates etcd client (v3.7.1), jwx (v3.0.13), and klauspost/compress (v1.19.2), and converges on upstream minio-go v7.3.1 (Server 20260903). |
| GO-2026-6354 / GO-2026-6355 | edf36bcbf |
Updates golang.org/x/crypto to v0.56.0, fixing SFTP/SSH channel deadlock DoS (startSFTPServer → sftp.Server.Listen → ssh.NewServerConn). |
| CVE-2026-84304 | gRPC v1.83.1 |
Fixes unauthenticated heap exhaustion on fragmented HTTP/2 DATA frames in gRPC-Go. |
| CVE-2026-79921 / GHSA-6c5v-hqjr-5xxp | d63c92e39 (Server 20260916) |
Updates amqp091-go to v1.14.0, preventing a malicious AMQP broker from exhausting memory via oversized frames. |
| Go 1.27.2 & October dependency refresh | 0cd388c66 (Server 20261018) |
Upgrades to Go 1.27.2, x/net v0.61.0, x/crypto v0.58.0, x/text v0.43.0, and go-jose/v4 v4.1.6 (GHSA-mgcc-cww5-fp2q). |
Operationally Significant Security-Related Fixes
| Change | Fixed By | Summary |
|---|---|---|
| Replicated Object Lock timestamp ordering | f4c1286c9 (Server 20260903) |
Replicated CopyObject previously rebuilt metadata from the incoming request before comparing replication timestamps and stored the legal-hold timestamp under the retention key, allowing a stale replica event to turn off a newer legal hold or shorten a newer retention period. The handler now captures stored state first, applies replica updates only when their timestamp is newer, and keeps retention and legal-hold timestamps under distinct keys. See Object Lock Replication Ordering. |
ldaps:// TLS configuration propagation |
ce1c537eb (RELEASE.2026-03-25) |
Restores TLS configuration propagation for ldaps:// DialURL() connections so MINIO_IDENTITY_LDAP_TLS_SKIP_VERIFY and custom root CAs take effect. |
| Signed-field and policy-input alignment | #177, 87d8b5967 (Server 20260916) |
Rejects ambiguous repeated x-amz-copy-source headers, derives s3:signatureAge statelessly from the signed X-Amz-Date, and binds s3:x-amz-content-sha256 policy evaluation to the verified payload digest. |
Cross-pool conditional PUT and DELETE |
#207, 5e7d60308 (Server 20260916) |
Evaluates conditional write and delete preconditions (If-Match, If-None-Match) against the authoritative logical object under a shared cross-pool lock so a stale copy in an older pool cannot authorize an overwrite. See Multi-Pool Object Consistency. |
Ledger Provenance
This page is maintained from the advisory ledger originally tracked in pgsty/silo (docs/security/advisories.md through f99ed829b5eba / 40220bd836cb) and aligned with the Component Version Matrix. Full root-cause traces, rejected design alternatives, and verification commands live in the linked Security Chronicle and Design Notes articles.