
CVE-2026-27483을 연구하고 방어하기 위한 컨테이너화된 엔터프라이즈 스타일의 실험실
CVE-2026-27483(MindsDB 경로 탐색 → RCE)을 학습, 테스트, 방어하기 위한 완전하고 현실적인 엔터프라이즈 스타일의 Docker 기반 랩입니다. 이 저장소는 배포 가능한 랩 토폴로지, 구성 파일, 최소 컨테이너 이미지, 탐지 규칙 및 헬퍼 스크립트를 제공하여 탐지, 공격(정화된 형태), 방어를 안전하게 연습할 수 있는 격리된 환경을 구축할 수 있게 해줍니다.
중요: 이 랩은 교육 목적으로 의도적으로 취약한 MindsDB 버전을 포함합니다. 반드시 격리된 에어갭(air-gapped) 환경에서만 실행하고 공용 네트워크에 노출하지 마십시오.
Internet (Attacker)
↓
Reverse Proxy (nginx)
↓
┌─────────────────────────────────┐
│ MindsDB (Vulnerable) │ Port 47334
│ - Vulnerable to CVE-2026-27483 │
└─────────────────────────────────┘
↓
┌─────────────────────────────────┐
│ PostgreSQL Database │ Port 5432 (internal)
│ - Stores MindsDB data │
└─────────────────────────────────┘
↓
┌─────────────────────────────────┐
│ ELK Stack (Logging) │
│ - Elasticsearch, Logstash │ Ports 9200, 5000
│ - Kibana Dashboard │ Port 5601
└─────────────────────────────────┘
서비스는 전용 Docker 브리지 네트워크(기본값 172.20.0.0/16)로 연결됩니다. 격리된 MindsDB 서비스에 대해 통제된 공격 시도를 실행하기 위한 공격자 컨테이너가 포함되어 있습니다.
기본적으로 Postgres는 공용 인터넷에 노출되지 않도록 설계되었습니다. compose 파일은 로컬 랩 사용을 위해 내부 서비스를 매핑합니다.
사전 요구 사항:
git clone https://github.com/nabhan-mohy/cve-2026-27483-lab.git
cd cve-2026-27483-lab
cp .env.example .env
# .env를 열고 DB_PASSWORD 및 기타 값을 확인
중요: .env의 DB_PASSWORD가 compose 파일이 기대하는 비밀번호와 일치하는지 확인하십시오. docker-compose.yml에 기본값(${DB_PASSWORD:-P@ssw0rd123!})이 있습니다. .env에 DB_PASSWORD=P@ssw0rd123!를 설정하거나 docker-compose.yml을 편집하여 원하는 비밀번호를 사용하십시오. 불일치하면 MindsDB가 Postgres에 연결하지 못하고 서비스가 올바르게 시작되지 않습니다.
(선택 사항) .env를 편집하여 동작을 조정(기능 활성화/비활성화, 공격자 리스너 IP 설정 등).
랩 시작(전체 모드):
docker compose up -d --build
curl http://localhost:47334/api/statushttp://localhost:5601http://localhost:8080docker compose down
볼륨 제거(파괴적 작업):
docker compose down -v
README는 최소 및 모니터링 프로필을 참조합니다. 이를 지원하려면 다음 중 하나를 사용할 수 있습니다:
docker-compose.yml에서 profiles: 키를 사용하여 서비스를 minimal 및 monitoring 프로필로 분리하거나,docker-compose.minimal.yml과 같은 오버라이드 compose 파일을 생성합니다.권장되는 최소 테스트 방법은 Elasticsearch/Kibana/Wazuh를 주석 처리하거나 건너뛰고 mindsdb, postgres, nginx-proxy, attacker만 실행하는 것입니다.
리버스 프록시(nginx-proxy): 외부 노출 엔드포인트 역할을 하며 공격자 트래픽을 취약한 MindsDB 서비스로 라우팅합니다. 프록시는 빠른 확인을 위한 간단한 대시보드 포트(8080)도 제공합니다.
MindsDB(취약 이미지): README에 참조된 취약한 릴리스에서 패키징되었습니다. Postgres에 데이터를 저장하고 이전 버전에서 의도적으로 취약한 API 엔드포인트를 제공합니다.
Postgres: MindsDB 구성 및 아티팩트를 저장합니다. 초기화 SQL 및 시드 데이터는 configs/postgres/*.sql에 제공됩니다.
ELK 스택(Elasticsearch, Logstash, Kibana): 프록시 및 애플리케이션에서 로그를 수집하여 탐지 규칙과 대시보드를 구축할 수 있게 합니다.
Wazuh(선택 사항): 보안 모니터링 에이전트 및 매니저. 통합을 시연하기 위한 플레이스홀더로 포함되어 있습니다. 구성의 TLS 인증서와 자격 증명은 플레이스홀더이며 전체 기능을 위해서는 프로비저닝해야 합니다.
공격자 컨테이너: 유틸리티(curl, netcat, python)와 마운트된 exploits/ 폴더가 있는 환경으로, 동일한 Docker 네트워크 내부에서 챌린지 스크립트를 실행할 수 있습니다(원하는 경우 호스트 네트워크와 격리됨).
백업 서비스: 현실적인 엔터프라이즈 워크플로우(Postgres에서 DB 덤프를 가져오는 백업)를 시연하는 샘플 컨테이너.
docker compose exec -it attacker /bin/bash)에 진입하여 프록시(포트 80/8080) 및 MindsDB API(47334)에 대한 정찰을 실행합니다.exploits/ 및 docs/challenges/ 아래에 추가할 수 있습니다.예: 공격자 컨테이너에서 기본 정찰 실행
# 공격자 컨테이너 진입
docker compose exec -it attacker /bin/bash
# 네트워크 스캔 또는 엔드포인트 curl
curl -v http://nginx-proxy:80/
curl -v http://mindsdb:47334/api/status
스모크 테스트 스크립트가 scripts/smoke_test.sh(존재하는 경우)에 제공됩니다. 다음 검사를 수행합니다:
/api/status 응답 대기pg_isready로 Postgres 준비 상태 확인로컬에서 실행:
chmod +x scripts/smoke_test.sh
./scripts/smoke_test.sh
스모크 테스트가 실패하면 로그를 smoke_compose_logs.txt로 수집하여 디버깅용으로 공유:
docker compose logs --no-color > smoke_compose_logs.txt
Logstash 파이프라인은 configs/logstash/logstash.conf에 제공되어 로그를 Elasticsearch로 전달합니다. 포함된 Sigma 규칙 rules/sigma/cve-2026-27483.yml은 ..를 포함한 요청과 같은 의심스러운 경로 탐색 패턴을 플래그하는 간단한 예제입니다. 시작점으로 사용하고 오탐을 줄이기 위해 정제하십시오.
Kibana 대시보드를 생성하여 시각화:
.env와 docker-compose.yml 간의 DB 비밀번호 불일치로 인해 발생합니다. 두 파일이 동일한 시크릿을 사용하는지 확인하십시오.docker compose logs -f mindsdb를 실행하십시오.docker-compose.yml에서 ES_JAVA_OPTS를 줄이십시오(예: -Xms256m -Xmx256m).mindsdb:47334)를 가리키고 mindsdb 컨테이너가 정상 상태인지 확인하십시오.디버깅 도움이 필요하면 스모크 테스트를 실행하고 smoke_compose_logs.txt를 공유하십시오.
기여를 환영합니다. 도움이 될 수 있는 방법:
docs/ 아래 문서 개선(배포, 챌린지, 탐지, 침해 대응)exploits/에 정화된 챌린지 스크립트 추가main 브랜치에 PR을 열고 교육용 익스플로잇 자료를 추가할 때 CONTRIBUTING 지침을 따르십시오.
보안 커뮤니티를 위해 ❤️로 제작되었습니다.