보안/SW보안약점 진단원

[설계보안]HTTP 프로토콜 유효성 검증

re-bugger 2022. 6. 24. 19:48

분류: 입력데이터 검증 및 표현 / HTTP 응답분할, 신뢰되지 않는 URL 주소로 자동접속 연결

가. 항목명

HTTP 프로토콜 유효성 검증

나. 취약점 설명

HTTP 요청에 삽입한 인자 값이 HTTP 응답헤더에 포함되어 전달될 때 개행문자를 이용하여 첫 번째 응답을 종료시키고 두 번째 응답에 악의적인 코드가 주입되어 XS공격이 가능해지는 취약점

다. 보안대책

① 외부입력값을 쿠기 및 HTTP 헤더정보로 사용하는 경우 HTTP 응답분할 취약점을 가지지 않도록 필터링

② 외부입력 값이 페이지 이동(리다이렉트 및 포워드)을 위한 URL 으로 사용되는 경우 허용된 URL 목록의 선택자료 사용

라. 설계시 고려사항

① 외부입력 값을 쿠키 및 HTTP 헤더정보로 사용하는경우 HTTP 응답분할 취약점 공격이 가능함

  • HTTP 응답 헤더에 삽입되는 외부입력 값은 반드시 \r\n 문자를 제거하여 사용

② 외부입력 값이 페이지 이동(리다이렉트 및 포워드)을 위한 URL 로 사용되는 경우

  • URL 목록을 소스코드에 하드코딩 하거나 설정파일(XML, properties) 에 저장하여 허용된 URL로만 이동하도록 설계

마. 진단기준 및 세부사항

① HTTP 응답분할 취약점 대응

  • 응답헤더에 값을 쓰는 기능이 식별되고 입력값에 포함된 개행문자를 필터링
    • 응답헤더에 값을 쓰는 함수 ( setHeader, addCookie, sen-dRedirect..)
    • 개행문자 CR(\r), LF(\n)
  • 개행문자에 대한 필터링 적용
    • 응답 분할이 발생되는지 점검할 수 있는 테스트 계획
      • 테스트 입력 값: CR(\r), LF(\n) 이 포함된 입력 값

② 외부입력 값이 페이지 이동(리다이렉트 및 포워드)을 URL로 사용하는 경우 대응

  • 시스템에서 이동이 허용된 도메인 또는 주소 목록을 정의
  • 미리 정의한 허용 목록을 이용한 입력 값을 검증하는 방법과 모듈 설계

바. 안전한 보안설계의 예

No 요구사항명 해결방안 검수기준 비고
1 DB사용자 계정에 최소권한 부여 애플리케이션에서 사용하는 DB 사용자 계정은 애플리케이션에서 사용하는 테이블, 뷰, 프로시저에 대해서만 사용권한을 부여한다 애플리케이션에서 사용하는 DB사용자 계정은 테이블, 뷰, 프로시저에 대한 권한만 적용된다. 지속적인 DB사용자 계정 관리가 필요