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.

2 elementos encontrados
Debilidades
Abstract
No se recomiendan las operaciones de escritura Direct Open SQL, por lo que se deben evitar.
Explanation
Las operaciones de escritura de Direct Open SQL (Insertar/Actualizar/Modificar/Eliminar) son, en general, poco recomendables y deben evitarse. porque minan la integridad y seguridad del sistema.



Además, las operaciones de escritura de Direct Open SQL son propensas a errores y pueden provocar comportamientos inesperados del sistema. Algunos de los problemas a los que se debe prestar atención en SAP son:

- SAP recomienda el uso de las técnicas "update bundling" (unión de actualizaciones) para asegurar la integridad de los datos dentro de una LUW (unidad lógica de trabajo) que tal vez abarque varias LUW de bases de datos. Las modificaciones directas en las entradas de tabla sin "update bundling" (unión de actualizaciones) pueden dejar la transacción SAP en un estado incoherente.

- Las operaciones de escritura de Direct Open SQL solo establecen los bloqueos de nivel de base de datos y omiten los bloqueos de la aplicación SAP. Esto puede dar lugar a interbloqueos y datos dañados.

- Las operaciones de escritura de Direct Open SQL omiten las comprobaciones de autorización SAP dentro del programa de aplicación.

- Cuando se usan mecanismos estándar para escribir entradas de tablas, comprobaciones de edición, pistas de auditoría, actualizaciones de dependientes (como cambiar documentos, por ejemplo) se ejecutan todas correctamente. Esto no sucede así cuando se utilizan operaciones de escritura Direct Open SQL.

References
[1] Standards Mapping - Common Weakness Enumeration CWE ID 662
[2] Standards Mapping - Common Weakness Enumeration Top 25 2022 [22] CWE ID 362
[3] Standards Mapping - Common Weakness Enumeration Top 25 2023 [21] CWE ID 362
[4] Standards Mapping - DISA Control Correlation Identifier Version 2 CCI-002235
[5] Standards Mapping - General Data Protection Regulation (GDPR) Indirect Access to Sensitive Data
[6] Standards Mapping - NIST Special Publication 800-53 Revision 4 AC-6 Least Privilege (P1)
[7] Standards Mapping - NIST Special Publication 800-53 Revision 5 AC-6 Least Privilege
[8] Standards Mapping - Security Technical Implementation Guide Version 5.2 APSC-DV-000500 CAT II
[9] Standards Mapping - Security Technical Implementation Guide Version 5.3 APSC-DV-000500 CAT II
[10] Standards Mapping - Security Technical Implementation Guide Version 6.1 APSC-DV-000500 CAT II
desc.structural.abap.sql_bad_practices_direct_update
Abstract
Los identificadores sin esquemas no deberían utilizarse en los paquetes de derechos del invocador.
Explanation
En los derechos de un invocador, o paquete AUTHID CURRENT_USER, los identificadores se solucionan en primer lugar según el esquema del usuario actual. Esto puede provocar un comportamiento inesperado si el definidor del código no expresa explícitamente a qué esquema pertenece un identificador.

Ejemplo 1: El siguiente código comprueba si un usuario tiene permisos para realizar una acción mediante la búsqueda del usuario en una tabla de permisos. La mayoría de los usuarios solo tendrán acceso de lectura a SYS.PERMISSIONS y no podrá modificar los permisos definidos.


CREATE or REPLACE FUNCTION check_permissions(
p_name IN VARCHAR2, p_action IN VARCHAR2)
RETURN BOOLEAN
AUTHID CURRENT_USER
IS
r_count NUMBER;
perm BOOLEAN := FALSE;
BEGIN
SELECT count(*) INTO r_count FROM PERMISSIONS
WHERE name = p_name AND action = p_action;
IF r_count > 0 THEN
perm := TRUE;
END IF;
RETURN perm;
END check_permissions


Si el usuario que llama la función check_permissions define una tabla PERMISSIONS en su esquema, la base de datos decidirá que el identificador haga referencia a la tabla local. El usuario podría tener acceso de escritura a la nueva tabla y podría modificarla para obtener los permisos que de otro modo no tendría.
References
[1] Oracle Oracle Database PL/SQL Language Reference
[2] Standards Mapping - General Data Protection Regulation (GDPR) Indirect Access to Sensitive Data
desc.structural.sql.sql_bad_practices_underspecified_identifier