Skip to content

Add Rendering Methods threat model - #60

Open
msporny wants to merge 9 commits into
mainfrom
add-threat-model
Open

Add Rendering Methods threat model#60
msporny wants to merge 9 commits into
mainfrom
add-threat-model

Conversation

@msporny

@msporny msporny commented Aug 9, 2026

Copy link
Copy Markdown
Member

This PR adds a minimal threat model for the rendering methods specification based on the VC Data Model threat model and the brainstorming that was done over the summer. Only five threats have been added right now to ensure that the group is okay with the base threat model before continuing.


Preview | Diff

Comment on lines +11 to +27
be visual, auditory, tactile, or textual. In the `html` render suite the
template is an HTML fragment that carries its own CSS and JavaScript, and
that code runs in order to render the credential. Both the template code and
the credential values placed in the data block are untrusted input from the
point of view of the software running the [=P3|Render=] process. Template
code, or a credential value it consumes, can attempt to reach the
surrounding [=C2|holder system=] or [=C3|verifier system=], navigate away, or
load and contact external locations, giving hostile content access to the
context in which it renders. Successful verification of the credential's
securing mechanism confirms that the content is authentic, not that it is
safe to render, so hostile content can arrive inside a well-formed, verified
credential. At the level of the data model this threat is a render-time
instance of
<a href="https://www.w3.org/TR/vc-data-model/threat-model/#t2-code-injection-via-credential-content">Code
Injection via Credential Content</a> in the [[[VC-DATA-MODEL-2.0]]] threat
model; the additional concern here is that the render method deliberately
executes template-supplied code as part of rendering.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This threat reads as if it was only on the problems with the html render suite, whereas R2 below also talks about nfc and card. Either R2 is wrongly placed, or there should be a reference to the other render suites in the generic description.

@dlongley dlongley Aug 10, 2026

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hmm, perhaps also worth nothing that while there is a difference between render methods that have code that is meant to be executed and those that are meant to only carry data, it may be possible to smuggle something into the latter that causes some unexpected execution during rendering anyway (but this I think is a separate threat ... or it's "external" to this spec vs. this spec offering different render suites with different properties/risk levels).

Comment on lines +12 to +13
that performs the [=P3|Render=] process. That software can present the
issuer's credential in a way that goes against the issuer's desires, for

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do we want to add "unintentionally" here? Software can always intentionally do whatever it wants, whether or not a render method is present. The threat here, I think, is that without any render method information, software that is trying to do its best can more easily misrepresent the issuer's desires (since the issuer hasn't published them as one or more render methods).

Suggested change
that performs the [=P3|Render=] process. That software can present the
issuer's credential in a way that goes against the issuer's desires, for
that performs the [=P3|Render=] process. That software can unintentionally
present the issuer's credential in a way that goes against the issuer's desires, for

Comment on lines +12 to +16
that performs the [=P3|Render=] process. That software can present the
issuer's credential in a way that goes against the issuer's desires, for
example by using a layout that omits or de-emphasizes important claims,
reorders or relabels fields, drops disclaimers or validity information, or
applies branding that misrepresents the issuer. The person viewing the

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think this better expresses @dlongley's intended adjustment — the presentation is indeed intentional; the fact that it goes against the issuer's desires is the presumed accident ... which took some more wording changes as I read it a few more times.

Suggested change
that performs the [=P3|Render=] process. That software can present the
issuer's credential in a way that goes against the issuer's desires, for
example by using a layout that omits or de-emphasizes important claims,
reorders or relabels fields, drops disclaimers or validity information, or
applies branding that misrepresents the issuer. The person viewing the
that performs the [=P3|Render=] process. That software can introduce data
integrity risks by altering the presentation layer of a credential. If the
client application modifies the layout, it may violate the issuer's security
or schema requirements. Specifically, it can cause payload omission by omitting
or de-emphasizing important claims, schema mutation by reordering or relabeling
fields, metadata deletion by dropping disclaimers or validity information, or
UI spoofing by applying branding that misrepresents the issuer. The person
viewing the

Base automatically changed from rename-json-card to main August 11, 2026 15:37

@longpd longpd left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This looks like a good framework for renderMethod threat modeling. Approve.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants