
CVE-2025-4138 - Python كتابة ملف تعسفية خارج دليل الاستخراج
filter="data" في Python tarfileكتابة ملفات عشوائية خارج دليل الاستخراج عبر سلسلة روابط رمزية تتجاوز PATH_MAX.
المُبلِّغ: Caleb Brown (Google)
يتحقق مرشّح البيانات في tarfile الخاص بـ Python من أهداف الروابط الرمزية باستخدام os.path.realpath(). عندما يتجاوز المسار المُحَلَّل حد PATH_MAX (4096 بايت في لينكس)، تتوقف realpath() بصمت عن الحلّ وتُلحق المكوّنات المتبقية — بما في ذلك ../ — كنصوص حرفية. يرى المرشّح مسارًا آمنًا؛ بينما تتبع النواة المسار الفعلي الحقيقي.
يبني الاستغلال ملف tar من أربع مراحل:
a→ddd..., b→ddd...). يضخّم المسار المُحَلَّل إلى ~3968 بايت.../ × 16 في نهاية السلسلة. يفيض realpath() ويعجز عن حلّه. تعود النواة إلى جذر الاستخراج./، ونزولًا إلى الدليل الهدف.ssh-keygen -t ed25519 -f /tmp/key -N ""
python3 CVE-2025-4138_tarfile_filter_bypass.py \
-o evil.tar \
-t /root/.ssh/authorized_keys \
-p /tmp/key.pub \
-m 0600
| Flag | الوصف |
|---|---|
-o |
للاستخدام في الاختبارات الأمنية المرخَّصة وفعاليات CTF فقط.
| مسار ملف tar الناتج |
-t | المسار المطلق للملف المطلوب كتابته على الهدف |
-p | الملف المحلي المستخدم كمحتوى للحمولة |
-m | صلاحيات الملف بالنظام الثماني (الافتراضي: 0644) |