IT/앱사용방법

시큐어코딩) 파이썬 포맷 스트링 삽입 공격 예방(예시 코드 포함)

볼통통알파카 2022. 6. 17. 21:00
반응형
포맷 스트링 삽입 공격 설명

외부에서 입력한 값을 검증하지 않고, 입출력 함수의 포맷 문자열 그대로 사용하는 경우 발생.

파이썬에 있는 포맷 문자열 함수를 이용하여 취약 프로세스를 공격하여 권한 취득하여 임의로 코드를 실행하는 공격 기법

파이썬 포맷 스트링 삽입 공격 방식

{main.__init__.__globals__[AUTHENTICATE_KEY]} 와 같은 문자열을 입력하여 내부 정보를 유출 유도

 

공격 예방 코드 예
AUTHENTICATE_KEY = 'Passw0rd'    
def make_user_message(request):
 user_info = get_user_info(request.POST.get('user_id', ''))     
 
 # 사용자가 입력한 문자열을 포맷 문자열로 사용하지 않아 안전함
 message = 'user name is {}'.format(user_info.name)    
  return render(request, '/user_page', {'message':message})

외부에서 입력받은 문자열은 포맷 지정을 이용하여 바인딩하는 방식으로 예방.

 

정리

1. 외부에서 입력하는 값을 반드시 포맷 지정자를 이용하여 바인딩함

2. 직접적으로 포맷 문자열로 사용하는 방식 지양

반응형