Reino: API Abuse

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.

5 elementos encontrados
Debilidades
Abstract
El programa infringe la especificación de Enterprise JavaBeans al emplear AWT/Swing.
Explanation
La especificación de Enterprise JavaBeans exige que todos los proveedores de bean sigan una serie de instrucciones de programación diseñadas para garantizar que el bean sea portátil y se comporte de forma coherente en cualquier contenedor EJB [1].

En este caso, el programa infringe la siguiente instrucción EJB:

"Un enterprise bean no debe usar la funcionalidad AWT para tratar de mostrar información en una pantalla, o para introducir información desde un teclado".

Se trata de un requisito que la especificación justifica de la siguiente forma:

"La mayoría de los servidores no permiten la interacción directa entre un programa de aplicación y un teclado o una pantalla conectados al sistema del servidor".
References
[1] The Enterprise JavaBeans 2.1 Specification Sun Microsystems
[2] Standards Mapping - Common Weakness Enumeration CWE ID 575
desc.structural.java.ejb_bad_practices_use_of_awt_swing
Abstract
El programa infringe la especificación de Enterprise JavaBeans al emplear el cargador de clases.
Explanation
La especificación de Enterprise JavaBeans exige que todos los proveedores de bean sigan una serie de instrucciones de programación diseñadas para garantizar que el bean sea portátil y se comporte de forma coherente en cualquier contenedor EJB [1].

En este caso, el programa infringe la siguiente instrucción EJB:

"Enterprise bean no debe intentar crear un cargador de clases, obtener el cargador de clases actual, establecer el cargador de clases de contexto, establecer el administrador de seguridad, crear un nuevo administrador de seguridad, detener el JVM ni cambiar los flujos de entrada, salida y error".

Se trata de un requisito que la especificación justifica de la siguiente forma:

"Estas funciones se reservan para el contenedor EJB. Permitir a enterprise bean usar estas funciones podría comprometer la seguridad y reducir la capacidad del contenedor de administrar adecuadamente el entorno de tiempo de ejecución".
References
[1] The Enterprise JavaBeans 2.1 Specification Sun Microsystems
[2] Standards Mapping - Common Weakness Enumeration CWE ID 578
desc.structural.java.ejb_bad_practices_use_of_classloader
Abstract
El programa infringe la especificación de Enterprise JavaBeans al emplear el paquete java.io.
Explanation
La especificación de Enterprise JavaBeans exige que todos los proveedores de bean sigan una serie de instrucciones de programación diseñadas para garantizar que el bean sea portátil y se comporte de forma coherente en cualquier contenedor EJB [1].

En este caso, el programa infringe la siguiente instrucción EJB:

"Un enterprise bean no debe usar el paquete java.io para tratar de acceder a archivos y directorios del sistema de archivos".

Se trata de un requisito que la especificación justifica de la siguiente forma:

"Las API del sistema de archivos no son adecuadas para que los componentes de negocio accedan a los datos. Los componentes de negocio deben usar una API de administrador de recursos, como JDBC, para almacenar los datos".
References
[1] The Enterprise JavaBeans 2.1 Specification Sun Microsystems
[2] Standards Mapping - Common Weakness Enumeration CWE ID 576
desc.structural.java.ejb_bad_practices_use_of_java_io
Abstract
El programa infringe la especificación de Enterprise JavaBeans al emplear sockets.
Explanation
La especificación de Enterprise JavaBeans exige que todos los proveedores de bean sigan una serie de instrucciones de programación diseñadas para garantizar que el bean sea portátil y se comporte de forma coherente en cualquier contenedor EJB [1].

En este caso, el programa infringe la siguiente instrucción EJB:

"Un enterprise bean no debe intentar escuchar en un socket, aceptar conexiones en un socket ni utilizar un socket para multidifusión".

Se trata de un requisito que la especificación justifica de la siguiente forma:

"La arquitectura EJB permite a una instancia de enterprise bean ser un cliente de socket de red, pero no le permite ser un servidor de red. Permitir que la instancia se convierta en un servidor de red podría hacer que entrara en conflicto con la función básica de enterprise bean para servir a los clientes EJB".
References
[1] The Enterprise JavaBeans 2.1 Specification Sun Microsystems
[2] Standards Mapping - Common Weakness Enumeration CWE ID 577
desc.structural.java.ejb_bad_practices_use_of_sockets
Abstract
El programa infringe la especificación de Enterprise JavaBeans al usar primitivos de sincronización de subprocesos.
Explanation
La especificación de Enterprise JavaBeans exige que todos los proveedores de bean sigan una serie de instrucciones de programación diseñadas para garantizar que el bean sea portátil y se comporte de forma coherente en cualquier contenedor EJB [1].

En este caso, el programa infringe la siguiente instrucción EJB:

"Un enterprise bean no debe usar primitivos de sincronización de subprocesos para sincronizar la ejecución de varias instancias".

Se trata de un requisito que la especificación justifica de la siguiente forma:

"Esta regla es necesaria para garantizar una semántica de tiempo de ejecución coherente, porque mientras algunos contenedores EJB pueden usar un solo JVM para ejecutar todas las instancias de enterprise bean, otros podrían distribuir las instancias entre varios JVM".
References
[1] The Enterprise JavaBeans 2.1 Specification Sun Microsystems
[2] THI01-J. Do not invoke ThreadGroup methods CERT
[3] Standards Mapping - Common Weakness Enumeration CWE ID 574
desc.structural.java.ejb_bad_practices_use_of_synchronization_primitives