Specyfikacja Biscuit w wersji 1 zawiera podatny algorytm Γ-podpisów (gamma signatures), który umożliwia atakującemu sfałszowanie poprawnych tokenów uwierzytelniających. Podatność jest krytyczna, ponieważ pozwala na uzyskanie dowolnego poziomu dostępu bez posiadania prawidłowych poświadczeń.
▸ Pokaż oryginał (EN)
Biscuit is an authentication and authorization token for microservices architectures. The Biscuit specification version 1 contains a vulnerable algorithm that allows malicious actors to forge valid Γ-signatures. Such an attack would allow an attacker to create a token with any access level. The version 2 of the specification mandates a different algorithm than gamma signatures and as such is not affected by this vulnerability. The Biscuit implementations in Rust, Haskell, Go, Java and Javascript all have published versions following the v2 specification. There are no known workarounds for this issue.
Implementacje biblioteki Biscuit oparte na specyfikacji v1 stosują algorytm Γ-podpisów (gamma signatures), który zawiera kryptograficzną słabość opisaną w literaturze akademickiej. Atakujący może wykorzystać ten błąd (CWE-347: Improper Verification of Cryptographic Signature) do wygenerowania tokenu, którego podpis zostanie uznany za poprawny przez serwer weryfikujący. W efekcie możliwe jest skonstruowanie tokenu przyznającego dowolne uprawnienia bez znajomości klucza prywatnego. Specyfikacja v2 zastępuje ten algorytm innym, który nie jest podatny na ten atak.
Atakujący może sfałszować token uwierzytelniający z dowolnym poziomem dostępu, co prowadzi do całkowitego obejścia mechanizmów uwierzytelniania i autoryzacji w infrastrukturze mikroserwisów korzystającej z biblioteki Biscuit.
Należy zaktualizować używane biblioteki Biscuit do wersji zgodnych ze specyfikacją v2, które są dostępne dla wszystkich wymienionych implementacji (Rust, Haskell, Go, Java, JavaScript). Nie istnieją znane obejścia (workarounds) dla tej podatności — migracja do specyfikacji v2 jest jedynym skutecznym środkiem zaradczym. Szczegóły dostępne w referencjach producenta.
Biscuitsec Biscuit-Auth, Biscuitsec Biscuit-Go, Biscuitsec Biscuit-Haskell oraz Clever-Cloud Biscuit-Java — wszystkie implementacje oparte na specyfikacji Biscuit w wersji 1. Implementacje w językach Rust, Haskell, Go, Java i JavaScript zgodne ze specyfikacją v2 nie są podatne.
Podatność jest zakorzeniona w kryptograficznej słabości algorytmu Γ-podpisów opisanej w pracy akademickiej dostępnej pod adresem https://eprint.iacr.org/2020/1484. Atak wymaga jedynie dostępu sieciowego bez uwierzytelnienia (AV:N/AC:L/PR:N/UI:N), co potwierdza wysoki poziom zagrożenia.
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:HBiscuitsec Biscuit Auth
APPBiscuitsec1.0.0 – 1.1.0Biscuitsec Biscuit Go
APPBiscuitsec< 2.0.0Biscuitsec Biscuit Haskell
APPBiscuitsec0.1.1.0Clever Cloud Biscuit Java
APPClever-Cloud< 2.0.0