
CVE-2026-4040 재현: TOCTOU 레이스 컨디션이 있는 Flask 업로드 서버와 임의 원격 코드 실행을 시연하는 익스플로잇 스크립트.
# upload_server.py - File upload with race condition
from flask import Flask, request
import os, tempfile, time, threading
app = Flask(__name__)
UPLOAD_DIR = '/tmp/uploads'
os.makedirs(UPLOAD_DIR, exist_ok=True)
@app.route('/upload', methods=['POST'])
def upload():
file = request.files['file']
# Save to a temporary file
fd, tmp_path = tempfile.mkstemp(dir=UPLOAD_DIR)
file.save(tmp_path)
# Simulate validation (check extension)
if not file.filename.endswith('.txt'):
os.unlink(tmp_path)
return "Invalid extension", 400
# Race window: between save and move, attacker can execute the script
# In a real server, we'd move to safe name, but we simulate time delay
time.sleep(0.5) # vulnerability
final_path = os.path.join(UPLOAD_DIR, file.filename)
os.rename(tmp_path, final_path)
return "Uploaded", 200
if __name__ == '__main__':
app.run(port=5000)
업로드 엔드포인트는 업로드된 파일을 임시 경로에 저장하고, 확장자를 검증한 후, 일정 시간이 지난 뒤 안전한 이름으로 이동시킵니다. 공격자는 이름 변경 전에 임시 파일에 접근하여 실행하기 위해 경쟁할 수 있으며, 이를 통해 원격 코드 실행을 달성할 수 있습니다.
pip install flask
python upload_server.py
python exploit_race_upload.py