본문 바로가기
about Security/SECURE CODING

[캡슐화] Private 배열에 Public 데이터 할당 (5등급)

by saniii 2021. 8. 10.

 

0. 개요 

 

public으로 선언된 메소드의 인자가 private 선언된 배열에 저장되면,

private배열을 외부에서 접근하여 배열수정과 객체 속성변경이 가능해진다.

 

 

 

1. 보안 대책

 

public으로 선언된 메서드의 인자를 private 선언된 배열로 저장되지 않도록 한다.

  : 인자로 들어온 배열의 복사본을 생성하고 clone() 메소드를 통해 복사된 원소를 저장하도록 하여

    private변수에 할당하여 private선언된 배열과 객체속성에 대한 의도하지 않게 수정되는 것을 방지한다.

 

 - 배열 객체의 원소가 String 타입 등과 같이 변경이 되지 않는 경우에는 인자로 들어온 배열의 복사본을 생성하여 할당한다.

 

 - 전달받은 public 배열의 레퍼런스 대신 값을 private 배열에 할당한다.

 

 

 

2. 진단 방법

 

 - private 배열을 사용하는지 확인한다.

 - public 메서드의 인자를 private 배열에 직접 할당하는지 확인한다.

 

 

 

3. 코드 예시

 

# 1  -  Private 배열에 Public 데이터 할당 - 안전하지 않은 코드 예시 (JAVA)

소프트웨어 개발보안 가이드 (2019.11) / 행정안전부 & 한국인터넷진흥원

userRole은 private임에도 불구하고 public으로 선언된 setUserRoles를 통해 인자가 할당되기 때문에 

배열의 원소를 외부에서 변경할 수 있게 된다.

( >> 의도하지 않은 배열과 원소에 대한 객체속성 수정이 발생 가능. )

 

인자로 들어온 배열의 복사본을 생성하고 clone() 메소드를 통해 복사된 원소를 저장하도록 하여

private 변수에 할당하면 private으로 할당된 배열과 원소에 대한 의도하지 않은 수정을 방지하자.

 

# 1  +  Private 배열에 Public 데이터 할당 - 안전한 코드 예시(JAVA)

소프트웨어 개발보안 가이드 (2019.11) / 행정안전부 & 한국인터넷진흥원

 * clone() :  원본 객체의 필드값가 동일한 값을 가지는 새로운 객체를 생성

            - 원본의 객체를 안전하게 보호하기 위해서 사용한다.

            ** cloneable 인터페이스를 구현하지 않으면 clone()메소드를 호출할 때 예외발생한다.

            - 얕은 복제와 깊은 복제가 있는데 위의 예시는 깊은 복제로 복제된 참조 객체를 변경해도 원본 객체가 변경되지 않는다.

 

 

# 2  -  Private 배열에 Public 데이터 할당 - 안전하지 않은 코드 예시(JAVA)

소프트웨어 개발보안 가이드 (2019.11) / 행정안전부 & 한국인터넷진흥원

같은 경우이지만 다른 점은 배열의 원소가 String타입 등과 같이 수정이 되지 않는다는 점이다. 

 

# 2  +  Private 배열에 Public 데이터 할당 - 안전한 코드 예시(JAVA) 

소프트웨어 개발보안 가이드 (2019.11) / 행정안전부 & 한국인터넷진흥원

다음과 같이 인자로 들어온 배열의 복사본을 생성하여 private변수에 할당하면

private으로 할당된 배열에 대한 의도하지 않은 수정을 방지할 수 있다.

 

 

 

4. 해당 취약점 CASE

 

- 새로운 배열을 생성 후 반복문으로 복사하지만, 배열의 원소가 일반 객체일 경우

 

 

 

#. 참고 블로그 

https://prokyhsigma.tistory.com/82?category=848515 

 

[구현보안] 캡슐화 05 - Private 배열에 Public 데이터 할당

가. 원인 - Public으로 선언된 메서드의 인자를 Private 배열로 저장하는 경우 나. 영향 - Private 배열을 외부에서 직접 접근하여 값을 수정이 가능 다. 보안대책 - Public으로 선언된 메서드의 인자를 Pri

prokyhsigma.tistory.com

 

 

댓글