서버 사이드 요청 위조 (SSRF)
Server-Side Request Forgery (SSRF)
설명
웹 서버에서 주어진 URL 등을 바탕으로 요청을 실행할 때, 승인된 목적지인지 충분히 검증하지 않음으로 인해 발생합니다.
잠재적 영향
데이터 탈취 (Confidentiality): 공격자는 민감한 데이터에 접근할 수 있습니다.
무단 코드 실행 (Integrity): 서버에서 공격자가 인증되지 않은 명령어를 실행할 수 있습니다.
보호 메커니즘 우회 (Access Control): 공격자는 서버를 이용해 방화벽을 우회하거나 내부 네트워크를 스캔할 수 있는 등 보안 보호책을 우회할 수 있습니다.
해결 방법
입력 검증: 사용자가 제공하는 URL 입력값을 철저히 검증하고 화이트리스트를 통해 신뢰할 수 있는 도메인만 허용합니다.
네트워크 접근 제어: 외부 네트워크로부터의 요청을 제한하고 내부 네트워크로의 요청을 차단합니다.
취약한 코드 및 안전한 코드 예시
취약한 코드
RestTemplate restTemplate = new RestTemplate();
String url = request.getParameter("url");
String result = restTemplate.getForObject(url, String.class);안전한 코드
설명:
취약한 코드: 이 코드는 클라이언트로부터 얻은 URL을 바로 사용하기 때문에 악의적인 사용자 또는 공격자가 서버 내부 네트워크에 접근하거나 보호 메커니즘을 우회할 수 있습니다.
안전한 코드: 수정된 코드는 URL을 화이트리스트와 대조하여 신뢰할 수 있는 도메인에 대한 요청만 허용합니다. 이로써 공격자가 임의의 URL을 이용해 서버를 악용하는 것을 방지할 수 있습니다.
관련 CVE
참조
Last updated