본문 바로가기
about Security/SECURE CODING

[캡슐화] 잘못된 세션에 의한 데이터 정보 노출 (5등급)

by saniii 2021. 8. 10.

 

0. 개요 

 

다중 스레드 환경에서는 싱글톤(Singleton) 객체 필드에 경쟁 조건(Race Condition)이 발생할 수 있다.

따라서 다중 스레드 환경인 JAVA의 서블릿(Servlet) 등에서는 정보를 저장하는 멤버변수가 포함되지 않도록 하여,

서로 다른 세션에서 데이터를 공유하지 않도록 한다.

 

 

 

1. 보안 대책

 

- 싱글톤 패턴을 사용하는 경우, 변수 범위에 주의를 기울인다.

: 특히  JAVA개발 경우 HttpServlet클래스의 하위클래스에서 멤버 필드를 선언하지 않도록 하고,

  필요한 경우 지역 변수를 선언하여 사용한다.

 

 

 

2. 진단 방법

 

 - HttpSerlvet / JSP / Controller 에서 멤버변수를 사용하는지 확인

 

 

 

3. 코드 예시

 

# 1  -  잘못된 세션에 의한 데이터 정보 노출 - 안전하지 않은 코드 예시(JAVA)

 

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

JSP 선언부(<%! 소스코드 %>)에 선언한 변수는 해당 JSP에 접근하는 모든 사용자에게 공유된다.

먼저 호출한 사용자가 값을 설정하고 사용하기 전에 다른 사용자의 호출이 발생하게 되면,

뒤에 호출 한 사용자가 설정한 값이 모든 사용자에게 적용되게 된다.

 

JSP의 서블릿(<% 소스코드 %>)에 정의한 변수는 _jspService 메소드의 지역변수로 선언되므로 공유가 발생하지 않아 안전하다.

 

 

# 1  +  잘못된 세션에 의한 데이터 정보 노출 - 안전한 코드 예시(JAVA)

 

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

 

# 2  -  잘못된 세션에 의한 데이터 정보 노출 - 안전하지 않은 코드 예시(JAVA)

 

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

Controller에 멤버 변수를 사용하면 공유가 발생하여 동기화 오류가 발생할 수 있다.

 

Controller에 멤버 변수를 사용하지 않고 지역 변수로 사용하도록 하자.

 

# 2  +  잘못된 세션에 의한 데이터 정보 노출 - 안전한 코드 예시(JAVA)  

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

* controller : 대규모의 서비스의 경우 처리해야할 서비스들이 많아지는데 이때 하나의 클래스에서 모두 처리하지 않고 

                      역할 분담을 하도록 한다. 나눠받는 중간 제어자 역할을 하는 것이  controller !

 

 

 

4. 해당 취약점 CASE

 

- HttpSerlvet / JSP / Controller에서 상수가 아닌 멤버 변수를 사용하는 경우

 

 

 

#. 참고 블로그 

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

 

[구현보안] 캡슐화 01 - 잘못된 세션에 의한 데이터 정보 노출

가. 원인 - 다중 스레드 환경에서 싱글톤 객체의 멤버변수를 사용하는 경우 나. 영향 - 다중 스레드 환경에서 싱글톤 객체 필드에 경쟁조건이 발생 - 싱글톤 객체의 멤버변수를 여러 스레드에 의

prokyhsigma.tistory.com

 

댓글