Human
Machine
REPRO-2026-00105 HIGH RCE
Verified
Fabric.js: Stored XSS via SVG Export
fabric (npm) Feb 19, 2026
What's the vulnerability?
loadFromJSON() (src/canvas/StaticCanvas.ts:1229) calls enlivenObjects() which calls _fromObject() (src/shapes/Object/Object.ts:1902). _fromObject passes all deserialized properties to the shape constructor via new this(enlivedObjectOptions). The constructor ultimately calls _setOptions() (src/CommonMethods.ts:9) which iterates over every property and assigns it to the object via this.set(prop, options[prop]). There is no allowlist or sanitization - any property in the JSON, including id, is set verbatim on the fabric object.
Root Cause Analysis
One Command
Verify with pruva-verify
Run the Pruva CLI to automatically fetch and execute the reproduction script.
pruva-verify REPRO-2026-00105 or
pruva-verify GHSA-hfvx-25r5-qc3w or
pruva-verify CVE-2026-27013 Install:
curl -fsSL https://pruva.dev/install.sh | sh Or Run Manually
1
Download the script
curl -O https://pruva.dev/api/v1/reproductions/REPRO-2026-00105/artifacts/repro/reproduction_steps.sh 2
Make executable
chmod +x reproduction_steps.sh 3
Run the script
./reproduction_steps.sh Run in a VM, container, or disposable environment. This exploits a real vulnerability.
How Pruva Reproduced This
Watch the AI agent's step-by-step process.
Loading session...
Artifacts
repro/rca_report.md6.6 KBrepro/reproduction_steps.sh2.4 KBbundle/ticket.md6.1 KBbundle/source.json8.3 KBbundle/ticket.json15.0 KBlogs/variant_run_1.log1.2 KBlogs/variant_vuln_console.log0.5 KBlogs/variant_fixed_console.log0.4 KBlogs/variant-fixed.log5.8 KBlogs/variant-vuln.log5.8 KBlogs/variant_run_2.log1.1 KBlogs/reproduction.log0.6 KB