계: API Abuse

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

J2EE Bad Practices: Sockets

Abstract
웹 응용 프로그램의 소켓 기반 통신은 오류가 발생할 가능성이 큽니다.
Explanation
J2EE 표준은 더 높은 수준의 프로토콜을 사용할 수 없을 때 레거시 시스템과의 통신을 위해서만 Use of Sockets를 허용합니다. 자체적으로 통신 프로토콜을 제작하려면 다음과 같은 어려운 보안 문제와 씨름해야 합니다.

- 대역 내 및 대역 외 시그널(signal) 처리

- 프로토콜 버전 간 호환성

- 채널 보안

- 오류 처리

- 네트워크 제약 조건(방화벽)

- 세션 관리

사용자 지정 통신 프로토콜은 보안 전문가의 정밀 검사 없이는 보안 문제가 발생할 가능성이 큽니다.

표준 프로토콜의 사용자 지정 구현도 마찬가지로 수많은 동일한 이슈가 적용됩니다. 일반적으로 표준 프로토콜 구현 관련 보안 문제를 다루는 데 사용 가능한 리소스가 많지만 이들 리소스는 공격자도 사용할 수 있습니다.
References
[1] Java 2 Platform Enterprise Edition Specification, v1.4 Sun Microsystems
[2] Standards Mapping - Common Weakness Enumeration CWE ID 246
[3] Standards Mapping - OWASP API 2023 API8 Security Misconfiguration
desc.semantic.java.j2ee_badpractices_sockets