Third-party blocks can be generated without transferring the whole token to the third-party authority. Instead, a ThirdPartyBlock
request can be sent, providing only the necessary info to generate a third-party block and to sign it:
A third-part block request forged by a malicious user can trick the third-party authority into generating datalog trusting the wrong keypair.
Consider the following example (nominal case)
A
emits the following token: check if thirdparty("b") trusting ${pubkeyB}
B
B
generates the following third-party block thirdparty("b"); check if thirdparty("c") trusting ${pubkeyC}
C
to be able to use the tokenNow, with a malicious user:
- Authority A
emits the following token: check if thirdparty("b") trusting ${pubkeyB}
- The holder then attenuates the token with the following third party block thirdparty("c")
, signed with a keypair pubkeyD, privkeyD)
they generate
- The holder then generates a third-party block request based on this token, but alter the ThirdPartyBlockRequest
publicKeys
field and replace pubkeyD
with pubkeyC
- Third-party B
generates the following third-party block thirdparty("b"); check if thirdparty("c") trusting ${pubkeyC}
- Due to the altered symbol table, the actual meaning of the block is thirdparty("b"); check if thirdparty("c") trusting ${pubkeyD}
- The attacker can now use the token without obtaining a third-party block from C
.
Tokens with third-party blocks containing trusted
annotations generated through a third party block request
{ "nvd_published_at": "2024-08-01T22:15:28Z", "cwe_ids": [ "CWE-269" ], "severity": "LOW", "github_reviewed": true, "github_reviewed_at": "2024-07-31T21:15:41Z" }