CVE-2024-41949
biscuit-rust vulnerable to public key confusion in third party block
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.
Attack profile
How easy it is to exploit
- Attack vector
- Network
- Complexity
- High
- Privileges needed
- High
- User interaction
- None
What an attacker can affect
- Confidentiality
- None
- Integrity
- Low
- Availability
- None
Exploit likelihood
What each source reports
CVE List Score used
3.0
biscuit-rust vulnerable to public key confusion in third party block
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.
- Record
CVE-2024-41949- CVSS 3.1
- 3.0 Low
CVSS:3.1/AV:N/AC:H/PR:H/UI:N/S:C/C:N/I:L/A:N - Weakness
- CWE-269
- Updated
- 2026-11-02
EUVDEUVD-2024-2393
3.0
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.
- Record
EUVD-2024-2393- CVSS 3.1
- 3.0 Low
CVSS:3.1/AV:N/AC:H/PR:H/UI:N/S:C/C:N/I:L/A:N - Updated
- 2026-11-03
GitHub AdvisoriesGHSA-p9w4-585h-g3c7
2.1
biscuit-auth vulnerable to public key confusion in third party block
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:
- the public key of the previous block (used in the signature)
- 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.
Consider the following example (nominal case)
- Authority
Aemits the following token:check if thirdparty("b") trusting ${pubkeyB} - The well-behaving holder then generates a third-party block request based on the token and sends it to third-party authority
B - Third-party
Bgenerates the following third-party blockthirdparty("b"); check if thirdparty("c") trusting ${pubkeyC} - The token holder now must obtain a third-party block from third party
Cto be able to use the token
Now, with a malicious user:
- Authority
Aemits 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 keypairpubkeyD, privkeyD)they generate - The holder then generates a third-party block request based on this token, but alter the
ThirdPartyBlockRequestpublicKeysfield and replacepubkeyDwithpubkeyC - Third-party
Bgenerates the following third-party blockthirdparty("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.
Impact
Tokens with third-party blocks containing trusted annotations generated through a third party block request
- Record
GHSA-p9w4-585h-g3c7- CVSS 4.0
- 2.1 Low
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 - CVSS 3.1
- 3.0 Low
CVSS:3.1/AV:N/AC:H/PR:H/UI:N/S:C/C:N/I:L/A:N - Weakness
- CWE-269
- Updated
- 2026-11-02
NVD
3.0
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.
- Record
CVE-2024-41949- CVSS 3.1
- 3.0 Low
CVSS:3.1/AV:N/AC:H/PR:H/UI:N/S:C/C:N/I:L/A:N - CVSS 3.1
- 6.4 Medium
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:L/I:L/A:N - Weakness
- CWE-269
- Updated
- 2026-11-02
OSV
3.0
biscuit-rust vulnerable to public key confusion in third party block
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.
- Record
CVE-2024-41949- CVSS 3.1
- 3.0 Low
CVSS:3.1/AV:N/AC:H/PR:H/UI:N/S:C/C:N/I:L/A:N - Weakness
- CWE-269
- Updated
- 2026-11-02
OSVCVE-2024-42350
3.0
Public key confusion in third party block in Biscuit
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.
- Record
CVE-2024-42350- CVSS 3.1
- 3.0 Low
CVSS:3.1/AV:N/AC:H/PR:H/UI:N/S:C/C:N/I:L/A:N - Weakness
- CWE-668
- Updated
- 2026-11-02
OSVGHSA-p9w4-585h-g3c7
2.1
biscuit-auth vulnerable to public key confusion in third party block
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:
- the public key of the previous block (used in the signature)
- 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.
Consider the following example (nominal case)
- Authority
Aemits the following token:check if thirdparty("b") trusting ${pubkeyB} - The well-behaving holder then generates a third-party block request based on the token and sends it to third-party authority
B - Third-party
Bgenerates the following third-party blockthirdparty("b"); check if thirdparty("c") trusting ${pubkeyC} - The token holder now must obtain a third-party block from third party
Cto be able to use the token
Now, with a malicious user:
- Authority
Aemits 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 keypairpubkeyD, privkeyD)they generate - The holder then generates a third-party block request based on this token, but alter the
ThirdPartyBlockRequestpublicKeysfield and replacepubkeyDwithpubkeyC - Third-party
Bgenerates the following third-party blockthirdparty("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.
Impact
Tokens with third-party blocks containing trusted annotations generated through a third party block request
- Record
GHSA-p9w4-585h-g3c7- CVSS 4.0
- 2.1 Low
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 - CVSS 3.1
- 3.0 Low
CVSS:3.1/AV:N/AC:H/PR:H/UI:N/S:C/C:N/I:L/A:N - Weakness
- CWE-269
- Updated
- 2026-11-02
OSVHSEC-2024-0009 No score
Public key confusion in third-party blocks
Public key confusion in third-party blocks
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:
- the public key of the previous block (used in the signature);
- the public keys part of the token symbol table (for public key interning in datalog expressions).
A third-party block request forged by a malicious user can trick the third-party authority into generating datalog trusting the wrong keypair.
- Record
HSEC-2024-0009- Updated
- 2026-11-02
Affected products
Affected packages
| Package | Affected | Fixed |
|---|---|---|
biscuit-authcrates.io |
4.0.0 up to 5.0.0 | 5.0.0 |
biscuit-authcrates.io From an advisory covering 2 CVEs |
4.0.0 up to 5.0.0 | 5.0.0 |
biscuit-haskellHackage From an advisory covering 2 CVEs |
0.3.0.0 up to 0.4.0.0, plus listed versions 0.3.0.1 |
0.4.0.0 |
History
| Recorded | Changed | Sources |
|---|---|---|
| affected, facts | ||
| aliases | EUVD | |
| first indexed | CVE List, GitHub Advisories, NVD, OSV |
Dates are when Every CVE recorded each change. Upstream dates may differ.
In short
CVE-2024-41949 is a low vulnerability (CVSS 3.0) in Biscuit-auth Biscuit-rust, published July 31, 2024. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 0.24%, the 14th percentile. Fixed in biscuit-auth 5.0.0.
References
github.com/biscuit-auth/biscuit-rust/security/advisories/GHSA-p9w4-585h-g3c7
nvd.nist.gov/vuln/detail/CVE-2024-41949
github.com/biscuit-auth/biscuit/security/advisories/GHSA-rgqv-mwc3-c78m
github.com/advisories/GHSA-p9w4-585h-g3c7
github.com/CVEProject/cvelistV5/tree/main/cves/2024/41xxx/CVE-2024-41949.json
github.com/CVEProject/cvelistV5/tree/main/cves/2024/42xxx/CVE-2024-42350.json