2009-07-21 21 views

Respuesta

6

Reflexión permite código malicioso para inspeccionar todo tipo de secretos: no tanto la propiedad intelectual (aunque seguro, eso también), pero datos que deberían ser privados y seguros, como cadenas de conexión, contraseñas, datos de cuentas bancarias, etc.

Por supuesto, muchos programas exponen estos datos de forma rutinaria a través de aún más - vectores fácilmente comprometidos, pero no hay razón para aumentar la superficie de ataque de una aplicación.

Editado para traer un poco de la conversación a partir de los comentarios:

Es probablemente cierto que el riesgo real es el acceso sin restricciones del sistema de archivos, que es lo que convierte a la reflexión en un peligro real. Si un mal actor puede obtener un ensamblado (o algo que se compila en un ensamble) en su directorio virtual, tendrá problemas si tienen permiso de reflexión. (Por supuesto, si esto sucede, también hay otros problemas potenciales, pero eso no debería descontar esta vulnerabilidad en particular).

En un entorno de alojamiento compartido que es más difícil de prevenir, aunque ciertamente no es imposible. Tal vez valga la pena publicar esta pregunta al ServerFault para ver lo que las buenas personas tienen para decir.

+0

No entiendo completamente cómo funciona esto. Por ejemplo, en un entorno de alojamiento compartido, ¿cómo accedería a los ensamblajes de otro cliente? ¿Cómo usaría la reflexión para inspeccionar el contenido de propiedades y métodos privados? –

+2

Si está ejecutando (por ejemplo) un proyecto de sitio web, en lugar de un proyecto de aplicación web y le proporciona al usuario una forma de cargar archivos en su sitio, puede cargar una página ASPX que se compila cuando se llama, si eso usamos la reflexión para leer el estado de tu aplicación, entonces es posible que se puedan acceder a las cadenas de conexión, etc. Es una posibilidad pequeña, pero menos importante, de ahí el "podría" en su enlace. No olvide que algunos hosts no siempre ejecutan un entorno de confianza medio "vainilla", sino que personalizan qué características son y cuáles no están disponibles. –

+1

Ben me ganó. Añadiré una cosa más: en un entorno de alojamiento compartido, heredas (algunas de) las vulnerabilidades de seguridad de las otras aplicaciones que se ejecutan en tu servidor, por lo que tus compañeros clientes ni siquiera tienen que ser maliciosos para representar un peligro para usted, solo negligente. –

4

nunca he encontrado nada 'malo' que el usuario será capaz de hacer uso de la reflexión. La gente se asusta porque puede llamar a los métodos que están marcados como privados o protegidos, pero por lo que he visto, ninguno de ellos impone ningún riesgo real.

Lo más probable, es al menos en parte, una técnica de ventas para llegar a pagar por (semi) de alojamiento dedicado :)

3

me encontré con el siguiente artículo de MSDN sobre este tema:

Security Considerations for Reflection

respuesta Este artículo de eco de Jeff:

Reflexión proporciona la capacidad de obtener información sobre los tipos y miembros y para acceder a los miembros. El acceso a miembros no públicos podría crear un riesgo de seguridad. Por lo tanto, el código que tiene acceso a los miembros que no son públicos requiere ReflectionPermission con los indicadores apropiados .

Sin embargo, no creo que este riesgo pueda explotarse entre las cuentas de alojamiento del cliente. Parece que esto solo representaría un riesgo personal. Por ejemplo, usando la reflexión, podría explorar mis propios ensamblajes en mi entorno de alojamiento.Sin embargo, otros clientes no pudieron usar el reflejo para explorar mis conjuntos. Solo pudieron explorar sus conjuntos.

Esto puede suponer un problema para una sola aplicación web que involucra a varios equipos de desarrollo. Un equipo de desarrollo podría usar la reflexión para explorar las asambleas de otro equipo de desarrollo.

Sin embargo, este es un escenario raro para un entorno de alojamiento compartido. La mayoría de los sitios web de alojamiento compartido involucran a un equipo muy pequeño que tiene acceso completo a todo el código. En otras palabras, no hay secretos. Siempre que el ensamblaje esté a salvo de otros clientes de hosting compartido, entonces no es un problema.

Habilitación de reflexión no debería plantear ningún riesgo para las aplicaciones web de alojamiento más comunes:

<IPermission class="ReflectionPermission" version="1" Flags="RestrictedMemberAccess"/> 

Por favor, corríjanme si me equivoco.

+0

Si el acceso a la aplicación web se vio comprometido, la reflexión podría usarse para explorar las cadenas de conexión de la base de datos y otra información confidencial. Es una compensación. ¿Qué tan importante es que una aplicación esté protegida de sí misma? –

+0

para ser honesto, esto me dejó con más preguntas. Aunque +1 confirmó que hay problemas de seguridad con una buena referencia. Respetuosamente estoy en desacuerdo contigo en el escenario de ataque, aunque no tengo uno mejor así que no puedo hablar. – rook

Cuestiones relacionadas