Referencias de objetos directos inseguras

Es probable que se produzca una referencia directa a un objeto cuando un desarrollador expone una referencia a un objeto de implementación interno, como un archivo, directorio o clave de base de datos sin ningún mecanismo de validación que permita a los atacantes manipular estas referencias para acceder a datos no autorizados.

Comprendamos los agentes de amenazas, los vectores de ataque, la debilidad de la seguridad, el impacto técnico y los impactos comerciales de esta falla con la ayuda de un diagrama simple.

Ejemplo

La aplicación utiliza datos no verificados en una llamada SQL que accede a la información de la cuenta.

String sqlquery = "SELECT * FROM useraccounts WHERE account = ?";
PreparedStatement st = connection.prepareStatement(sqlquery, ??);
st.setString( 1, request.getParameter("acct"));
ResultSet results = st.executeQuery( );

El atacante modifica el parámetro de consulta en su navegador para que apunte a Admin.

http://webapp.com/app/accountInfo?acct=admin

Las manos en

Step 1- Inicie sesión en Webgoat y navegue hasta la sección de fallas de control de acceso. El objetivo es recuperar el archivo tomcat-users.xml navegando hasta la ruta donde se encuentra. A continuación se muestra la instantánea del escenario.

Step 2 - La ruta del archivo se muestra en el campo 'el directorio actual es' - C: \ Users \ userName $ \. Extract \ webapps \ WebGoat \ Lesson_plans \ en y también sabemos que el archivo tomcat-users.xml se guarda en C: \ xampp \ tomcat \ conf

Step 3- Necesitamos recorrer todo el camino fuera del directorio actual y navegar desde C: \ Drive. Podemos realizar lo mismo interceptando el tráfico usando Burp Suite.

Step 4 - Si el intento tiene éxito, muestra el archivo tomcat-users.xml con el mensaje "Felicitaciones. Ha completado con éxito esta lección".

Mecanismos preventivos

Los desarrolladores pueden utilizar los siguientes recursos / puntos como guía para evitar referencias directas a objetos inseguros durante la propia fase de desarrollo.

  • Los desarrolladores deben usar solo un usuario o sesión para referencias indirectas a objetos.

  • También se recomienda verificar el acceso antes de usar una referencia de objeto directo de una fuente que no sea de confianza.