Se Java è intrinsecamente vulnerabile agli attacchi di injection System.getProperty, vale la pena validarlo?

3

In Java è comune vedere codice come System.getProperty('line.separator') utilizzato per costruire le stringhe utilizzate per l'output, ecc. È stato raccomandato dagli scanner di vulnerabilità che è consigliabile convalidare questo input, ad es. assicurandoti che corrisponda a \n o \r\n ecc.

Ma mi chiedo, dal momento che Java stesso è vulnerabile a questi all'interno del proprio PrintWriter.printLn e forse BufferedWriter.newLine() ecc., è ora una procedura ottimale per convalidare System.getProperty('line.separator') in ogni programma che emette nuove istruzioni di linea? Sembra eccessivo.

Esistono alcune migliori pratiche alternative che eliminerebbero la necessità di convalidare tutte le proprietà del sistema? Per esempio. è sufficiente come best practice per rivedere i privilegi e i comandi a livello di amministratore di sistema piuttosto che a livello di sviluppatore? Altrimenti, perché gli scanner di vulnerabilità stanno prendendo queste precauzioni ora?

La mia impressione è che questo tipo di convalida a livello di codice sia eccessivo in un ambiente di produzione aziendale standard in cui vi sono più livelli di separazione di funzioni e blocchi di privilegi tra dev / test / prod, ecc. Questa è solo la mia opinione, tuttavia, e mi piacerebbe sentire gli altri.

    
posta blindcodifier9734 17.10.2017 - 22:38
fonte

1 risposta

3

Garantire che corrisponda a un modello predefinito nega il punto di averlo.

Dalla documentazione di oracle -

Security consideration: Access to system properties can be restricted by the Security Manager.

E anche

The setProperties method changes the set of system properties for the current running application. These changes are not persistent. That is, changing the system properties within an application will not affect future invocations of the Java interpreter for this or any other application. The runtime system re-initializes the system properties each time its starts up. The setProperties method changes the set of system properties for the current running application. These changes are not persistent. That is, changing the system properties within an application will not affect future invocations of the Java interpreter for this or any other application. The runtime system re-initializes the system properties each time its starts up.

Quindi, per essere un rischio, devi aspettarti che una parte malintenzionata inietta in qualche modo una chiamata setProperties nella tua applicazione in esecuzione. A meno che non si passi l'input dell'utente a una chiamata "setProperties" (che in generale è una pessima idea) questo non dovrebbe essere un problema. Se riescono a iniettare il codice, hai problemi ben più grandi. Se sei ancora preoccupato, usa SecurityManager.

    
risposta data 18.10.2017 - 10:19
fonte

Leggi altre domande sui tag