Security policy¶
Reporting a vulnerability¶
Please do not open a public issue.
Use GitHub's private reporting: Report a vulnerability
That channel is private until an advisory is published, so a working exploit never sits in an open thread while a fix is being written.
Include what you did, what happened, and the smallest repository or template that reproduces it. A fixture is worth more than a description.
Supported versions¶
Nothing is published yet — there are no releases and no tags. Until there are,
the supported version is main.
What this extension does with your workspace¶
The threat this extension has to survive is a repository you opened but do
not trust, which is why package.json declares
untrustedWorkspaces.supported: true. The posture behind that claim:
- Workspace Python and templates are read and parsed, never executed. The parsers are regex and string scanners over source text. Nothing in the workspace is imported, evaluated, or run.
- The one exception is not one.
adapters/script-filtercallsnew vm.Script(code)to syntax-check the JavaScript inside a<script>block. That constructor compiles; it does not run. There is norunInContext,runInNewContext, orevalanywhere in the extension. - No hover marks its markdown trusted. A
command:URI in workspace text therefore cannot become a clickable link.hover/trusted-markdown.test.tsholds that as a contract over the source, and_shared/markdown-escape.tsescapes the text besides — a model name containing an image tag does not become an image request. - The diagram webview allows exactly two command URIs, by name, and its content lives behind a CSP with a per-load nonce.
- Two settings are restricted in an untrusted workspace —
excludePathsandsuppressBuiltinHtmlValidation— so a repository cannot widen what gets scanned, or ask the extension to write to its ownsettings.json, until you trust it. - The only setting this extension ever writes is
html.validate.scripts/.styles, workspace-scoped, only with a workspace open, only when the scan found Django artifacts, and only when you have not opted out. Seeadapters/script-filter/suppression-plan.ts. - Virtual workspaces are declared unsupported, rather than half-working:
the index round-trips paths through
Uri.fsPath, which means nothing off thefilescheme.
If you find a case where one of these statements is false, that is a vulnerability report even if you cannot show an exploit — the claim is the promise.
Out of scope¶
- The bundled
src/test-django-project/is a deliberately messy fixture. ItsSECRET_KEYis a literal placeholder and its models are written to stress the parsers, not to be secure. - Findings that require a user to already trust a workspace and run something in it. Trusting a repository is trusting its code.