
Esiste una vulnerabilità di path injection in OpenPLC-v3, che deriva dal fatto che il programma non effettua alcun controllo di validità sui parametri del percorso file passati dalla riga di comando. Gli attaccanti possono leggere qualsiasi file leggibile costruendo percorsi malevoli, comportando un rischio di perdita di informazioni.
Esiste una vulnerabilità di path injection in OpenPLC-v3, che deriva dal fatto che il programma non esegue alcun controllo di validità sui parametri del percorso file passati dalla riga di comando. Gli attaccanti possono leggere qualsiasi file leggibile costruendo percorsi malevoli, comportando un rischio di fuga di informazioni.
Validazione degli input inadeguata (Path Injection)
Divulgazione di informazioni (Lettura arbitraria di file)
Il programma binario compilato da glue_generator.cpp contiene una vulnerabilità di lettura arbitraria di file causata da una validazione insufficiente dei percorsi file forniti dall'utente.
Un attaccante può specificare un file arbitrario come argomento di input (ad es., /etc/passwd) durante l'esecuzione del programma. L'applicazione legge quindi il file riga per riga, analizza il contenuto e stampa direttamente i dati analizzati sulla console tramite cout, senza eseguire alcuna validazione su:
Di conseguenza, gli attaccanti possono leggere qualsiasi file accessibile al contesto di privilegio del processo in esecuzione, portando alla divulgazione di informazioni sensibili.
L'attaccante è in grado di eseguire il binario vulnerabile.
L'account utente in esecuzione ha il permesso di lettura per il file target.
Un exploit riuscito può divulgare informazioni sensibili di sistema, inclusi ma non limitati a:
Queste informazioni possono facilitare un'ulteriore escalation dei privilegi o movimento laterale.
In glue_generator.cpp, il programma utilizza due array di stringhe, varName e varType, per elaborare e stampare i contenuti dei file analizzati nella riga di comando.
Durante l'analisi, il programma si aspetta un formato di riga specifico:
(<varType>,<varName>,
Nello specifico:
il contenuto tra ( e la prima , viene assegnato a varType;
il contenuto tra la prima e la seconda , viene assegnato a varName.
Non viene eseguita alcuna validazione sul percorso del file di origine o sulla legittimità dei dati analizzati.
Passo 1: Creare un file di test
Creare un file denominato test.txt con il seguente contenuto:
(aaaaaaaa,123,
Passo 2: Eseguire il programma vulnerabile
Eseguire il seguente comando:
./glue_generator ./test.txt whatever.cpp
Il programma analizzerà il contenuto e stamperà i valori estratti sulla console.
Passo 3: Lettura arbitraria di file
Se un attaccante può modificare o controllare un file sensibile (ad esempio /etc/passwd) per includere dati che corrispondono al formato richiesto:
(aaaaaaaa,123,
il programma vulnerabile analizzerà e stamperà il contenuto corrispondente dal file.
Per file sensibili, qualsiasi riga che corrisponda al seguente pattern può essere divulgata:
(<contenuto1>,<contenuto2>,
La quantità di informazioni divulgate dipende da:
La vulnerabilità è causata da:
Mancanza di validazione per i percorsi file controllati dall'utente.
Logica di analisi non sicura applicata a file arbitrari.
Output diretto su console del contenuto analizzato senza controlli di autorizzazione.
Assenza di restrizioni sulle posizioni dei file accessibili.
Per mitigare la vulnerabilità: