Publisher verification

Check V1 · provenance family · automatic · one of the 17 VS Code Marketplace checks

The question this check asks: has the publisher behind this extension proven control of a domain to the Marketplace? Not whether the publisher is "verified" in the loose sense — every listing carries that flag — but whether Microsoft has confirmed a DNS TXT record that ties the publisher id to a domain somebody answers for.

Why it matters

A Marketplace publisher id costs a sign-in. That is the whole of the provenance most extensions arrive with, and it is what every named campaign on the Marketplace looked like at launch: a publisher nobody had heard of, a listing hours or days old, nothing tying either to a person or an organisation. Secure Annex's Ransomvibing write-up of 5 November 2025 is the plainest example — suspublisher18.susvsex, description "Just testing", contact address at example.com, uploaded that day and removed by Microsoft the next. A publisher created that morning, with no verified domain, no source and code that runs on activation, is V1, V2, V5 and V7 all firing on a listing hours old. The GlassWorm v2 sleeper clones Socket described on 25 April 2026 had the same start: publishers created at the beginning of April 2026 from GitHub accounts with one or two public repositories. Those clones were on Open VSX, which this roster does not assess, but the shape is the same and it is the shape V1 is weighted for.

Domain verification is the one provenance attestation the Marketplace offers that costs an attacker more than a sign-up: a domain, a DNS record, and Microsoft's check of it. That is a low bar. It is still the only bar the listing itself carries, which is why the check exists and why it is graded rather than absolute.

How RepoGates scores it

V1 reads one field of the gallery record, publisher.isDomainVerified — the blue check beside the publisher's name on the Marketplace page. It does not read flags: that field says verified on every one of the 200 most-installed extensions and distinguishes nothing. When the field is false the finding is vsx-publisher-unverified, and the severity depends on how long the listing has existed. On a listing published fewer than 90 days ago (vsx_established_days) it is HIGH and costs 15 points; on an established listing it is INFO — a note on the report, no points. The scoring table's evidence note:

"V1; HIGH on a listing under 90 days — nothing ties a new unverified publisher to anyone; a note on an established one (79 of the top-200 are not domain-verified, measured 2026-09-18)"

The verdict engine is the one behind all 17 Marketplace checks: any CRITICAL finding is a BLOCK, any HIGH or MEDIUM finding is a REVIEW, and a report with nothing above INFO is a PASS. The score is separate — 100 minus every fired penalty, floored at zero, green at 80 and above, amber from 50 to 79, red below 50. A new listing with V1 and nothing else fired therefore scores 85, green, with a REVIEW verdict: a warning, and on the preflight an ask before code --install-extension runs. V1 also feeds the Clone dimension alongside V2–V5, V10 and V11; a dimension takes the worst of its checks and reads PASS only when every one of them ran.

False positives we know about

The grading exists because the measurement demanded it. In the 18 September 2026 measurement of the 100 most-installed extensions, run locally through the same code as /v1/vsx/score, V1 fired as a note on 36 of the 100 — 64 publishers are domain-verified, 36 are not — and on 79 of the 200 that make up the reference list. Those 36 include PKief (Material Icon Theme), formulahendry, aaron-bond and ritwickdey: individual developers whose extensions have been installed tens of millions of times and who never bought a domain for the purpose. Weighted HIGH regardless of age, V1 alone would have turned a third of the most-used extensions in the world into REVIEW. As shipped, none of the 36 notes moved a verdict; the run's single REVIEW came from V5 on abusaidm.html-snippets, where the missing domain was one of two things missing.

Where the cost does land is a genuinely new extension from a developer without a domain: for its first 90 days it is REVIEW on this check alone. That is the price of weighting the campaign shape, and it is stated here rather than hidden. The check reads the current state of the record, so a publisher who verifies a domain after publishing clears it the day Microsoft confirms the record.

What this check does not cover

A verified domain proves control of a domain. It does not prove intent, identity or competence: a domain registered this morning verifies in minutes, and nothing in the record says how long the publisher has owned it. Nor does the field say anything about what the package does. The two AI extensions Koi Security named MaliciousCorgi in January 2026 — 1,340,869 and 151,751 installs, as quoted from Koi by The Hacker News and BleepingComputer — were functioning, popular listings whose exfiltration lived in the bundle, where no listing check looks; the metadata tier would not have flagged them, and this page says so plainly. A compromised publisher passes by construction: in the original GlassWorm wave of October 2025 stolen publisher tokens were used to push malicious versions through existing publishers on Open VSX, and the Eclipse Foundation's 27 October 2025 update records publisher tokens being revoked in response — the publishers themselves were exactly who they had always been.

RepoGates assesses a Marketplace extension on request — through the API, the MCP server (platform="vsx") and the preflight for code --install-extension. It does not see an extension installed from the editor's own UI, or one that auto-updates; the board on marketplace pages is not built yet; Open VSX (where VSCodium, Cursor and Windsurf install from) is a different registry and is not assessed. The extension's code bundle is not read on this tier: a PASS means the provenance and the declared surface are clean, never that the JavaScript was inspected.

Check it yourself

Without any tool: open the extension's page on marketplace.visualstudio.com and look beside the publisher's name. A domain-verified publisher shows a blue check, and the domain it verified is named there; an unverified one shows nothing. The gallery API says the same thing in one field. It is the endpoint VS Code itself uses — a POST, undocumented, no token:

curl -s -X POST https://marketplace.visualstudio.com/_apis/public/gallery/extensionquery \
  -H 'Accept: application/json;api-version=3.0-preview.1' \
  -H 'Content-Type: application/json' \
  -d '{"filters":[{"criteria":[{"filterType":7,"value":"PUBLISHER.EXTENSION"}]}],"flags":914}' \
  | jq '.results[0].extensions[0].publisher | {publisherName, isDomainVerified, flags}'

Read isDomainVerified and ignore flags. Then put the answer next to the listing's own age (V2) and whether it declares a source repository (V5): unverified and established is ordinary; unverified, new and sourceless is the shape this page opened with.

Questions

Is an unverified publisher a red flag? Not on its own. In the 18 September 2026 measurement of the 100 most-installed extensions, 36 come from publishers with no verified domain — Material Icon Theme's PKief, formulahendry, aaron-bond and ritwickdey among them — so on an established listing V1 is a note with no points. It costs 15 points, HIGH, only on a listing under 90 days old, where a publisher nobody can tie to anything is the shape every named campaign had at launch.

What is the difference between verified and domain-verified? The gallery record carries a publisher flags field that reads verified on every one of the 200 most-installed extensions; it is not the signal. The blue check on the Marketplace page is isDomainVerified — a DNS TXT record on a domain the publisher controls, confirmed by Microsoft. V1 reads that field and nothing else.

Does a verified domain make the extension trustworthy? No. It proves control of a domain, not intent — a domain bought this morning verifies in minutes. It also says nothing about what the package does: the code bundle is not read on this tier, and the two AI extensions Koi Security named MaliciousCorgi in January 2026 were functioning, popular listings whose exfiltration lived in the bundle, where no listing check looks.

Related checks

V2 Extension age — the other half of "new and unverified", and the reason V1 is graded on the listing's age at all · V5 Source repository — what an unverified publisher can still offer, and the check that produced the measurement's one REVIEW · C1 Owner account age — the GitHub analogue: who is behind this, and for how long · H2 Author account age — the same question on the Hugging Face Hub.

Add RepoGates to Chrome Pricing

Numbers on this page: the 18 September 2026 measurement of the 100 most-installed extensions on the Marketplace, and the 200 that make up the reference list; Secure Annex, 5 November 2025; Socket, 25 April 2026; Eclipse Foundation, 27 October 2025; Koi Security's MaliciousCorgi figures as quoted by The Hacker News and BleepingComputer, 23–26 January 2026; weights from the product's scoring table.