{"id":"CVE-2024-42350","aliases":["EUVD-2024-39567","GHSA-47cq-pc2v-3rmp","GHSA-p9w4-585h-g3c7","GHSA-rgqv-mwc3-c78m","HSEC-2024-0009"],"status":"published","title":"Public key confusion in third party block in Biscuit","description":"Biscuit is an authorization token with decentralized verification, offline attenuation and strong security policy enforcement based on a logic language. 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: 1. the public key of the previous block (used in the signature), 2. the public keys part of the token symbol table (for public key interning in datalog expressions). A third-part block request forged by a malicious user can trick the third-party authority into generating datalog trusting the wrong keypair. Tokens with third-party blocks containing `trusted` annotations generated through a third party block request. This has been addressed in version 4 of the specification. Users are advised to update their implementations to conform. There are no known workarounds for this vulnerability.","severity":{"version":"3.1","score":3,"vector":"CVSS:3.1/AV:N/AC:H/PR:H/UI:N/S:C/C:N/I:L/A:N","level":"low","assessor":"cna","from":"cve"},"epss":{"day":"2026-11-10","score":0.00291,"percentile":0.21866,"model":"v2026.06.15"},"facts":{"in_kev":false,"known_exploited":false,"public_exploit":false,"fix_available":false},"cwes":["CWE-269","CWE-668"],"published":"2024-07-31T21:15:41Z","modified":"2026-10-28T02:31:03Z","affected":[{"source":"osv","ecosystem":"crates.io","package":"biscuit-auth","ranges":[{"type":"SEMVER","events":[{"introduced":"4.0.0"},{"fixed":"5.0.0"}]}],"bundled":2},{"source":"osv","ecosystem":"Hackage","package":"biscuit-haskell","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0.3.0.0"},{"fixed":"0.4.0.0"}]}],"versions":["0.3.0.0","0.3.0.1"],"bundled":2}],"products":[{"vendor":"biscuit-auth","product":"biscuit"}],"references":[{"url":"https://github.com/biscuit-auth/biscuit/security/advisories/GHSA-rgqv-mwc3-c78m","tags":["x_refsource_CONFIRM","advisory","web"]},{"url":"https://github.com/biscuit-auth/biscuit/commit/c87cbb5d778964d6574df3e9e6579567cad12fff","tags":["x_refsource_MISC","fix"]},{"url":"https://github.com/CVEProject/cvelistV5/tree/main/cves/2024/41xxx/CVE-2024-41949.json","tags":["advisory"]},{"url":"https://github.com/biscuit-auth/biscuit-rust/security/advisories/GHSA-p9w4-585h-g3c7","tags":["advisory","web"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2024-41949","tags":["advisory"]},{"url":"https://github.com/CVEProject/cvelistV5/tree/main/cves/2024/42xxx/CVE-2024-42350.json","tags":["advisory"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2024-42350","tags":["advisory"]},{"url":"https://github.com/biscuit-auth/biscuit-rust","tags":["package"]},{"url":"https://github.com/biscuit-auth/biscuit-haskell/security/advisories/GHSA-47cq-pc2v-3rmp","tags":["advisory"]},{"url":"https://github.com/biscuit-auth/biscuit-haskell/pull/93","tags":["fix"]}],"sources":{"cve":[{"id":"CVE-2024-42350","title":"Public key confusion in third party block in Biscuit","description":"Biscuit is an authorization token with decentralized verification, offline attenuation and strong security policy enforcement based on a logic language. 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: 1. the public key of the previous block (used in the signature), 2. the public keys part of the token symbol table (for public key interning in datalog expressions). A third-part block request forged by a malicious user can trick the third-party authority into generating datalog trusting the wrong keypair. Tokens with third-party blocks containing `trusted` annotations generated through a third party block request. This has been addressed in version 4 of the specification. Users are advised to update their implementations to conform. There are no known workarounds for this vulnerability.","status":"published","published":"2024-08-05T19:47:44.903Z","modified":"2024-08-05T20:23:35.031Z","cvss":[{"version":"3.1","score":3,"vector":"CVSS:3.1/AV:N/AC:H/PR:H/UI:N/S:C/C:N/I:L/A:N","level":"low","assessor":"cna"}],"cwes":["CWE-668"],"updated_at":"2026-11-02T14:34:03.00063Z"}],"euvd":[{"id":"EUVD-2024-39567","description":"Biscuit is an authorization token with decentralized verification, offline attenuation and strong security policy enforcement based on a logic language. 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: 1. the public key of the previous block (used in the signature), 2. the public keys part of the token symbol table (for public key interning in datalog expressions). A third-part block request forged by a malicious user can trick the third-party authority into generating datalog trusting the wrong keypair. Tokens with third-party blocks containing `trusted` annotations generated through a third party block request. This has been addressed in version 4 of the specification. Users are advised to update their implementations to conform. There are no known workarounds for this vulnerability.","status":"published","published":"2024-08-05T19:47:44Z","modified":"2024-08-05T20:23:35Z","cvss":[{"version":"3.1","score":3,"vector":"CVSS:3.1/AV:N/AC:H/PR:H/UI:N/S:C/C:N/I:L/A:N","level":"low"}],"updated_at":"2026-11-03T02:23:12.50701Z"}],"nvd":[{"id":"CVE-2024-42350","description":"Biscuit is an authorization token with decentralized verification, offline attenuation and strong security policy enforcement based on a logic language. 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: 1. the public key of the previous block (used in the signature), 2. the public keys part of the token symbol table (for public key interning in datalog expressions). A third-part block request forged by a malicious user can trick the third-party authority into generating datalog trusting the wrong keypair. Tokens with third-party blocks containing `trusted` annotations generated through a third party block request. This has been addressed in version 4 of the specification. Users are advised to update their implementations to conform. There are no known workarounds for this vulnerability.","status":"published","published":"2024-08-05T20:15:36.697Z","modified":"2026-06-17T07:49:18.473Z","cvss":[{"version":"3.1","score":3,"vector":"CVSS:3.1/AV:N/AC:H/PR:H/UI:N/S:C/C:N/I:L/A:N","level":"low","assessor":"secondary"}],"cwes":["CWE-668"],"updated_at":"2026-11-02T14:10:17.832118Z"}],"osv":[{"id":"CVE-2024-41949","title":"biscuit-rust vulnerable to public key confusion in third party block","description":"biscuit-rust is the Rust implementation of Biscuit, an authentication and authorization token for microservices architectures. 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, which includes the public key of the previous block (used in the signature) and the public keys part of the token symbol table (for public key interning in datalog expressions). A third-part block request forged by a malicious user can trick the third-party authority into generating datalog trusting the wrong keypair.","status":"published","published":"2024-08-01T22:03:11.198Z","modified":"2026-10-28T02:31:03.189280195Z","cvss":[{"version":"3.1","score":3,"vector":"CVSS:3.1/AV:N/AC:H/PR:H/UI:N/S:C/C:N/I:L/A:N","level":"low"}],"cwes":["CWE-269"],"updated_at":"2026-11-02T15:44:41.963899Z"},{"id":"CVE-2024-42350","title":"Public key confusion in third party block in Biscuit","description":"Biscuit is an authorization token with decentralized verification, offline attenuation and strong security policy enforcement based on a logic language. 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: 1. the public key of the previous block (used in the signature), 2. the public keys part of the token symbol table (for public key interning in datalog expressions). A third-part block request forged by a malicious user can trick the third-party authority into generating datalog trusting the wrong keypair. Tokens with third-party blocks containing `trusted` annotations generated through a third party block request. This has been addressed in version 4 of the specification. Users are advised to update their implementations to conform. There are no known workarounds for this vulnerability.","status":"published","published":"2024-08-05T19:47:44.903Z","modified":"2026-10-28T02:30:34.256757574Z","cvss":[{"version":"3.1","score":3,"vector":"CVSS:3.1/AV:N/AC:H/PR:H/UI:N/S:C/C:N/I:L/A:N","level":"low"}],"cwes":["CWE-668"],"updated_at":"2026-11-02T15:44:42.322107Z"},{"id":"GHSA-p9w4-585h-g3c7","title":"biscuit-auth vulnerable to public key confusion in third party block","description":"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:\n\n- the public key of the previous block (used in the signature)\n- the public keys part of the token symbol table (for public key interning in datalog expressions)\n\nA third-part block request forged by a malicious user can trick the third-party authority into generating datalog trusting the wrong keypair.\n\nConsider the following example (nominal case)\n\n- Authority `A` emits the following token: `check if thirdparty(\"b\") trusting ${pubkeyB}`\n- The well-behaving holder then generates a third-party block request based on the token and sends it to third-party authority `B`\n- Third-party `B` generates the following third-party block `thirdparty(\"b\"); check if thirdparty(\"c\") trusting ${pubkeyC}`\n- The token holder now must obtain a third-party block from third party `C` to be able to use the token\n\nNow, with a malicious user:\n- Authority `A` emits the following token: `check if thirdparty(\"b\") trusting ${pubkeyB}`\n- The holder then attenuates the token with the following third party block `thirdparty(\"c\")`, signed with a keypair `pubkeyD, privkeyD)` they generate\n- The holder then generates a third-party block request based on this token, but alter the `ThirdPartyBlockRequest` `publicKeys` field and replace `pubkeyD` with `pubkeyC`\n- Third-party `B` generates the following third-party block `thirdparty(\"b\"); check if thirdparty(\"c\") trusting ${pubkeyC}`\n- Due to the altered symbol table, the actual meaning of the block is `thirdparty(\"b\"); check if thirdparty(\"c\") trusting ${pubkeyD}`\n- The attacker can now use the token without obtaining a third-party block from `C`.\n\n### Impact\n\nTokens with third-party blocks containing `trusted` annotations generated through a third party block request\n","status":"published","published":"2024-07-31T21:15:41Z","modified":"2025-10-15T13:12:21.549202Z","cvss":[{"version":"3.1","score":3,"vector":"CVSS:3.1/AV:N/AC:H/PR:H/UI:N/S:C/C:N/I:L/A:N","level":"low"},{"version":"4.0","score":2.1,"vector":"CVSS:4.0/AV:N/AC:L/AT:P/PR:H/UI:N/VC:N/VI:L/VA:N/SC:N/SI:L/SA:N","level":"low"}],"cwes":["CWE-269"],"updated_at":"2026-11-02T15:46:52.891208Z"},{"id":"HSEC-2024-0009","title":"Public key confusion in third-party blocks","description":"# Public key confusion in third-party blocks\n\nThird-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:\n\n- the public key of the previous block (used in the signature);\n- the public keys part of the token symbol table (for public key interning in datalog expressions).\n\nA third-party block request forged by a malicious user can trick the third-party authority into generating datalog trusting the wrong keypair.\n","status":"published","published":"2025-11-14T14:45:34Z","modified":"2025-11-14T18:15:43.110342Z","updated_at":"2026-11-02T15:47:17.805107Z"}]}}
