permissions

2 posts

당신의 권한 검사는 거짓말을 하고 있다

능력 기반 보안은 흩어져 있는 역할 검사를 위조할 수 없는 권한 토큰으로 대체합니다. 코드를 읽기 어렵게 만들지 않고 TypeScript에서 이를 구현하는 방법을 소개합니다.

모든 권한 버그는 돌이켜볼 때 똑같이 보인다. 호출 스택 깊숙한 어딘가에 있는 함수가 호출자가 이미 을 검사했을 것이라고 가정한다. 그러나 그렇지 않았다. 또는 새로운 역할이 추가되면, 47개 파일 전체에서 를 grep하며 하나라도 놓치지 않았는지 바라며 뒤진다. 능력 기반 보안은…

만약 모든 함수가 권한을 가정하지 않고 명시적으로 전달받아야 한다면?

대부분의 코드는 주변 권한(ambient authority) 하에서 실행된다: 모든 함수가 모든 것에 접근할 수 있다. 기능 기반 보안(capability-based security)은 함수가 명시적이고 범위가 제한된 권한을 전달받도록 강제함으로써 이 모델을 뒤집는다.

함수는 같은 프로세스 안에 존재한다는 이유만으로 데이터베이스, 결제 게이트웨이, 감사 로그에 모두 접근할 수 있다. 공격자가 하나의 HTTP 핸들러에서 인젝션 버그를 발견하면, 그 모든 권한을 그대로 물려받는다. 이 함수는 이런 권한을 요청한 적 없다. 단지 배치된 위치 덕분에 마치…