Skip to content

[Bug]: Private Azure blob URLs break browser images, downloads and conversation history #16628

Open

Description

@LaurensNiesten261

What happened?

With fileStrategy: azure_blob and anonymous blob access disabled, browser-facing file metadata still contains raw Azure blob URLs. Images and file downloads fail with 409 Public access is not permitted, even when server-side reads work through the authenticated Azure client.

Reopening a conversation can expose the same inaccessible URLs from stored message attachments.

Expected: logged-in users can view and download private Azure files without enabling anonymous storage access, while preserving file ACLs and tenant checks.

Version Information

LibreChat version: v0.8.8
Commit: e8f3be08623663d4ad7f7241e693c94469b63bb0
Branch: v0.8.8
Build date: 2026-10-01 03:28:25 UTC
User agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/154.0.0.0 Safari/537.36 Edg/154.0.0.0

Steps to Reproduce

  1. Configure fileStrategy: azure_blob, valid Azure credentials and AZURE_STORAGE_PUBLIC_ACCESS=false. Disable anonymous blob access on the storage account.
  2. Upload an image and inspect its browser request URL.
  3. Reopen the conversation and try viewing/downloading its attachments.

The browser receives a private https://<account>.blob.core.windows.net/... URL and cannot authenticate to Azure.

Possible fix

Return an authorized browser URL instead of the raw storage URL, including in upload responses, generated artifacts and conversation history. A same-origin download route needs authentication suitable for image/link requests, which cannot attach a bearer header.

Related: #13340, #14955, #13411 and #13245. This report concerns the remaining browser-facing paths in v0.8.8 after authenticated server-side reads.

Activity

  1. added
    🐛 bugSomething isn't working
    🗺️ File Storagecodegraph: the taxonomy area this belongs to (classifier, confidence ≥ 0.9)
    on Oct 1, 2026
  2. mihidumh commented on Oct 2, 2026

    @mihidumh
    Contributor

    This is the browser half of #14955. #14956 is an open PR for the download part of it: getAzureDownloadURL returns a short-lived, read-only SAS URL for a private container, so /api/files/download-url/... stops answering 501 for azure_blob. The server-side read half is already in through #15763.

    The PR does not rewrite the stored image URLs in message history; that part of this report is covered by #13245. It is small and separate from #13245, and it has had no CI run yet. A maintainer approval for the workflow would show whether it still passes on dev.

  3. Vidminas commented on Oct 9, 2026

    @Vidminas

    This is also addressed by the STORAGE_PROXY_FILES feature proposed in #16912.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    🐛 bugSomething isn't working🗺️ File Storagecodegraph: the taxonomy area this belongs to (classifier, confidence ≥ 0.9)🗺️ Platform Securitycodegraph: the taxonomy area this belongs to (classifier, confidence ≥ 0.9)🗺️ Server Corecodegraph: the taxonomy area this belongs to (classifier, confidence ≥ 0.9)

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions