
نموذج إثبات مفهوم (PoC) تعليمي لثغرة CVE تتعلق بسباق صلاحيات الملفات (TOCTOU) في Flask؛ يستخدم استبدال الروابط الرمزية (symlink) أثناء نافذة الفحص-والفتح لكشف الملفات الحساسة.
# toctou_server.py - File server that checks permission then opens
import os, time, tempfile
from flask import Flask, request
app = Flask(__name__)
SAFE_DIR = '/tmp/safe'
@app.route('/read')
def read_file():
filename = request.args.get('file')
filepath = os.path.join(SAFE_DIR, filename)
# Check: ensure it's a regular file and owned by user
if not os.path.isfile(filepath):
return "Not a file", 403
# Race window: attacker replaces file with symlink to /etc/shadow
time.sleep(0.2) # simulate processing delay
with open(filepath, 'r') as f:
return f.read()
if __name__ == '__main__':
app.run(port=5000)
يتحقق خادم ملفات مما إذا كان المسار ملفًا عاديًا ثم يفتحه بعد تأخير. يمكن للمهاجم استبدال الملف برابط رمزي إلى ملف نظام حساس (مثل /etc/shadow) خلال نافذة السباق، متجاوزًا الفحص وواصلًا إلى البيانات المحمية.
isfile) والاستخدام (open) ليسا ذرّيين، مما يسمح للمهاجم بتغيير كائن نظام الملفات في الفترة بينهما.pip install flask
python toctou_server.py
python exploit_toctou.py
إذا نجح السباق، فستحتوي الاستجابة على ملف الظل.