A detailed breakdown of the 2026 Instructure Canvas breach, where ShinyHunters exploited a stored XSS vulnerability in a free-tier support ticket system to compromise 275 million student records across 8,809 institutions. The attack chain involved a malicious file in a help-desk ticket firing in a Canvas employee's authenticated session, granting cross-tenant API access. A second XSS in the discussion feature then enabled login portal defacement via the platform's own custom themes feature. The post analyzes how a strict nonce-based Content Security Policy could have blocked script execution at each stage, and how CSP reporting would have surfaced the breach days earlier. Actionable guidance is provided for teams to audit their own SaaS stacks for similar untrusted-content-in-privileged-context patterns.

18m read timeFrom scotthelme.ghost.io
Post cover image
Table of contents
A note before we start — what's confirmed and what isn'tHow did the Canvas breach actually happen?How did the support ticket become an XSS vector?How did the second XSS lead to the login portal defacement?What would CSP have actually stopped?Would SRI have helped? And what about CSP reporting?What's the architectural lesson from the Canvas breach?So what should teams do tomorrow?
5 Impressions