From 96f485bf722ada37c787f8be239d3c86aa897cc5 Mon Sep 17 00:00:00 2001 From: "advisory-database[bot]" <45398580+advisory-database[bot]@users.noreply.github.com> Date: Wed, 31 Jul 2024 21:17:28 +0000 Subject: [PATCH] Publish GHSA-p9w4-585h-g3c7 --- .../GHSA-p9w4-585h-g3c7.json | 61 +++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 advisories/github-reviewed/2024/07/GHSA-p9w4-585h-g3c7/GHSA-p9w4-585h-g3c7.json diff --git a/advisories/github-reviewed/2024/07/GHSA-p9w4-585h-g3c7/GHSA-p9w4-585h-g3c7.json b/advisories/github-reviewed/2024/07/GHSA-p9w4-585h-g3c7/GHSA-p9w4-585h-g3c7.json new file mode 100644 index 00000000000..1c4b2411c6c --- /dev/null +++ b/advisories/github-reviewed/2024/07/GHSA-p9w4-585h-g3c7/GHSA-p9w4-585h-g3c7.json @@ -0,0 +1,61 @@ +{ + "schema_version": "1.4.0", + "id": "GHSA-p9w4-585h-g3c7", + "modified": "2024-07-31T21:15:41Z", + "published": "2024-07-31T21:15:41Z", + "aliases": [ + "CVE-2024-41949" + ], + "summary": "biscuit-auth vulnerable to public key confusion in third party block", + "details": "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", + "severity": [ + { + "type": "CVSS_V3", + "score": "CVSS:3.1/AV:N/AC:H/PR:H/UI:N/S:C/C:N/I:L/A:N" + }, + { + "type": "CVSS_V4", + "score": "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" + } + ], + "affected": [ + { + "package": { + "ecosystem": "crates.io", + "name": "biscuit-auth" + }, + "ranges": [ + { + "type": "ECOSYSTEM", + "events": [ + { + "introduced": "4.0.0" + }, + { + "fixed": "5.0.0" + } + ] + } + ] + } + ], + "references": [ + { + "type": "WEB", + "url": "https://github.com/biscuit-auth/biscuit-rust/security/advisories/GHSA-p9w4-585h-g3c7" + }, + { + "type": "PACKAGE", + "url": "https://github.com/biscuit-auth/biscuit-rust" + } + ], + "database_specific": { + "cwe_ids": [ + "CWE-269" + ], + "severity": "LOW", + "github_reviewed": true, + "github_reviewed_at": "2024-07-31T21:15:41Z", + "nvd_published_at": null + } +} \ No newline at end of file