Budibase arbitrary file read via PWA ZIP symlink upload
CVE-2026-54352 is an arbitrary file-read vulnerability in Budibase affecting versions prior to 3.39.9. In the PWA asset upload workflow, POST /api/pwa/process-zip accepts a builder-supplied ZIP archive, extracts it with extract-zip@2.0.1 into a temporary directory, and then processes icon paths listed in icons.json. The validation logic in packages/server/src/api/controllers/static/index.ts resolves the supplied icon path against baseDir with path.resolve, checks that the resulting string begins with baseDir + path.sep, and uses fs.existsSync(resolvedSrc) to verify existence. However, symbolic-link entries are not rejected, and both fs.existsSync and the later file open operation follow symlinks. Because extract-zip@2.0.1 preserves absolute symlink targets, an attacker can upload a crafted ZIP containing a symlinked icon entry pointing to an arbitrary server-readable file. When Budibase later opens the validated path in packages/backend-core/src/objectStore/objectStore.ts using (await fsp.open(path)).createReadStream(), it reads the symlink target and streams the file into MinIO. The stored object is then retrievable through GET /api/assets/{appId}/pwa/{uuid}.png, disclosing the target file contents verbatim.
Are you exposed to this one?
Mallory correlates every CVE against your assets, your vendors, and active adversary campaigns. Know which vulnerabilities matter for you, not just which ones are loud.
Impact, mitigation & remediation
What it means. What to do now. Patch path, mitigations, and the assume-compromise checklist.
Impact
What an attacker gets, and what they’ve been doing with it.
Mitigation
If you can’t patch tonight, do this now.
/api/pwa/process-zip functionality for workspace builders, reject ZIP archives containing symlink entries, sanitize and revalidate extracted paths using symlink-aware checks, and disable symlink following where possible during file validation and open operations. Additionally, run the Budibase server with least privilege and isolate sensitive files from the application runtime so that even successful file reads expose minimal data.Remediation
Patch, then assume compromise.
Exploits
No public exploits tracked yet. Mallory keeps watching.
No public exploit code observed for this vulnerability.
Affected products & vendors
Products and vendors Mallory has correlated with this vulnerability. Open in Mallory to drill down to specific CPE configurations and version ranges.
Vendor-confirmed product mapping. Mallory continuously reconciles this list against your asset inventory.
Recent activity
9 sources tracked across advisories, community write-ups, and news. New activity surfaces here as Mallory finds it.
The version that knows your environment.
Query your assets running an affected version, and investigate the blast radius.
Every observed campaign linking this CVE to a named adversary.
Malware families riding this exploit, with evidence and IOCs.
YARA, Sigma, Snort, and vendor rules, auto-deployed to your SIEM.
Cross-references every affected SKU, including bundled OEM variants.
Community discussion across Reddit, Mastodon, and other social sources.