capability-based-security

6 posts

Ваши зависимости могут читать переменные окружения. JavaScript им позволяет.

Ambient Authority означает, что любой код в вашем процессе Node.js может взаимодействовать с файловой системой, сетью и окружением. Вот как убрать это с помощью lockdown, compartments и явной передачи capabilities.

Одна скомпрометированная транзитивная зависимость может эксфильтровать ваш , записать данные в вашу файловую систему и открыть исходящие соединения. Ей не…

Близость в сети — это не идентичность: как сервисы аутентифицируются без окружающего полномочия

Большая часть доверия между сервисами основана на сетевом расположении, а не на криптографическом доказательстве. Вот как возможности, mTLS и SPIFFE позволяют сервисам аутентифицироваться без окружающего полномочия, и почему это сложнее, чем должно быть.

Ваши микросервисы используют общую VPC, поэтому доверяют друг другу. Это доверие — окружающее полномочие: разрешение на вызов сервиса предоставляется не…

Ваши зависимости могут читать любые файлы на диске. cap-std заставляет их запрашивать разрешение.

Стандартная библиотека Rust предоставляет окружающее файловое полномочие каждой зависимости. cap-std заменяет его API на основе полномочий, которые заставляют код доказывать, что у него есть право доступа к пути, прежде чем он откроет его.

Любой crate в дереве ваших зависимостей может открыть , записать в ваш каталог или перечислить каждый файл в вашем проекте. Стандартная библиотека Rust не…

Ваш сервис — невольный пособник: как работают атаки Confused Deputy

Атака Confused Deputy заставляет привилегированный сервис использовать свои полномочия против себя. Вот как злоумышленники эксплуатируют неявное доверие и почему capability-based security — это решение.

У вашего сервиса есть API-ключ к облачному хранилищу. Пользователь отправляет запрос. Ваш сервис добросовестно записывает файл. Файл попадает в бакет…

Ваши проверки прав вам лгут

Безопасность на основе capabilities заменяет разбросанные проверки ролей на неподделываемые токены полномочий. Вот как реализовать это в TypeScript, не делая код нечитаемым.

С задним умом любой баг с правами доступа выглядит одинаково. Какая-то функция глубоко в стеке вызовов предполагает, что вызывающая сторона уже проверила . Но…

Что, если каждая функция должна была бы получить разрешение, вместо того чтобы предполагать его?

Большая часть кода работает с окружающей полномочностью: каждая функция может затронуть всё. Безопасность на основе возможностей переворачивает эту модель, заставляя функции получать явные, ограниченные разрешения.

Ваша функция имеет доступ к базе данных, платёжному шлюзу и журналу аудита только потому, что она выполняется в том же процессе. Если злоумышленник находит баг…