In un libro di programmazione Java c'è una sezione che descrive la JVM e gli indirizzi di memoria e la posizione in cui si riferiscono ai parametri di un tipo di classe. Come puoi vedere dall'output della console, l'oggetto iniziale viene sovrascritto in memoria (potenzialmente involontariamente all'autore dell'API). Mi è stato spiegato che questa può essere una vulnerabilità di sicurezza del software non prevista e che sarebbe stata rilevata durante una revisione manuale del codice.
Qualcuno può spiegare in che modo questa vulnerabilità sarebbe sfruttata? Sarebbe nell'utilizzo dell'API di qualcun altro che contiene questa vulnerabilità o sarebbe nello sfruttamento di un'applicazione reale che contiene questo? Ci sono degli esempi (forse nelle notizie) di questo fatto?
Ecco come funziona, secondo il testo:
MainActivity.class:
public class MainActivity {
public static void main(String[] args) {
ToyClass anObject = new ToyClass("Mr. Cellophane", 0);
System.out.println(anObject);
System.out.println("Now we call changer with anObject as an argument");
ToyClass.changer(anObject);
System.out.println(anObject);
}
}
ToyClass
public class ToyClass {
private String name;
private int number;
public ToyClass(String initialName, int initialNumber) {
name = initialName;
number = initialNumber;
}
public ToyClass() {
name = "No name yet.";
number = 0;
}
public void set(String newName, int newNumber) {
name = newName;
number = newNumber;
}
public String toString() {
return (name +" " + number);
}
public static void changer(ToyClass aParameter) {
aParameter.name = "Hot Shot";
aParameter.number = 42;
}
public boolean equals(ToyClass otherObject) {
return ((name.equals(otherObject.name)&& (number == otherObject.number) ));
}
}
Output console:
Mr. Cellophane 0
Now we call changer with anObject as an argument
Hot Shot 42
Modifica: per spiegare un po 'di più lo sfondo. Questo esempio mostra come nel sistema di memoria JVM due oggetti si trovano su un indirizzo diverso mentre il parametro memorizzato si trova nella stessa posizione di memoria e viene sovrascritto dal secondo metodo. Questa è la base della "vulnerabilità".