서버 사이드 요청 위조 (SSRF)

Server-Side Request Forgery (SSRF)

설명

웹 서버에서 주어진 URL 등을 바탕으로 요청을 실행할 때, 승인된 목적지인지 충분히 검증하지 않음으로 인해 발생합니다.

잠재적 영향

  • 데이터 탈취 (Confidentiality): 공격자는 민감한 데이터에 접근할 수 있습니다.

  • 무단 코드 실행 (Integrity): 서버에서 공격자가 인증되지 않은 명령어를 실행할 수 있습니다.

  • 보호 메커니즘 우회 (Access Control): 공격자는 서버를 이용해 방화벽을 우회하거나 내부 네트워크를 스캔할 수 있는 등 보안 보호책을 우회할 수 있습니다.

해결 방법

  1. 입력 검증: 사용자가 제공하는 URL 입력값을 철저히 검증하고 화이트리스트를 통해 신뢰할 수 있는 도메인만 허용합니다.

  2. 네트워크 접근 제어: 외부 네트워크로부터의 요청을 제한하고 내부 네트워크로의 요청을 차단합니다.

취약한 코드 및 안전한 코드 예시

취약한 코드

RestTemplate restTemplate = new RestTemplate();
String url = request.getParameter("url");
String result = restTemplate.getForObject(url, String.class);

안전한 코드

설명:

  • 취약한 코드: 이 코드는 클라이언트로부터 얻은 URL을 바로 사용하기 때문에 악의적인 사용자 또는 공격자가 서버 내부 네트워크에 접근하거나 보호 메커니즘을 우회할 수 있습니다.

  • 안전한 코드: 수정된 코드는 URL을 화이트리스트와 대조하여 신뢰할 수 있는 도메인에 대한 요청만 허용합니다. 이로써 공격자가 임의의 URL을 이용해 서버를 악용하는 것을 방지할 수 있습니다.

관련 CVE

참조

Last updated