Flare Zero day Research

Private File IDOR via raw/direct endpoints

GHSA : https://github.com/FlintSH/Flare/security/advisories/GHSA-gwqr-xf5c-5569

CVE : CVE-2026-30231

Summary

The raw and direct file routes only block unauthenticated users from accessing private files. Any authenticated, non‑owner user who knows the file URL can retrieve the content, which is inconsistent with stricter checks used by other endpoints

ezgif-80eb9d3b19d68298.gif

Evidence (Code References)

Impact

Expected vs Actual

Minimal Logic Reproduction (non‑network)

This demonstrates the misclassification using the same predicates.

type Session = { user?: { id: string; role?: 'ADMIN' | 'USER' } } | null

function rawIsPrivate(visibility: 'PUBLIC' | 'PRIVATE', session: Session) {
  return visibility === 'PRIVATE' && !session?.user
}

function directIsPrivate(visibility: 'PUBLIC' | 'PRIVATE', session: Session) {
  return visibility === 'PRIVATE' && !session?.user
}

// Setup: private file owned by A; authenticated B session
const fileVisibility = 'PRIVATE' as const
const sessionB: Session = { user: { id: 'user-B', role: 'USER' } }

// Current behavior in raw/direct:
rawIsPrivate(fileVisibility, sessionB)     // false → grants access
directIsPrivate(fileVisibility, sessionB)  // false → grants access

// Expected: deny unless owner or admin
function expectedIsPrivate(
  visibility: 'PUBLIC' | 'PRIVATE',
  session: Session,
  ownerId: string
) {
  const isOwner = session?.user?.id === ownerId
  const isAdmin = session?.user?.role === 'ADMIN'
  return visibility === 'PRIVATE' && !isOwner && !isAdmin
}

Affected Components

Remediation

Align raw/direct with download/thumbnail:

const isOwner = session?.user?.id === file.userId
const isAdmin = session?.user?.role === 'ADMIN'
const isPrivate = file.visibility === 'PRIVATE' && !isOwner && !isAdmin

if (isPrivate) {
  return new Response(null, { status: 404 }) // or 403
}

Consider centralizing access checks in a shared utility to ensure consistency across endpoints.

Verification Checklist

Password‑Protected Thumbnail Bypass

GHSA : https://github.com/FlintSH/Flare/security/advisories/GHSA-3x7v-x3r6-mjh7

CVE : CVE-2026-30230

Summary

The thumbnail endpoint does not validate the password for password‑protected files. It checks ownership/admin for private files but skips password verification, allowing thumbnail access without the password.

Affected Component

Evidence (Code References)

Video POC

Impact

Expected vs Actual

Reproduction Checklist

Consider aligning thumbnail checks with the download/raw endpoints for consistent behavior.

Verification Checklist