This release includes 4 security fixes for security teams reviewing exposed deployments.
Topics
+8 more
Affected surfaces
ReleasePort's take
Moderate signalReleasePort Layer 1 v1.5.16 fixes critical TUF security flaws including unverified metadata, snapshot race conditions, and root‑rotation errors.
Why it matters: Addresses three high‑severity (≥80) TUF vulnerabilities that could permit unauthorized updates or bypass verification; operators should upgrade immediately to mitigate risk.
Summary
AI summaryFixed multiple TUF security flaws that allowed unverified metadata, race conditions in snapshot updates, and root rotation errors.
Changes in this release
| Type | Severity | Summary | CVE |
|---|---|---|---|
| Security | Critical |
Fixes snapshot lock key inconsistency that allowed concurrent publish and update to silently discard each other's changes. Fixes snapshot lock key inconsistency that allowed concurrent publish and update to silently discard each other's changes. Source: llm_adapter@2026-06-04 Confidence: high |
— |
| Security | High |
Fixes trusted metadata loaded from S3 without expiration check; expired metadata is now rejected before use. Fixes trusted metadata loaded from S3 without expiration check; expired metadata is now rejected before use. Source: llm_adapter@2026-06-04 Confidence: high |
— |
| Security | High |
Fixes silent verification skip in `PostMetadataSign` targets path; S3/unmarshal failures now surface as errors. Fixes silent verification skip in `PostMetadataSign` targets path; S3/unmarshal failures now surface as errors. Source: llm_adapter@2026-06-04 Confidence: low |
— |
| Security | High |
Makes S3/unmarshal failures in `PostMetadataSign` surface as errors instead of being silently skipped. Makes S3/unmarshal failures in `PostMetadataSign` surface as errors instead of being silently skipped. Source: granite4.1:30b@2026-06-04-audit Confidence: low |
— |
| Security | High |
Improves root rotation staging to correctly distinguish version vs signature errors. Improves root rotation staging to correctly distinguish version vs signature errors. Source: granite4.1:30b@2026-06-04-audit Confidence: low |
— |
| Security | High |
Propagates Redis write errors in `PostMetadataSign` staging paths instead of ignoring them. Propagates Redis write errors in `PostMetadataSign` staging paths instead of ignoring them. Source: granite4.1:30b@2026-06-04-audit Confidence: low |
— |
| Security | High |
Loads trusted root metadata via the library's verified `FromFile` path rather than raw unmarshal. Loads trusted root metadata via the library's verified `FromFile` path rather than raw unmarshal. Source: granite4.1:30b@2026-06-04-audit Confidence: low |
— |
| Feature | Medium |
Validates `appName` to reject characters that could cause Redis key collisions or S3 path injection. Validates `appName` to reject characters that could cause Redis key collisions or S3 path injection. Source: granite4.1:30b@2026-06-04-audit Confidence: low |
— |
| Performance | Low |
Replaces blocking `KEYS` with incremental `SCAN` in `GetMetadataSign` to avoid Redis lockups on large keyspaces. Replaces blocking `KEYS` with incremental `SCAN` in `GetMetadataSign` to avoid Redis lockups on large keyspaces. Source: granite4.1:30b@2026-06-04-audit Confidence: low |
— |
| Deprecation | Low |
Removes dead code: `GetBootstrapLocks`, `bootstrap()`, and `bootstrapFinalize()`. Removes dead code: `GetBootstrapLocks`, `bootstrap()`, and `bootstrapFinalize()`. Source: granite4.1:30b@2026-06-04-audit Confidence: low |
— |
| Bugfix | Medium |
Fixes snapshot `MetaFile` entries omitting hashes; snapshot now includes `sha256` hash and length for all referenced metadata files. Fixes snapshot `MetaFile` entries omitting hashes; snapshot now includes `sha256` hash and length for all referenced metadata files. Source: llm_adapter@2026-06-04 Confidence: high |
— |
| Bugfix | Medium |
Fixes missing root signature verification in the `thresholdReached` targets signing path. Fixes missing root signature verification in the `thresholdReached` targets signing path. Source: llm_adapter@2026-06-04 Confidence: high |
— |
| Bugfix | Medium |
Fixes `RemoveArtifacts` loading root by hardcoded version 1 instead of the latest version. Fixes `RemoveArtifacts` loading root by hardcoded version 1 instead of the latest version. Source: llm_adapter@2026-06-04 Confidence: high |
— |
| Bugfix | Medium |
Fixes MongoDB artifact status updated before TUF operation succeeds; status now written only after a successful commit. Fixes MongoDB artifact status updated before TUF operation succeeds; status now written only after a successful commit. Source: llm_adapter@2026-06-04 Confidence: high |
— |
| Bugfix | Medium |
Fixes `GetConfig` returning only the first custom role expiration due to a loop variable bug. Fixes `GetConfig` returning only the first custom role expiration due to a loop variable bug. Source: llm_adapter@2026-06-04 Confidence: low |
— |
| Bugfix | Medium |
Fixes temporary directories created in `cwd` instead of system temp. Fixes temporary directories created in `cwd` instead of system temp. Source: llm_adapter@2026-06-04 Confidence: low |
— |
| Bugfix | Medium |
Fixes task records stored in Redis with no TTL; now expires appropriately. Fixes task records stored in Redis with no TTL; now expires appropriately. Source: llm_adapter@2026-06-04 Confidence: low |
— |
| Bugfix | Medium |
Fixes `GetConfig` loop and `PutConfig` to respect online/offline mode for targets expiration handling. Fixes `GetConfig` loop and `PutConfig` to respect online/offline mode for targets expiration handling. Source: granite4.1:30b@2026-06-04-audit Confidence: low |
— |
| Bugfix | Low |
Creates temporary directories in system temp rather than the current working directory. Creates temporary directories in system temp rather than the current working directory. Source: granite4.1:30b@2026-06-04-audit Confidence: low |
— |
| Bugfix | Low |
Assigns TTL to task records stored in Redis, preventing indefinite retention. Assigns TTL to task records stored in Redis, preventing indefinite retention. Source: granite4.1:30b@2026-06-04-audit Confidence: low |
— |
| Refactor | Low |
Removes unused `ctx context.Context` parameter from delegation helper functions. Removes unused `ctx context.Context` parameter from delegation helper functions. Source: granite4.1:30b@2026-06-04-audit Confidence: low |
— |
Full changelog
Security (TUF)
- Fixed snapshot lock key inconsistency that allowed concurrent artifact publish and force-online update to race and silently discard each other's snapshot changes.
- Fixed silent verification skip in
PostMetadataSigntargets path: S3/unmarshal failures now surface as errors instead of being swallowed, preventing unverified metadata from advancing. - Fixed trusted metadata loaded from S3 without expiration check; expired metadata is now rejected before use.
- Fixed root rotation staging that used fragile error string matching to detect wrong-version vs bad-signature failures.
- Fixed
PostMetadataSignRedis writes silently ignored on staging paths; errors are now propagated. - Fixed
loadTrustedRootMetadataFromS3using rawjson.Unmarshalinstead of the library'sFromFile; root is now loaded through the verified library path.
Fixes (TUF)
- Fixed snapshot
MetaFileentries omitting hashes; snapshot now includessha256hash and length for all referenced metadata files. - Fixed missing root signature verification in the
thresholdReachedtargets signing path. - Fixed
GetConfigreturning only the first custom role expiration due to a loop variable bug. - Fixed
RemoveArtifactsloading root by hardcoded version 1 instead of the latest version. - Fixed duplicate signing logic in
removeArtifactsFromDelegatedRole. - Fixed MongoDB artifact status updated before TUF operation succeeds; status is now written only after a successful TUF commit.
- Fixed temporary directories created in
cwdinstead of system temp. - Fixed
HelperGetPathForTargetpanicking onos.Getwd()failure; returns error instead. - Fixed task records stored in Redis with no TTL.
- Fixed
CalculateExpirationDayssilently returning 365 on parse failure; returns error instead. - Removed unused
ctx context.Contextparameter from delegation helpers.
Improvements (TUF)
- Added
appNamevalidation to reject characters that could cause Redis key collisions or S3 path injection. - Replaced
KEYSwithSCANinGetMetadataSignto avoid blocking Redis on large keyspaces. - Fixed
GetConfigloop andPutConfigto respect online/offline mode for targets expiration. - Removed dead code:
GetBootstrapLocks,bootstrap(),bootstrapFinalize().
Security Fixes
- Fixed snapshot lock key inconsistency that allowed concurrent artifact publish and force-online update to race and silently discard each other's changes
- Fixed silent verification skip in PostMetadataSign targets path – S3/unmarshal failures now surface as errors
- Fixed trusted metadata loaded from S3 without expiration check – expired metadata is now rejected before use
- Fixed root rotation staging that used fragile error string matching to detect wrong-version vs bad-signature failures
Weekly OSS security release digest.
The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.
No spam, unsubscribe anytime.
Share this release
About FaynoSync
Self-hosted Dynamic Update Server with statistics, supporting multiple updaters. Flexible features for seamless app updates and insights.
Beta — feedback welcome: [email protected]