MEDIUMCVSS v3.1 5.6Vulnerability

CVE-2026-113652

## Summary When uploadfs is configured with the Azure backend and `sas: true` (a supported configuration introduced in uploadfs 1.25.0), `createContainer()` builds the `BlobServiceClient` from a URL that embeds the full SAS query string, and Azure SDK v12 derived clients inherit that query string. As a result, `getUrl()` returns a base URL carrying the complete account/container SAS signature (`?sv=...&sig=...`), and Apostrophe's `attachment.url()` prepends it to every public attachment link — broadcasting a container-level SAS credential (commonly `sp=rwdlac`, full read/write/delete/list) to every site visitor, including anonymous ones. Anyone who can see an attachment URL can read, overwrite, delete, and list every blob in the container for the SAS lifetime. A companion functional bug (blob path appended after the query string, producing broken URLs) shows this code path was never exercised end to end. Shared-key mode (default) and non-Azure backends are not affected. Verified at commit `5a3746aaed49761e171c2cbfe793267c959829fd` (uploadfs 1.27.0 in the apostrophe monorepo). ## Details Root cause: a credential-bearing client URL is reused as the public base URL. The chain: - Credential-embedded client: [azure.js#L123-L125](https://github.com/apostrophecms/apostrophe/blob/5a3746aaed49761e171c2cbfe793267c959829fd/packages/uploadfs/lib/storage/azure.js#L123-L125) — `new BlobServiceClient("https://<account>.blob.core.windows.net?<SAS query string>")` where `cluster.key` is the full SAS string including `sig` - Leak point: [azure.js#L513-L520](https://github.com/apostrophecms/apostrophe/blob/5a3746aaed49761e171c2cbfe793267c959829fd/packages/uploadfs/lib/storage/azure.js#L513-L520) — `getUrl()` takes `getContainerClient(...).getBlobClient('').url` as `baseUrl`; SDK v12 derived clients inherit the SAS query string, so `baseUrl` already contains `?sv=...&sig=...` - Public exposure: [attachment/index.js#L694](https://github.com/apostrophecms/apostrophe/blob/5a3746aaed4

Properties

Severity
medium
Summary
ApostropheCMS uploadfs Azure backend leaks account-level SAS token into every public attachment URL (sas: true)
Nvd fetched at
2026-10-20T21:14:08.448323+00:00
Cvss severity
MEDIUM
Cvss score
5.6
Retrieved at
2026-10-21T01:23:59+00:00
Ghsa published
2026-10-20T18:20:35Z
Source url
https://github.com/advisories/GHSA-hhph-8536-gfq5
Ghsa updated
2026-10-20T18:20:36Z
Ghsa id
GHSA-hhph-8536-gfq5
Last source
GitHub Advisory Database
Score
5.6
Cvss version
3.1
Cve id
CVE-2026-113652
Cvss vector
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:L/A:L
First seen by Signal
2026-10-20T21:15:35+00:00
Is ghsa only
false
Vector
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:L/A:L
Published at
2026-10-20T17:17:36.080
Last modified
2026-10-20T19:53:10.247

Related Entities (4)

AFFECTS (1)

→[Software]npm/uploadfs

VULNERABLE_TO (1)

←[Software]npm/uploadfs

Explore deeper with Ninja Signal's threat intelligence graph

CVE-2026-113652 (CVSS v3.1 5.6) — Ninja Signal Threat Intelligence | Ninja Signal