Medium, CVSS 5.4npmPublished
Tina: Broken Access Control: arbitrary bucket-key write/delete in next-tinacms-s3 (and sibling production media adapters)
CVE-2026-59992 · GHSA-8mq9-5fw2-5rm4
- Affected
- npm next-tinacms-cloudinary < 26.0.4
- Fixed in
- 26.0.4· Vendor fix available
- Issue
- The production media handler shipped by next-tinacms-s3 (createMediaHandler in packages/next-tinacms-s3/src/handlers.ts) accepts an attacker-chosen ?key= query parameter and returns an AWS-signed PutObject URL whose Key is that value, with no check that the key falls under the operator's configured mediaRoot. The same handler's DELETE branch reads objectKey = (req.query.media as string[])[1] and dispatches a DeleteObjectCommand for that exact key, again unbounded by mediaRoot. Any caller that passes the operator-supplied authorized() predicate — i.e. any logged-in CMS editor in a typical TinaCloud / self-hosted deployment — therefore has write and delete authority over the entire S3 bucket the IAM key can reach, even though the package documents mediaRoot as the place where editors are scoped. The same shape is present in next-tinacms-dos, next-tinacms-azure, and next-tinacms-cloudinary, so a single design mistake spans every first-party production media backend. Project:…
Recommended action: Upgrade to 26.0.4 or later, then redeploy and verify.A vendor fix does not resolve your finding until you verify it in your own systems.