Un API es un contrato entre un autor de llamada y un receptor de llamada. Las formas de abuso de API más comunes los produce el autor de llamada cuando no consigue atender su fin de este contrato. Por ejemplo, si un programa no consigue llamar chdir() después de llamar chroot(), se viola el contrato que especifica cómo cambiar el directorio de origen activo de una forma segura. Otro buen ejemplo de un abuso de manual es esperar que el receptor devuelva una información de DNS de confianza al autor de llamada. En este caso, el autor de llamada abusa el API del receptor haciendo determinadas suposiciones sobre su comportamiento (que el valor de retorno se puede usar con fines de autenticación). También se puede violar el contrato entre el autor de llamada y el receptor desde el otro lado. Por ejemplo, si un codificador envía SecureRandom y devuelve un valor no aleatorio, se viola el contrato.
File Disclosure: J2EE
1. Los datos entran en un programa desde un origen que no es de confianza.
2. Los datos se utilizan para crear de forma dinámica una ruta.
Ejemplo 1: el siguiente código obtiene datos que no son de confianza y los utiliza para crear una ruta que se utiliza en un reenvío del servidor.
Ejemplo 2: el siguiente código obtiene datos que no son de confianza y los utiliza para crear una ruta que se utiliza en un reenvío del servidor.
...
String returnURL = request.getParameter("returnURL");
RequestDispatcher rd = request.getRequestDispatcher(returnURL);
rd.forward();
...
...
<% String returnURL = request.getParameter("returnURL"); %>
<jsp:include page="<%=returnURL%>" />
...
Si un usuario malintencionado ha proporcionado una URL con un parámetro de solicitud que coincide con una ubicación de archivo confidencial, este podrá ver ese archivo. Por ejemplo, "http://www.yourcorp.com/webApp/logic?returnURL=WEB-INF/applicationContext.xml" le permitiría ver el archivo applicationContext.xml de la aplicación.
Una vez que el usuario malintencionado dispone de applicationContext.xml, podría localizar y descargar otros archivos de configuración a los que se hace referencia en este archivo, o incluso archivos class o jar. Esto permitiría a un usuario malintencionado obtener información confidencial acerca de una aplicación y usarla para otros tipos de ataques.