
CVE-2021-46398 취약점 악용을 위한 개념 증명(PoC)
이 저장소에서는 docker compose를 통한 CVE-2021-46398 취약점 악용의 개념 증명과 해당 취약점이 정보 시스템에 미치는 영향에 대한 분석을 확인할 수 있습니다.
# Exploit Title: FileBrowser 2.17.2 - Cross Site Request Forgery (CSRF) to Remote Code Execution (RCE)
# Date: 05/02/2022
# Exploit Author: FEBIN MON SAJI
# Vendor Homepage: https://filebrowser.org/
# Software Link: https://github.com/filebrowser/filebrowser
# Version:
FileBrowser <= 2.17.2
# Tested on: Ubuntu 20.04
# CVE : CVE-2021-46398
FileBrowser 웹사이트에 따르면, FileBrowser는 서버에 설치하고 경로를 지정하면 Go 언어로 개발된 멋진 웹 인터페이스를 통해 파일에 접근할 수 있는 인기 있는 '나만의 클라우드' 종류의 소프트웨어입니다. 다양한 기능을 제공하며, Google Drive와 비슷하지만 누구나 자신만의 인스턴스를 소유하고 호스팅할 수 있다는 점이 다릅니다.
FileBrowser의 관리자는 여러 사용자(다른 관리자 권한 사용자 포함)를 생성하고 원하는 디렉토리에 대한 접근 권한을 부여할 수 있습니다. 사용자 생성은 /api/users 엔드포인트에서 처리됩니다. 이 엔드포인트는 사용자 생성을 위해 JSON 형식의 입력을 받지만, Content-Type 헤더가 이어야 하는데 도 허용하여 검증에 실패합니다. 이것이 취약점이 발생하는 지점입니다. 또한, 검증이 없고 방지 토큰도 구현되어 있지 않습니다. 따라서 공격자는 악성 웹페이지 URL을 합법적인 관리자에게 보내는 것만으로 관리자 권한과 홈 디렉토리(또는 공격자가 접근하려는 디렉토리)에 접근할 수 있는 백도어 사용자를 쉽게 생성할 수 있으며, 전체 서버 파일 시스템에 접근할 수 있게 됩니다(자세한 과정은 데모 섹션 참조).
application/jsontext/plainOrigin또한, 관리자는 시스템에서 명령어를 실행할 수 있으므로 이 취약점은 RCE로 이어집니다.
다음은 공격 과정을 요약한 시퀀스 다이어그램입니다(Alice는 해커, Bob은 FileBrowser 인스턴스의 관리자이자 호스트):
sequenceDiagram
Alice (hacker) ->> Alice (hacker): *악의적인 HTML 페이지 생성*
Alice (hacker) ->> Bob (admin): 여기 멋진 페이지가 있어! 꼭 확인해 봐!
Bob (admin) ->> Alice (hacker): 고마워, 한번 열어볼게!
Bob (admin) ->> Bob (admin): *멋진 페이지인 줄 알고 열어봄*
Bob (admin) -->> FileBrowser: *모르는 사이에 사용자 생성 요청 전송*
FileBrowser -->> FileBrowser: *요청된 대로 새로운 관리자 권한 사용자 생성*
Alice (hacker) ->> FileBrowser: 에헤헤 Bob은 정말 순진하네! *백도어 사용자로 FileBrowser에 접속*
FileBrowser ->> Alice (hacker): *생성된 새 사용자로 Alice 연결 수락*
Alice (hacker) ->> FileBrowser: *적절한 버튼으로 FileBrowser에 셸 접근 요청 후 Bob의 컴퓨터에서 시스템 호출 실행*이 데모의 목표는 두/세 대의 머신으로 구성된 소규모 아키텍처를 설정하는 것입니다:
이는 매우 단순화된 아키텍처로, 취약점의 기술적 측면을 강조하기 위한 것입니다.
이 실험을 위해서는 docker만 있으면 됩니다.
이 설정에서 대상 머신은 FileBrowser v2.17.2 이미지(이 취약점에 취약함)를 기반으로 하며, 유일한 FileBrowser 계정은 로그인/비밀번호가 admin/admin인 관리자 계정입니다.
대상 머신 실행:
mkdir srv && docker compose up
공격자 측에서 악성 웹페이지를 통해 FileBrowser API 호출을 실행하고 관리자 컴퓨터에서 백도어 사용자를 생성할 수 있습니다.
이러한 페이지의 예시는 index.html이라는 이름으로 이 저장소에 제공됩니다. 이는 숨겨진 양식이 있는 간단한 HTML 페이지로, 입력 이름에 페이로드를 포함하여 /api/users FileBrowser 엔드포인트로 POST 요청을 수행합니다. 이 페이로드는 로그인이 "oui"이고 비밀번호가 "oui"인 관리자 권한 사용자를 생성하며, 버튼을 클릭하면 트리거됩니다.
물론 더 예쁘고 매력적인 페이지를 만들고 HTTP 요청 전송을 웹사이트의 다른 요소에 숨길 수도 있지만, 이는 취약점 악용의 기술적 측면을 보여주기 위한 것입니다. 이 악성 웹페이지의 목표는 FileBrowser 관리자가 의심하지 않고 열도록 하는 것임을 기억하세요!
관리자 측에서 우리는 FileBrowser에서 조용히 관리 작업을 수행하고 있습니다. 127.0.0.1:8080으로 이동하여 관리자 자격 증명 admin/admin으로 로그인합니다.
그런 다음 피싱 이메일과 같은 수단으로 악성 웹페이지를 받고, 악용을 트리거하는 동작을 수행합니다. index.html 웹페이지를 열고 버튼을 클릭하면 페이로드가 실행됩니다.
이제 다시 공격자 측으로 돌아와서, FileBrowser 서버에 관리자 권한의 백도어 사용자가 생성되었습니다.
즐겨 사용하는 웹 브라우저를 개인 모드로 열어 관리자의 인증 수단을 사용하지 않도록 합니다. localhost:8080으로 이동하여 백도어 사용자 자격 증명 oui/oui으로 로그인합니다.
축하합니다! 이제 FileBrowser 서버 파일 시스템에 접근할 수 있으므로 서버의 모든 사용자 파일에 접근할 수 있습니다!
그리고 FileBrowser는 다양한 기능을 갖춘 훌륭한 플랫폼이므로, "toggle shell" 버튼을 눌러 터미널 인스턴스를 실행할 수 있습니다... whoami를 입력해 보고, 원하는 대로 root 권한으로 무엇이든 해보세요 :)
백도어 사용자가 셸 명령어를 사용하려면 페이로드에 명시적으로 선언되어야 합니다. 자세한 내용은
index.html을 참조하여 추가하세요!
이 취약점은 v2.18.0 버전부터 패치되었습니다. 관련 정보는 FileBrowser GitHub에서 확인할 수 있습니다. 패치는 단일 프로그램 파일에서 6줄의 코드만 변경하면 되는 간단한 것으로, 배포 비용이 많이 들지 않았습니다. 취약점이 파싱 실패에서 비롯되었기 때문에(취약점 설명 참조), 모든 요청이 다른 작업으로 처리되기 전에 application/json 형식으로 파싱되도록 하는 것만으로 충분했습니다.
이 작업은 Grenoble INP - Ensimag, UGA의 정보 시스템 공학 전공 마지막 학년에 제공되는 정보 시스템 보안 과정의 일환으로 수행되었습니다.