界: API Abuse

API 是调用方和被调用方之间的约定。最常见的 API 滥用是由于调用方未能遵守此约定的终止导致的。例如,如果某个程序在调用 chroot() 后未能调用 chdir(),则违反了用于指定如何安全地更改活动根目录的约定。库滥用的另一个典型示例是期望被调用方向调用方返回可信的 DNS 信息。在这种情况下,调用方通过对被调用方行为做出某种假设(返回值可用于身份验证目的)滥用其 API。另一方也可能违反调用方-被调用方约定。例如,如果编码器子类化 SecureRandom 并返回一个非随机值,则将违反此约定。

2 个项目已找到
弱点
Abstract
Open SQL 直接写入操作不可取,应尽量避免。
Explanation
Open SQL 直接写入操作(插入/更新/修改/删除)通常不可取,应尽量避免。它们会破坏系统的完整性和安全性,且不允许这样操作。



此外,Open SQL 直接写入操作很容易出错,并可能会导致意外的系统行为。在 SAP 中需要留意的一些问题包括:

- SAP 建议使用“更新绑定”技巧来保证 SAP LUW(逻辑工作单位)中的数据完整性,其中,数据完整性问题可能会涉及多个数据库 LUW。在不更新绑定的条件下直接修改表条目会导致 SAP 事务不一致。

- Open SQL 直接写入操作仅设置数据库级别锁定,避开 SAP 应用程序锁定。这可能会导致死锁和数据损坏。

- Open SQL 直接写入操作回避开应用程序中的 SAP 授权检查。

- 使用标准机制编写表条目、编辑检查、审计跟踪时,可正确执行相关更新(如更改文档)。使用 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
不应在调用程序的权限程序包中使用没有架构的标识符。
Explanation
在调用程序的权限或 AUTHID CURRENT_USER 程序包中,标识符是根据当前用户的架构首先解析的。如果该代码的定义程序未明确表明标识符所属的架构,这可能会导致意外的行为。

示例 1:以下代码通过在权限表中查找用户来检查该用户是否具有执行相应操作的权限。大多数用户仅具有 SYS.PERMISSIONS 的读取权限,且无法修改已定义的权限。


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


如果调用 check_permissions 函数的用户在其架构中定义了一个 PERMISSIONS 表,则该数据库会解析该标识符以引用本地表。该用户将具有对新表的写入权限,并可以对其进行修改以获得在其他情况下不可能拥有的权限。
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