Deno의 보안 모델이 마음에 들지 않는 이유 (2024)

1 day ago 4

Deno의 권한 시스템은 표준 라이브러리 접근을 제한하지만 프로세스 자체를 샌드박스화하지 않아, 신뢰할 수 없는 코드를 안전하게 실행한다는 잘못된 안도감을 줄 수 있음 런타임 권한 프롬프트가 공격자 코드도 제어할 수 있는 터미널을 사용하므로, 화면을 조작하거나 승인 입력을 유도하는 공격에 노출됨 --allow-run=명령어 는 실행 파일의 정체성과 실행 환경까지 제한하지 못하며, PATH나 프로그램 설정용 환경 변수를 통해 의도하지 않은 코드를 실행할 수 있음 특정 환경 변수를 차단하는 개별 패치만으로는 충분하지 않으며, 외부 프로그램까지 실행한다면 JavaScript뿐 아니라 모든 실행 코드를 샌드박스화해야 함 권한 없는 비대화형 실행과 별도 자원 제한으로 안전하게 사용할 가능성은 있지만, 권한 조합의 위험을 사용자가 판단하기보다 bwrap 같은 실제 샌드박스를 사용할 것을 권고함 Deno의 권한 시스템이 제한하는 범위 Deno는 표준 라이브러리, 패키지 관리자, TypeScript 변환기 등을 갖춘 JavaScript 런타임이며, JavaScript 해석과 컴파일에는 V8을 사용함 “Secure by default” 기능인 권한 시스템은 JavaScript 코드가 외부 세계에 접근할 때 사용하는 표준 라이브러리 호출을 허용하거나 차단함 deno run --allow-read=/tmp/dir --allow-run=uname code.ts는 표준 라이브러리를 통한 /tmp/dir 읽기와 uname 실행을 허용함 실행 중에도 Deno.permissions.request()로 권한을 요청할 수 있으며, 터미널에서 사용자가 승인하거나 거절함 필요할 때 권한을 요청하는 방식 자체는 유용함 브라우저 확장 프로그램이 임의의 웹사이트에 접근할 가능성만 있어도 모든 웹사이트에 대한 실제 접근 권한을 요청해야 하는 방식과 대비됨 공격자가 제어하는 터미널에서 승인을 받는 문제 권한 프롬프트는 별도의 PolKit GUI 창이 아니라 터미널 출력과 입력을 사용함 터미널은 프로그램이 출력한 제어 명령을 해석하고, 요청에 대한 응답을 입력으로 돌려주는 구조임 Deno 프로그램은 별도 권한이나 필터링 없이 표준 출력에 임의 데이터를 쓰고 표준 입력을 읽을 수 있음 악성 코드가 터미널을 조작한 뒤 같은 터미널에서 보안상 중요한 승인을 받으면, 사용자가 보는 화면과 실제 승인 대상이 달라질 수 있음 터미널 색상을 바꿔 프롬프트를 숨기는 문제...

Read Entire Article




피플앤툴즈 네트워크
🛍 샵