Recent Posts
Recent Comments
Link
06-28 05:11
Today
Total
관리 메뉴

삶 가운데 남긴 기록 AACII.TISTORY.COM

JAVA 보안 Resource Injection 본문

DEV&OPS/Java

JAVA 보안 Resource Injection

ALEPH.GEM 2022. 8. 3. 17:46

Resource Injection

파일이나 소켓 포트 등 외부 입력값을 식별자로 사용하는 경우, 시스템 자원에 임의로 접근하거나 수정할 수 있고 잘못된 입력값으로 인해 시스템이 불안정해질 수 있습니다.

입력 값을 검증하거나 사전에 정의된 리스트에서 선택되도록 작성해 방어합니다. 외부 입력이 파일명인 경우 경로 순회를 수행할 수 있는 문자를 제거해야 합니다.

 

아래 예제는 외부의 입력을 소켓 번호로 그대로 사용하고 있어 안전하지 않은 예입니다.

public void service(){
    //외부에서 입력 받은 데이터
    String service = props.getProperty("Service No");
    int port = Integer.parseInt(service);
    //외부 입력 값으로 소켓생성
    serverSocket = new ServerSocket(port+3000);
    ...
}

아래 예제는 안전하게 수정한 예입니다.

public void service(){
    //외부 입력 데이터
    service = props.getProperty("Service No");
    //외부 입력 값을 기본 검사를 함
    if("".equals(service)) servie = "8080";
    int port = Integer.parseInt(service);
    //리스트에서 적합한 값을 할당
    switch(port){
        case 1: 
            port = 3001; break;
        case 2:
            port = 3002; break;
        default:
            port = 3000;
    }
    serverSocket = new ServerSocket(port);
    ...
}

마찬가지로 IP나 PORT번호를 args [0]에 전달된 값을 그대로 실행하는 경우도 의도와 다른 동작을 할 수 있으므로 값을 검증하는 코드를 추가해야 합니다.

 

 

 

 

참고

http://cwe.mitre.org/data/definitions/99.html 

 

CWE - CWE-99: Improper Control of Resource Identifiers ('Resource Injection') (4.8)

div.collapseblock { display:inline} CWE-99: Improper Control of Resource Identifiers ('Resource Injection')Weakness ID: 99Abstraction: ClassStructure: Simple The software receives input from an upstream component, but it does not restrict or incorrectly re

cwe.mitre.org

 

728x90

'DEV&OPS > Java' 카테고리의 다른 글

JAVA 보안 OS Command Injection  (0) 2022.08.03
JAVA 보안 Cross-site Scripting  (0) 2022.08.03
JAVA 보안 SQL Injection  (0) 2022.08.03
CRUD  (0) 2022.07.26
MVC 패턴  (0) 2022.07.21