계: API Abuse

API는 호출자와 피호출자 간의 계약입니다. 가장 흔한 형태의 API 오용은 호출자가 이 계약에서 자신의 몫을 이행하지 못하기 때문에 발생합니다. 예를 들어, 프로그램이 chroot()를 호출한 후 chdir()을 호출하지 못하면 활성 루트 디렉터리를 안전하게 변경하는 방법을 지정하는 계약을 위반하는 것입니다. 라이브러리 오용의 또 다른 좋은 예는 피호출자가 호출자에게 신뢰할 만한 DNS 정보를 반환할 것으로 예상하는 것입니다. 이 경우, 호출자는 자신의 행동에 대해 특정한 가정을 함으로써(반환 값이 인증 목적으로 사용될 것으로 예상) 피호출자 API를 오용합니다. 다른 쪽에서 호출자-피호출자 계약을 위반할 수도 있습니다. 예를 들어, 코더가 하위 클래스 SecureRandom을 지정하고 임의 값이 아닌 값을 반환하는 경우 계약을 위반하는 것입니다.

5 개 항목 찾음
취약점
Abstract
프로그램은 AWT/Swing을 사용하여 Enterprise JavaBeans 규격을 위반합니다.
Explanation
Enterprise JavaBeans 규격에 따르면 모든 bean 공급자는 bean이 이식 가능하고 EJB 컨테이너에서 일관성 있게 동작하도록 하기 위한 프로그래밍 지침을 따라야 합니다[1].

이 경우, 프로그램은 다음 EJB 지침을 위반합니다.

"enterprise bean은 디스플레이에 정보를 출력하거나 키보드에서 정보를 입력받을 때 AWT 기능을 사용할 수 없습니다."

규격에서 다음과 같이 정당화하는 요구 사항입니다.

"대부분의 서버는 응용 프로그램과 서버 시스템에 연결된 키보드/디스플레이가 직접 상호 작용하는 것을 허용하지 않습니다."
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
프로그램은 클래스 로더를 사용하여 Enterprise JavaBeans 규격을 위반합니다.
Explanation
Enterprise JavaBeans 규격에 따르면 모든 bean 공급자는 bean이 이식 가능하고 EJB 컨테이너에서 일관성 있게 동작하도록 하기 위한 프로그래밍 지침을 따라야 합니다[1].

이 경우, 프로그램은 다음 EJB 지침을 위반합니다.

"enterprise bean은 클래스 로더 생성, 현재 클래스 로더 얻기, 컨텍스트 클래스 로더 설정, 보안 관리자(security manager) 설정, 새 보안 관리자(security manager) 생성, JVM 중단 또는 입력, 출력 및 오류 스트림 변경을 할 수 없습니다."

규격에서 다음과 같이 정당화하는 요구 사항입니다.

"이들 함수는 EJB 컨테이너용으로 예약되어 있습니다. enterprise bean이 이들 함수를 사용하면 보안이 약해지고 컨테이너가 런타임 환경을 올바로 관리하는 기능이 저하됩니다."
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
프로그램은 java.io 패키지를 사용하여 Enterprise JavaBeans 규격을 위반합니다.
Explanation
Enterprise JavaBeans 규격에 따르면 모든 bean 공급자는 bean이 이식 가능하고 EJB 컨테이너에서 일관성 있게 동작하도록 하기 위한 프로그래밍 지침을 따라야 합니다[1].

이 경우, 프로그램은 다음 EJB 지침을 위반합니다.

"enterprise bean은 file system의 파일 및 디렉터리에 접근할 때 java.io 패키지를 사용할 수 없습니다."

규격에서 다음과 같이 정당화하는 요구 사항입니다.

"File system API는 비즈니스 구성 요소가 데이터에 접근할 수 있는 기능이 없습니다. 비즈니스 구성 요소는 JDBC와 같은 리소스 관리자 API를 사용하여 데이터를 저장해야 합니다."
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
프로그램은 소켓을 사용하여 Enterprise JavaBeans 규격을 위반합니다.
Explanation
Enterprise JavaBeans 규격에 따르면 모든 bean 공급자는 bean이 이식 가능하고 EJB 컨테이너에서 일관성 있게 동작하도록 하기 위한 프로그래밍 지침을 따라야 합니다[1].

이 경우, 프로그램은 다음 EJB 지침을 위반합니다.

"enterprise bean은 소켓에서 수신 대기하거나 소켓에서 연결을 수락하거나 멀티캐스트에 소켓을 사용할 수 없습니다."

규격에서 다음과 같이 정당화하는 요구 사항입니다.

"EJB 아키텍처를 사용하면 enterprise bean 인스턴스가 네트워크 소켓 클라이언트가 될 수 있지만 네트워크 서버는 될 수가 없습니다. 인스턴스가 네트워크 서버가 되면 EJB 클라이언트에게 서비스를 제공하는 역할에서 enterprise bean의 기본 함수와 충돌합니다."
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
프로그램은 스레드 동기화 기본 형식을 사용하여 Enterprise JavaBeans 규격을 위반합니다.
Explanation
Enterprise JavaBeans 규격에 따르면 모든 bean 공급자는 bean이 이식 가능하고 EJB 컨테이너에서 일관성 있게 동작하도록 하기 위한 프로그래밍 지침을 따라야 합니다[1].

이 경우, 프로그램은 다음 EJB 지침을 위반합니다.

"enterprise bean은 여러 인스턴스의 실행을 동기화할 때 스레드 동기화 기본 형식을 사용할 수 없습니다."

규격에서 다음과 같이 정당화하는 요구 사항입니다.

"이 규칙은 일부 EJB 컨테이너가 하나의 JVM을 사용하여 모든 enterprise bean의 인스턴스를 실행하는 반면 나머지는 여러 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