🇰🇷 한글 설명
Kubeflow Pipelines 2.18.0 이전 버전의 API 서버는 업로드된 파이프라인 아카이브를 압축 해제할 때 확장 데이터 크기를 적절히 제한하지 않습니다. 작은 ZIP 또는 gzip 압축 tar 파일로도 과도한 메모리를 소비해 API 서버 리소스를 고갈시킬 수 있으며, 파이프라인 업로드 처리 시 네임스페이스 인가 이전에 압축 해제가 수행됩니다.
💡 쉬운 설명
아주 작은 압축 파일을 업로드하는 것만으로도 Kubeflow Pipelines 서버가 메모리를 과도하게 사용해 멈출 수 있습니다. 이 문제는 2.18.0 버전에서 수정되었습니다.
🇺🇸 원문 (English)
Kubeflow Pipelines enables users to build and deploy portable, scalable machine learning workflows. Prior to 2.18.0, the API server decompressed uploaded pipeline archives without adequately bounding expanded data while locating or reading the pipeline file. A small ZIP or gzip-compressed tar archive can consume disproportionately large memory and exhaust API-server resources. Multipart pipeline and pipeline-version upload processing performs decompression before namespace authorization, so a reachable caller does not need a successful pipeline-create authorization decision. URL-import handlers authorize before fetching and decompressing a remote archive. The amount of expansion required to interrupt service depends on deployment resource limits and concurrent activity, and no specific archive is guaranteed to crash every deployment. This issue is fixed in version 2.18.0.
📍 영향받는 시스템
Kubeflow Pipelines 2.18.0 미만 버전 (API 서버)
⚔️ 공격 벡터
작은 크기의 악성 ZIP/gzip tar 아카이브를 파이프라인 업로드 또는 URL 가져오기 기능으로 전송하여 압축 해제 과정에서 API 서버 메모리를 고갈시키는 서비스 거부(DoS) 공격
🛡️ 대응 방법
Kubeflow Pipelines를 2.18.0 이상 버전으로 업그레이드하고, 필요 시 API 서버에 메모리 제한 및 업로드 크기 제한을 설정
🔧 검증 코드
출력된 파이프라인 API 서버 이미지 태그를 확인하여 버전이 2.18.0 미만이면 취약하며, 2.18.0 이상이면 패치가 적용된 것입니다.
kubectl get deployment -n kubeflow -o jsonpath='{range .items[*]}{.metadata.name}{": "}{.spec.template.spec.containers[*].image}{"\n"}{end}' 2>/dev/null | grep -i pipeline