🇰🇷 한글 설명
Tekton Pipelines의 HTTP resolver가 응답 본문 크기를 제한하지 않아, 공격자가 대용량 응답을 반환하는 악의적 HTTP 서버로 TaskRun/PipelineRun을 지정하면 resolver 파드가 메모리 부족(OOM)으로 강제 종료됩니다. 이는 같은 파드에서 실행되는 모든 resolver 타입(Git, Hub, Bundle, Cluster, HTTP)의 서비스를 중단시키며, 반복 공격 시 지속적인 재부팅 루프를 야기합니다.
💡 쉬운 설명
Tekton 파이프라인 도구가 매우 큰 파일을 다운로드하도록 속아서 메모리가 부족해져 멈추는 문제입니다. 이로 인해 전체 CI/CD 파이프라인 서비스가 중단될 수 있습니다.
🇺🇸 원문 (English)
Tekton Pipelines project provides k8s-style resources for declaring CI/CD-style pipelines. Prior to 1.11.1, the HTTP resolver's FetchHttpResource function calls io.ReadAll(resp.Body) with no response body size limit. Any tenant with permission to create TaskRuns or PipelineRuns that reference the HTTP resolver can point it at an attacker-controlled HTTP server that returns a very large response body within the 1-minute timeout window, causing the tekton-pipelines-resolvers pod to be OOM-killed by Kubernetes. Because all resolver types (Git, Hub, Bundle, Cluster, HTTP) run in the same pod, crashing this pod denies resolution service to the entire cluster. Repeated exploitation causes a sustained crash loop. The same vulnerable code path is reached by both the deprecated pkg/resolution/resolver/http and the current pkg/remoteresolution/resolver/http implementations. This vulnerability is fixed in 1.11.1.
📍 영향받는 시스템
Tekton Pipelines 1.11.1 미만 버전 (pkg/resolution/resolver/http 및 pkg/remoteresolution/resolver/http)
⚔️ 공격 벡터
TaskRun 또는 PipelineRun 생성 권한을 가진 테넌트가 HTTP resolver를 악의적 서버로 지정하여 대용량 응답 반환
🛡️ 대응 방법
Tekton Pipelines를 1.11.1 이상으로 업그레이드
🔧 검증 코드
명령 결과가 1.11.1 이상이면 안전하고, 1.11.1 미만이거나 버전을 확인할 수 없으면 업그레이드 필요
kubectl get deployment -A | grep -i tekton | awk '{print $3}' | xargs -I {} kubectl describe deployment {} -n tekton-pipelines 2>/dev/null | grep Image | grep -oP 'tekton-pipelines-resolvers:v\K[0-9.]+' || echo 'Not Found'