
Un piccolo articolo con esempi per comprendere CVE-2023-43115
Un breve articolo con esempi per aiutare a comprendere CVE-2023-43115.
[!WARNING] Ho scritto questo principalmente per me stesso per capire il problema e per imparare la cybersecurity. Quindi potrebbero esserci errori.
Per utilizzare il dispositivo IJS (Improved Inkjet Printing), Ghostscript deve avviare un server IJS. Questo viene ottenuto utilizzando il percorso specificato nel parametro IjsServer. Il parametro IjsServer può essere configurato per fare riferimento a qualsiasi file desiderato all'interno del file system, e Ghostscript successivamente esegue quel file designato. Qui è facile vedere come questo potrebbe potenzialmente essere abusato, ad esempio puoi eseguire il seguente comando ghostscript per stampare hello world.
❯ gs -sDEVICE=ijs -sIjsServer="bash -c 'echo Hello World>&2'"
GPL Ghostscript 9.55.0 (2021-09-27)
Copyright (C) 2021 Artifex Software, Inc. All rights reserved.
This software is supplied under the GNU AGPLv3 and comes with NO WARRANTY:
see the file COPYING for details.
Hello World
Di per sé questo non è così problematico perché questo parametro deve essere fornito dall'utente. Tuttavia è anche possibile impostare questo dispositivo e il parametro IJsServer all'interno di uno script postscript.
Vedi ad esempio attack_example_*.ps (eseguire con gs FILENAME). Questo a sua volta potrebbe permettere a un attaccante di eseguire codice sulla macchina che esegue questo script. Ma questo problema è noto e ufficialmente documentato e potrebbe essere prevenuto impostando LockSafetyParams a true.
Per sfruttare questa CVE mentre LockSafetyParams è abilitato, un attaccante avrebbe bisogno di un exploit funzionante per cambiare LockSafetyParams. Tuttavia, se un tale exploit è disponibile, potrebbero esserci una serie di altri possibili vettori di attacco a seconda della versione utilizzata.
L'autore della correzione Ken Sharp ha definito la suddetta soluzione di sicurezza LockSafetyParams come approssimativa perché è implementata in postscript ed è quindi vulnerabile al codice postscript. Questo ha portato a diversi problemi di sicurezza in passato in cui era possibile sovrascrivere questo parametro (per un esempio vedere CVE-2018-19475 writeup ). La correzione cambia il meccanismo di protezione che impedisce di impostare il percorso IjsServer da LockSaftyParams al nuovo parametro -dSAFER, che non può essere influenzato dal codice postscript.
[!NOTE] La Documentazione della versione vulnerabile 9.55.0 afferma già di utilizzare il parametro -dSAFER, il che sembra essere un errore di documentazione.