PHP le permite crear instancias de variables o entradas de matriz, como esto:
class Foo {}
$className = 'Foo';
new $className();
$someArray = ['class_name' => 'Foo'];
new $someArray['class_name']();
Desgraciadamente, algunos de mis compañeros de trabajo - en múltiples proyectos en los que he trabajado en múltiples compañías - han usado esta función de lenguaje con nombres de clase proporcionados por la entrada del usuario como una forma de crear una instancia de una de las varias subclases posibles, dependiendo de un tipo especificado en la solicitud. He visto código a lo largo de estas líneas ...
new $_GET['product_type']($_GET['product_id']);
Esto, además de ser un dolor de cabeza de mantenimiento, es obviamente estúpido y peligroso; estás dejando a un atacante crear una instancia de una clase arbitraria. Pero ¿cómo es peligroso? ¿Qué ataques existen que solo usan clases de PHP incorporadas (y, por lo tanto, no requieren un conocimiento detallado del código de la aplicación) que podrían usarse contra puntos finales como el anterior?
Estoy buscando el ataque más desagradable que alguien pueda hacer y que puedo usar para asustar a los futuros compañeros de trabajo que usen este horrible anti-patrón.