Started off by complaining about an enterprise browser security platform blocking my browsing... and ended up discovering something unexpected: its debug console could be brute-forced to bypass certain security controls.
That curiosity pulled me into browser extension security best practices and made me realize beginners need a simple, hands-on way to learn this space.
So I built Damn Vulnerable Chrome Extension (DVCE) in a few hours, shoutout to Codex, as a deliberately vulnerable extension to practice identifying and fixing real-world security issues.
Sure, tools can generate code and even spot bugs, but understanding the flaws is where the real learning happens.
Project repository
What DVCE is
DVCE is a local-only training lab for teaching common Chrome extension vulnerability patterns. It is intentionally insecure so learners can understand how extension vulnerabilities work and how to fix them.
What it teaches
- Unsafe
window.postMessagebridges from web pages into extension logic. - Cross-origin iframe abuse when
event.sourceandevent.originare not validated. - DOM injection from content scripts using unsafe sinks like
innerHTML. - How
web_accessible_resourcescan expose packaged extension data. - Why excessive permissions increase blast radius when another bug exists.
- Insecure storage of secrets in extension storage.
- Remote configuration becoming a command channel.
- HTML injection in privileged extension pages.
- CSP, supply-chain, update, and privacy risks around browser extensions.
How the lab works
The lab models a pattern that appears in real extensions: a local web page sends messages, a content script bridges them into the extension, and a service worker performs privileged actions such as tabs, scripting, storage, or configuration behavior.
DVCE has two modes: vulnerable mode, where unsafe behavior is intentionally allowed, and fixed mode, where basic checks demonstrate mitigation patterns such as sender validation and command allowlisting.
Why I built it
Browser extensions sit in a strange and powerful place: they touch web pages, extension pages, storage, permissions, and sometimes enterprise policy. For a beginner, that can feel abstract until they can see one small flaw become a privileged action.
DVCE makes that learning loop concrete: trigger the bug, observe the impact, switch to fixed mode, and understand which control changed the outcome.