RustFS — это распределенная система хранения объектов, построенная на Rust. До версии 1.0.0-beta.12 RustFS оценивает квалификаторы ForAllValues: и ForAnyValue: set с помощью отрицательных строковых операторов StringNotEquals, StringNotEqualsIgnoreCase, StringNotLike, ArnNotEquals и ArnNotLike, используя семантику друг друга, поскольку crates/policy/src/policy/function/string.rs отрицает совокупный результат после eval или eval_like вместо отрицания каждого предиката значения запроса перед количественной оценкой. Таким образом, частичное перекрытие наборов значений политики и запроса может привести к тому, что условие «Разрешить» предоставит доступ к исключенному участнику или привести к сбою ограждения «Запретить», включая политики, основанные на jwt:groups и jwt:roles; отсутствующие ключи также получают противоположное поведение ForAllValues: и ForAnyValue:.
Эта проблема исправлена в версии 1.0.0-beta.12.
Показать оригинальное описание (EN)
RustFS is a distributed object storage system built in Rust. Prior to 1.0.0-beta.12, RustFS evaluates the ForAllValues: and ForAnyValue: set qualifiers with the negated string operators StringNotEquals, StringNotEqualsIgnoreCase, StringNotLike, ArnNotEquals, and ArnNotLike using each other's semantics because crates/policy/src/policy/function/string.rs negates the aggregate result after eval or eval_like instead of negating each request-value predicate before quantification. Partially overlapping policy and request value sets can therefore make an Allow condition grant access to an excluded principal or make a Deny guardrail fail, including policies based on jwt:groups and jwt:roles; absent keys also receive the opposite ForAllValues: and ForAnyValue: behavior. This issue is fixed in version 1.0.0-beta.12.
Характеристики атаки
Последствия
Строка CVSS v3.1