
CVE-2026-21005를 악용하여 인증되지 않은 push를 통해 Docker Registry V2 Schema 1 매니페스트를 오염시켜 태그 덮어쓰기 및 공급망 손상을 가능하게 합니다.
# docker_registry_sim.py - Simulated registry that serves schema1 manifests
from flask import Flask, request, jsonify
app = Flask(__name__)
images = {
'myapp': {
'v1': {'layers': ['sha256:abc', 'sha256:def'], 'config': {}},
}
}
@app.route('/v2/<name>/manifests/<tag>', methods=['GET', 'PUT'])
def manifest(name, tag):
if request.method == 'PUT':
images[name][tag] = request.json
return jsonify({}), 201
return jsonify(images[name].get(tag, {}))
if __name__ == '__main__':
app.run(port=5000)
프라이빗 Docker 레지스트리가 인증 없이 push 요청을 수락하고, 콘텐츠 주소 지정 방식의 구성 다이제스트가 포함되지 않은 Schema 1 매니페스트를 사용합니다. 공격자는 기존 태그를 악성 이미지로 덮어쓸 수 있으며, 해당 태그를 pull하는 클라이언트는 공격자의 코드를 실행하게 됩니다.
pip install flask
python docker_registry_sim.py
bash exploit_registry_poison.sh
latest 태그가 덮어써집니다.