Cuáles son las implicaciones de pedirle a las API de Reflection que sobrescriban System.String.Empty?

Me topé con este código:

static void Main()
{
    typeof(string).GetField("Empty").SetValue(null, "evil");//from DailyWTF

    Console.WriteLine(String.Empty);//check

    //how does it behave?
    if ("evil" == String.Empty) Console.WriteLine("equal"); 

    //output: 
    //evil 
    //equal

 }

y me pregunto cómo es posible compilar este código. Mi razonamiento es:

Según MSDNString.Empty es de solo lectura, por lo tanto, cambiarlo debería ser imposible y la compilación debería terminar con "No se puede asignar un campo de solo lectura estático" o un error similar.

Pensé que los ensambles de la Biblioteca de clase base están de alguna manera protegidos y firmados, y eso para evitar exactamente este tipo de ataque. La próxima vez que alguien pueda cambiar System.Security.Cryptography u otra clase crítica.

ensé que NGEN compila los ensambles de la Biblioteca de clases base después de la instalación de .NET, por lo que cambiar los campos de la clase String debería requerir piratería avanzada y ser mucho más difícil.

Y, sin embargo, este código se compila y funciona. ¿Alguien puede explicar qué tiene de malo mi razonamiento?

Respuestas a la pregunta(5)

Su respuesta a la pregunta