Skip to content

Security Advisories

The SILO advisory ledger: CVE and SN identifiers, fix commits, affected areas, release boundaries, and dependency security updates.

This ledger summarizes fork-specific security fixes and closely related upgrade-impacting security notes in pgsty/silo. It is intentionally narrower than a changelog and focuses on release-impacting security behavior. Each advisory with its own investigation also has an article in the Security Chronicle; this page is the stable index of identifiers, fixes, and release boundaries.

Entries carry a CVE identifier where one exists. Where none does, they carry a fork-local SN-<year>-<sequence> identifier so that a finding without a CVE can still be referenced stably from release notes, commits and issues. An SN- identifier is not a CVE and is not registered in any vulnerability database; it is deliberately not written in CVE form so that scanners do not mistake it for one. Upstream minio/minio is archived, so for findings in inherited code there is no upstream maintainer to coordinate a CVE assignment with. SN-2026-001 is the streaming-flush regression in trackingResponseWriter, which is a reliability defect rather than a security one and is tracked in the release notes rather than here.

Current release boundary

Verified 2026-09-16. The latest published Server is RELEASE.2026-09-03T13-18-01Z. SN-2026-011 is fixed on main but remains present in that release and all earlier public Server releases. A newer mcli, pkg or standalone Console does not patch an installed Server. See the component matrix for source pins.

Server 20260903 also lacks SN-2026-012 and SN-2026-013. The standalone Console boundary differs: SN-2026-014 is fixed in released Console v2.4.1, while an embedded Console requires a repaired Server build.

Inherited upstream advisory baseline

The first Silo community release was cut from upstream history that already contained the following security fix. Upstream and Silo links are both recorded even when the fork preserves the same commit object and SHA; that identity is the inheritance evidence, not a claim that Silo independently reimplemented the patch.

ID Upstream remediation Silo inheritance Release note
CVE-2025-62506 minio/minio#21642, merged as c1a49490 The same commit object is present as pgsty/silo@c1a49490 Resets DenyOnly while evaluating a restricted session policy so service or STS accounts cannot mint an unrestricted child service account. Upstream first fixed this in RELEASE.2025-10-15T17-29-55Z; every Silo community release, beginning 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 article.

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 Chronicle
CVE-2026-34204 56fa63bfd Replication metadata handling Chronicle
CVE-2026-39414 3252d5b7f S3 Select oversized record handling Chronicle
CVE-2026-41145 f444b6f37 Unsigned-trailer PUT and multipart upload authentication Chronicle
CVE-2026-40344 efb6e5b00 Snowball auto-extract authentication Chronicle
CVE-2026-42600 73ac52472 Internode ReadMultiple storage-REST endpoint Chronicle
SN-2026-002 ca7baa670 and follow-ups Internode storage-REST and Grid RPC payloads Chronicle · release note
SN-2026-003 silo-pkg v3.11.0 and 2f55347f7 S3/IAM bucket-policy condition values release note
Not a vulnerability fe6dc4780 Client source address (aws:SourceIp, audit remotehost, event Host) Chronicle
SN-2026-004 silo-pkg v3.11.0 and 97b7d2804 IAM policy evaluation of bucket-level actions Chronicle · release note
SN-2026-005 silo-pkg v3.12.0 and eee05a17c IAM named-policy and service-account policy writes release note
SN-2026-006 b73581b05, c4fd97d0b (#82) SSE-C reads of zero-byte objects Chronicle
SN-2026-007 474cd5801, 74c97d005, 21870fa2e (#84) GetObjectAttributes on SSE-C objects Chronicle
SN-2026-008 PR #101 (938603458 through 04b097fd9) Internal replication request headers Chronicle
SN-2026-009 58735ee38, 229fe2b3c (PR #73, #85) Admin SetUserStatus / SetGroupStatus Chronicle
SN-2026-010 PR #104 (75a6734e4 through d2d47a41f, #58) DeleteObject/DeleteObjects with explicit versionId Chronicle
SN-2026-011 123325430 SigV4 signed-header coverage; x-amz-copy-source dispatch Chronicle
SN-2026-012 c4b5e1cb4, #177 Header-only presigned payload hash verification Chronicle
SN-2026-013 #191, #192 IAM revocation replay and recovery Design · Chronicle
SN-2026-014 Console #56, Server #209 Anonymous shared-download proxy scope Chronicle · Console v2.4.1

Upgrade and compatibility notes for each entry follow. Entries whose full investigation is told in a chronicle article are summarized here; follow the link for the threat model, rejected alternatives, and verification.

CVE-2026-33322 — OIDC STS JWT algorithm confusion

Remote exploitation: yes. Closes JWT algorithm confusion by removing HMAC/shared-secret verification and requiring JWKS-backed verifier keys. Breaking change: providers issuing HS256, HS384, or HS512 tokens for these STS flows must switch to JWKS-backed RSA or ECDSA signing before upgrading. PS256 and EdDSA are not currently supported.

CVE-2026-33419 — LDAP STS username enumeration

Remote exploitation: yes. Prevents username enumeration by unifying unknown-user and bad-password responses (both now 400 InvalidParameterValue) and adds in-memory login throttling. The final June design limits by source IP only; it removed the shared username bucket because attackers could use it to lock out a specific account. Limits are per-node and in-memory; the source address trust policy is configurable separately. See the LDAP STS chronicle for the successive repairs.

CVE-2026-34204 — replication metadata injection

Remote exploitation: yes. Blocks untrusted X-Minio-Replication-* headers from being smuggled into internal replication metadata and leaving objects unreadable. Upgrade any server that accepts untrusted PutObject or CopyObject requests, which in practice means almost any production server that accepts writes.

CVE-2026-39414 — S3 Select oversized records

Remote exploitation: yes. Rejects oversized CSV and line-delimited JSON records with OverMaxRecordSize instead of buffering them unchecked. The April fix initially missed the SIMD JSON path; the June follow-up routes all JSON Lines through the bounded json.PReader, closing that bypass. See the S3 Select chronicle.

CVE-2026-41145 — unsigned-trailer authentication bypass

Remote exploitation: yes. Closes the query-string authentication bypass in unsigned-trailer streaming requests. Upgrade if clients can reach object write endpoints using the STREAMING-UNSIGNED-PAYLOAD-TRAILER content-sha256 mode together with query-string SigV4 credentials.

CVE-2026-40344 — Snowball auto-extract authentication

Remote exploitation: yes. Verifies request authentication before tar extraction in Snowball unsigned-trailer flows. Upgrade if you use PutObjectExtract or Snowball uploads.

CVE-2026-42600 — internode ReadMultiple path traversal

Remote exploitation: yes; cluster-root JWT required. Removes the unused endpoint that allowed path traversal outside configured drive roots. Upgrade distributed-erasure deployments. Single-node deployments do not register this route.

SN-2026-002 — internode payload containment

Remote exploitation: yes; cluster-root / internode JWT required. Completes CVE-2026-42600: its fix removed one endpoint that exercised the gap; the gap itself — request bodies and grid frames never reaching the validity middleware, and no containment in the storage layer — remained across three further protocol surfaces. Closes path traversal on both the volume and path axes (including the peer-S3 bucket RPCs, which bypass the storage-REST wrapper entirely), an unrecoverable divide-by-zero that killed a node per RPC frame, metadata that reported truncated shards as intact, and three allocations sized from caller-declared values. Upgrade distributed-erasure deployments; single-node deployments register none of these routes. No S3 API behaviour changes; object keys containing . or .. path segments were already refused at the S3 boundary.

SN-2026-003 — policy condition value sources

Remote exploitation: yes (policy-dependent). Prevents raw request entries that spell condition-key names from shadowing or synthesizing internal condition values; confines s3:signatureAge to verified SigV4 presigned requests; separates query-only list fields from header-backed x-amz-* fields; and stops client request tags from impersonating stored existing-object tags. The compatible query form remains for storage class and upload tagging on handlers that consume it; an explicitly present header wins, including an empty header. Use request-tag conditions only on operations that consume tags. Header-only x-amz-* policy keys no longer accept query substitutes. See condition value sources and precedence.

Client source address trust — opt-in hardening, not a vulnerability

Fixed by fe6dc4780; no CVE assigned (the default matches upstream, and upstream’s own position is that IP-based restrictions are impractical without reliable source-IP visibility). Adds an enforceable forwarded-header trust boundary, MINIO_API_TRUSTED_PROXIES. Set to a list of addresses or CIDR blocks, forwarded headers are believed only from those peers and forwarding chains are read right-to-left past listed hops — which also stops the client-supplied left-most entry that an appending proxy leaves in place. Set to none, no forwarded header is believed at all. This is the guarantee _MINIO_API_XFF_HEADER=off never provided. No behaviour change for any existing deployment; the variable is opt-in and inert when unset. If you use IpAddress or NotIpAddress conditions, note that they were not enforceable before this change; the operator contract — including why the allowlist must name proxies rather than subnets and why multi-node deployments must include their own node addresses — is in the chronicle article and the settings reference.

SN-2026-004 — object-grant bucket reach

Remote exploitation: yes (policy-dependent). Withholds twelve sensitive bucket-level writes from an object-only resource pattern (arn:aws:s3:::bucket/*): PutBucketPolicy, DeleteBucketPolicy, PutBucketObjectLockConfiguration, PutBucketVersioning, PutReplicationConfiguration, PutBucketLifecycle, DeleteBucket, ForceDeleteBucket, PutBucketCors, DeleteBucketCors, PutBucketQOS, PutInventoryConfiguration. This is an authorization tightening; read the chronicle article before upgrading if you write your own bucket-scoped policies. Add the bare bucket ARN (arn:aws:s3:::bucket) alongside the wildcard form in any statement that legitimately grants one of the twelve. Built-in canned policies are unaffected; Deny statements and NotResource exclusions are untouched. MINIO_API_LEGACY_BUCKET_RESOURCE_MATCH=on restores the historical behaviour in full. It is read during package initialization from the process environment; setting it only in MINIO_CONFIG_ENV_FILE is too late. See the setting.

SN-2026-005 — bare ARN prefix rejection

No direct remote exploit; policy-dependent. Rejects S3, S3 Tables, and KMS ARN namespace prefixes that name no resource, including their historical *arn:... serialization, in both Resource and NotResource, when creating named policies and when creating or updating service-account session policies. Existing policies keep loading, matching, importing, and replicating with unchanged runtime behavior, but a policy containing such a prefix cannot be submitted unchanged; replace it with the intended concrete resource, or use an explicit wildcard such as arn:aws:s3:::* only when all resources are intended. A “bare ARN prefix” (arn:aws:s3:::) is distinct from the valid “bare bucket ARN” of SN-2026-004 (arn:aws:s3:::bucket). IAM import, site-replication receive paths, stored-policy loading, and STS inline policies remain on the permissive compatibility path in this release. See the pkg v3.12.0 release note.

SN-2026-006 — SSE-C zero-byte reads

Remote exploitation: yes; requires read access to the object. Zero-byte SSE-C objects never unsealed the customer-provided key, so a wrong key was accepted with 200 instead of 403, and a copy or new version could be created under a key of the caller’s choosing without knowing the current one. Wrong keys now fail with 403 AccessDenied as on AWS; correct keys behave as before and no client change is needed. Inherited from upstream; every earlier release is affected.

SN-2026-007 — GetObjectAttributes on SSE-C objects

Remote exploitation: yes; requires read access to the object. Attributes of SSE-C objects were returned without authenticating the customer key, and a bare X-Minio-Source-Replication-Request header skipped the check entirely. A wrong key returns 403, a replication marker without the key returns 400; replication peers holding s3:ReplicateObject are unaffected. Inherited from upstream.

SN-2026-008 — internal replication headers

Remote exploitation: yes; any authenticated principal that can read or write the object. Completes CVE-2026-34204: internal headers such as X-Minio-Source-Etag, X-Minio-Source-Mtime, X-Minio-Source-Replication-Request, the replication SSE key headers, and X-Amz-Bucket-Replication-Status were still trusted on presence in most handlers. Replication semantics now require the exact marker value together with s3:ReplicateObject or s3:ReplicateDelete; other requests have these headers removed after signature verification. Site replication service accounts and bucket-replication targets that already hold the replication permissions are unaffected. Inherited from upstream.

SN-2026-009 — user/group status authorization

Remote exploitation: yes; authenticated admin API. Status changes were authorized against admin:EnableUser / admin:EnableGroup regardless of the requested status, so a principal allowed only to enable could also disable, and vice versa. Enable and disable now require the action matching the target status. Policies that grant only one of the pair lose the other operation; admin:* and the built-in consoleAdmin policy are unaffected. Inherited from upstream.

SN-2026-010 — explicit version delete authorization

Remote exploitation: yes; authenticated S3 API. Explicit version deletes were authorized as s3:DeleteObject with only a deny check on s3:DeleteObjectVersion, diverging from AWS. Explicit version deletes now require s3:DeleteObjectVersion. Two policy effects: principals granted only s3:DeleteObject can no longer delete specific versions, and a policy that relied on Deny s3:DeleteObject to block permanent deletes must also deny s3:DeleteObjectVersion, because Allow s3:* now permits explicit version deletes. Replication targets keep the s3:ReplicateDelete contract. Inherited from upstream.

SN-2026-011 — unsigned x-amz-* operation headers

A holder of a presigned or ordinary signed PUT can add an unsigned x-amz-copy-source without knowing the signing secret. On affected paths this changes a one-object write into CopyObject or UploadPartCopy, reading source data with the signer’s authority. A readable destination can expose the copied bytes. Published Server 20260903 is affected; the original fix is 123325430, followed by #177.

Ordinary SigV4 and presigned verification now reject unsigned x-amz-* headers with 400 AccessDenied. X-Amz-Content-Sha256 is the sole explicit header exception: its effective value is separately bound by the canonical request. #177 removed the internal X-Amz-Signature-Age header, constant and exemption; signature age comes from the signed date. Conforming ordinary signers keep working; custom clients must sign nonexempt headers before sending them. AWS uses a different HTTP status for this rejection, so this is not byte-for-byte response parity.

The streaming SigV4 seed verifier does not call this same coverage helper. Streaming auth is refused by the copy handler’s ordinary authentication dispatch, but the change must not be described as universal header coverage for every streaming PUT path. See the scope and residual boundary. Reported by Oren Yomtov; a CVE was requested. Upgrade the Server, restrict signing grants to the required objects and review anonymously readable destinations. A client or standalone Console update does not repair it.

SN-2026-012 — header-only presigned payload hash

A valid presigned request can bind a SHA-256 value supplied only through X-Amz-Content-Sha256, yet affected generic authenticated handlers did not verify the consumed body against it. A URL holder could change the body while retaining the valid signed request; PutBucketPolicy is a reproduced surface. This does not create permission the signer never had, but it defeats the intended signed-body restriction.

c4b5e1cb4 makes generic body verification use the same effective payload hash as signature verification: query value first, header fallback. Tampering with a checksum-bound body is rejected with XAmzContentSHA256Mismatch; explicit UNSIGNED-PAYLOAD keeps its protocol meaning. This is on main, not Server 20260903. Upgrade before depending on body-bound presigned administration; avoid distributing broad administrative presigned grants. See the chronicle.

SN-2026-013 — durable IAM revocation

A revoked identity or grant could return when stale site state, delayed notifications or incomplete recovery reintroduced it. The attacker needs a previously valid credential and an affected replay/recovery scenario; this is not unauthenticated identity creation. #191/#192 preserve deletion revisions, parent revocation boundaries and original group-grant times, and reject old child credentials after same-name parent recreation.

The repair is on main and absent from Server 20260903. Coordinated upgrade is required for every site and every process sharing an IAM backend, including shared backends without site replication. Back up complete persistent IAM state, not only a live-record export. Keep tombstones, reissue the required child credentials and reconcile revocations missing from older backups before reopening access. Ordinary group-member removal during an outage remains a separate limitation. See the design and recovery runbook.

SN-2026-014 — anonymous share-download proxy

The public Console download proxy could fetch non-object paths on its configured S3 origin, exposing endpoints such as public metrics that operators had isolated behind the Console network boundary. An anonymous caller could cross that boundary without a Console session. This is not a claim that the proxy bypassed S3 authentication or could read every private object.

Console #56 limits forwarding to object-content GETs at the configured origin, rejects system paths and query-selected non-download APIs before sending a request, and refuses all redirects. Ordinary public, presigned and versioned downloads remain supported; the existing shared-link format setting is not a global sharing-disable switch. Reported by Jiri Pejchal (@jiri-pejchal).

The standalone repair is published in Console v2.4.1. Server #209 selects the repaired Console on main, but published Server 20260903 still embeds an older Console. Upgrade the component that actually serves the UI; installing a standalone Console does not replace an embedded bundle. While awaiting a repaired Server build, restrict access to the exposed Console proxy and review the configured origin’s public endpoints. See the chronicle.

Dependency security updates

Rows list the absorbed fix and the commit or release that first carried it. Reachability and deployment exposure still need to be judged per release: an absorbed dependency fix is not a claim that the vulnerability was reachable in Silo.

ID / date Fixed by Summary
2026-03-25 release RELEASE.2026-03-25 OTel SDK, Paho MQTT and x/crypto updates absorb CVE-2026-24051, CVE-2025-10543 and CVE-2025-58181; shipped together with the LDAP TLS regression fix below. Not every dependency upgrade in that release was a reachable vulnerability.
CVE-2026-34986 68e0ba997 Upgrades go-jose to v4.1.4.
CVE-2026-39883 1869bd30b, e4fa06394 Updates OpenTelemetry dependencies.
Go 1.26.2 stdlib db4c0fd5e CVE-2026-32280 and CVE-2026-32281 (crypto/x509), CVE-2026-32283 (crypto/tls); toolchain/stdlib only, no unrelated dependency rolling.
Go 1.26.4 refresh df627ff89, 3e61b1d3a CVE-2026-32952 (Azure NTLM), CVE-2026-41602 (Thrift), plus further NATS/Prometheus security fixes as the dependency-maintenance layer of the 06-18 release.
Upstream Go security fixes Go 1.26.5 Bumps the required toolchain to Go 1.26.5, which includes security fixes to crypto/tls and os.
GO-2026-6061 / GHSA-hrxh-6v49-42gf 4dfc27ce3: gRPC v1.82.1 with x/text v0.39.0 gRPC xDS RBAC engine and HTTP/2 transport fixes (GO-2026-5970 / CVE-2026-56852, an infinite loop on invalid input in x/text, landed in the same refresh). Existing MVS pins were kept; the security update was not used to roll unrelated dependencies.
GO-2026-5841 c1aec0518: klauspost/compress v1.18.7 govulncheck judged the affected dictionary symbols unreachable, but the known-affected direct dependency was still not carried; updated to the first fixed version.
Toolchain and dependency refresh Go 1.27.1 via 43f4bb7ed, edc8be6ed, 4d6e1ea8e Moves the toolchain to Go 1.27 (1.27.1 as of the release) and refreshes the dependency stack (etcd client v3.7.1, jwx v3.0.13, klauspost/compress v1.19.2). The pre-release cleanup then returns to upstream minio-go (v7.3.1 pre-release) and retires the silo-go fork; govulncheck reports no reachable vulnerability on the release candidate.
GO-2026-6354 / GO-2026-6355 golang.org/x/crypto v0.56.0 (edf36bcbf) Updates x/crypto/ssh to the first fixed version for denial of service on deadlocked undecided and established channels. Reachable through the SFTP server (startSFTPServersftp.Server.Listenssh.NewServerConn); every earlier release that enables SFTP is affected.
CVE-2026-84304 gRPC v1.83.1 Updates gRPC-Go to the first fixed version for unauthenticated heap exhaustion through highly fragmented HTTP/2 DATA frames. Silo pulls gRPC transitively rather than registering a gRPC server itself, but selects the fixed version for the complete module graph.
GO-2026-5970 / CVE-2026-56852 x/text v0.39.0 Updates x/text to the first fixed version for an infinite loop on invalid input.
CVE-2026-79921 / GHSA-6c5v-hqjr-5xxp d63c92e39: amqp091-go v1.14.0 (upstream first fixed v1.13.0) A malicious AMQP broker can send oversized frames and exhaust client memory. Relevant when an AMQP notification target is configured; this is not an unauthenticated S3 request path. The update is on main, not Server 20260903.

Operationally significant security-related fixes

Change Fixed by Summary
Replicated Object Lock updates ignored their timestamps f4c1286c9, included in Server 20260903 A replicated CopyObject rebuilt the metadata from the request before comparing replication timestamps, so the stored retention and legal-hold timestamps were never seen: any replica update was applied regardless of order, and the legal-hold timestamp was written under the retention key. A stale replica could therefore turn a newer legal hold off or shorten a newer retention. The stored state is now captured first, a replica update is applied only when its timestamp is newer, a stale one leaves the stored state in place, and each timestamp is kept under its own key. Inherited from upstream; builds preceding the fix are affected.
LDAP TLS regression ce1c537eb, released in RELEASE.2026-03-25 Restores TLS configuration propagation for ldaps:// DialURL() connections so MINIO_IDENTITY_LDAP_TLS_SKIP_VERIFY and custom root CAs work again.
Signed-field and policy-input alignment #177, 87d8b5967 Rejects ambiguous repeated copy-source values, derives signature age from signed input and aligns the effective payload-hash policy value. Distinct from the original header-coverage fix; on main, not Server 20260903.
Cross-pool conditional PUT #207, 5e7d60308 Evaluates write conditions against the current logical object under the shared pool lock; a stale pool copy must not authorize an overwrite. On main, not Server 20260903; see multi-pool consistency.

Attribution of this ledger

This page is maintained from the ledger previously carried in the repository at docs/security/advisories.md, updated through verified main f99ed829b5eba (2026-09-16). Release status statements are calibrated against the component matrix; each fix’s investigation, review, and verification detail lives in the linked chronicle article or release note.