En un libro de programación de Java hay una sección que detalla la JVM y las direcciones de memoria y la ubicación en lo que respecta a los parámetros de un tipo de clase. Como puede ver en la salida de la consola, el objeto inicial se sobrescribe en la memoria (potencialmente involuntariamente para el autor de la API). Se me explicó que esto puede ser una vulnerabilidad de seguridad de software no intencionada y que se detectaría durante una revisión manual del código.
¿Puede alguien explicar de qué manera se explotaría esta vulnerabilidad? ¿Estaría usando la API de otra persona que contiene esta vulnerabilidad o estaría explotando una aplicación real que contenga esto? ¿Hay algún ejemplo (quizás en las noticias) de que se esté haciendo esto?
Así es como funciona, según el texto:
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) ));
}
}
Salida de consola:
Mr. Cellophane 0
Now we call changer with anObject as an argument
Hot Shot 42
Editar: para explicar el fondo un poco más. Este ejemplo muestra cómo en el sistema de memoria JVM dos objetos se encuentran en una dirección diferente, mientras que el parámetro almacenado se encuentra en la misma ubicación de memoria y se sobrescribe con el segundo método. Esta es la base de la "vulnerabilidad".