시큐어코딩 Public 메소드로부터 반환된 Private 배열
- 작성자 :
- 시***딩
- 작성일 :
- 2020-11-12 14:16:30
- 조회수 :
- 4,869
- 구분 :
- 기타
- 진행상태 :
- 완료
Q
전자정부 프레임워크로 프로젝트 개발중입니다.
시큐어코딩 툴을 이용하여 'Public 메소드로부터 반환된 Private 배열' 취약점을 발견하였습니다.
툴에 나온 가이드 대로 객체를 새로 생성해서 리턴하면 userVoList 가 null로 되어
빈 객체를 리턴합니다.
public List<UserVO> getUserVoList() {
List<UserVO> list = new ArrayList<UserVO>();
if (userVoList != null) {
for (UserVO userVo : userVoList) {
System.out.println("게터 : " + userVo.getUserName());
list.add(userVo);
}
}
return list;
}
그러나 아래와 같이 리턴값을 본래의 값 그대로 리턴을 하게 되면 데이터가 정상적으로 출력됩니다..
그렇지만 취약점 해결은 못하게 되지요..
public List<UserVO> getUserVoList() {
List<UserVO> list = new ArrayList<UserVO>();
if (userVoList != null) {
for (UserVO userVo : userVoList) {
System.out.println("게터 : " + userVo.getUserName());
list.add(userVo);
}
}
return userVoList;
}
전자정부프레임워크에서 이런 현상이 발생되는 것 같습니다.
이미지 첨부합니다..
무슨 방법이 있을까요?
일반 Spring boot로 테스트 하였을 때는 정상적으로 데이터 출력이 이루어집니다.
시큐어코딩 툴을 이용하여 'Public 메소드로부터 반환된 Private 배열' 취약점을 발견하였습니다.
툴에 나온 가이드 대로 객체를 새로 생성해서 리턴하면 userVoList 가 null로 되어
빈 객체를 리턴합니다.
public List<UserVO> getUserVoList() {
List<UserVO> list = new ArrayList<UserVO>();
if (userVoList != null) {
for (UserVO userVo : userVoList) {
System.out.println("게터 : " + userVo.getUserName());
list.add(userVo);
}
}
return list;
}
그러나 아래와 같이 리턴값을 본래의 값 그대로 리턴을 하게 되면 데이터가 정상적으로 출력됩니다..
그렇지만 취약점 해결은 못하게 되지요..
public List<UserVO> getUserVoList() {
List<UserVO> list = new ArrayList<UserVO>();
if (userVoList != null) {
for (UserVO userVo : userVoList) {
System.out.println("게터 : " + userVo.getUserName());
list.add(userVo);
}
}
return userVoList;
}
전자정부프레임워크에서 이런 현상이 발생되는 것 같습니다.
이미지 첨부합니다..
무슨 방법이 있을까요?
일반 Spring boot로 테스트 하였을 때는 정상적으로 데이터 출력이 이루어집니다.
A
안녕하세요.
표준프레임워크 센터입니다.
Public 메소드로부터 반환된 Private 배열 취약점 같은 경우
private 필드를 public 메소드로 받아 접근 및 수정이 가능한 취약성으로 탐지됩니다.
조치하신 바대로 객체를 새로 만들어 리턴해 주는 것이 맞습니다.
(단 두번째 방법은 의미가 없는 코드로 되어 있는듯 합니다.)
다만 현재 원본 객체를 참조에 의한 복사이 이루어 지고 있는바 clone을 통해 값을 복사해 넣어야 할 것 같습니다.
해당 내용은 KISA의 보안 가이드를 참고하시면 될 것 같습니다.
https://www.kisa.or.kr/jsp/common/downloadAction.jsp?bno=259&dno=88&fseq=1
https://skogkatt.tistory.com/274
감사합니다.
표준프레임워크 센터입니다.
Public 메소드로부터 반환된 Private 배열 취약점 같은 경우
private 필드를 public 메소드로 받아 접근 및 수정이 가능한 취약성으로 탐지됩니다.
조치하신 바대로 객체를 새로 만들어 리턴해 주는 것이 맞습니다.
(단 두번째 방법은 의미가 없는 코드로 되어 있는듯 합니다.)
다만 현재 원본 객체를 참조에 의한 복사이 이루어 지고 있는바 clone을 통해 값을 복사해 넣어야 할 것 같습니다.
해당 내용은 KISA의 보안 가이드를 참고하시면 될 것 같습니다.
https://www.kisa.or.kr/jsp/common/downloadAction.jsp?bno=259&dno=88&fseq=1
https://skogkatt.tistory.com/274
감사합니다.