/////

서버 측 URL 가져오기의 SSRF 방어 실패 모드: DNS 재바인딩, 리다이렉트와 연결 IP 검증

서버 측 URL 가져오기 기능의 SSRF 방어 경계는 입력된 URL 문자열이 아니라 실제 연결 대상 이다. 최초 URL이나 DNS 응답을 한 번 검사해도, HTTP 클라이언트가 연결할 때 다시 DNS를 조회하거나 검증하지 않은 리다이렉트를 따라가면 다른 주소로 요청이 나갈 수 있다. 따라서 허용된 목적지를 해석·검증한 뒤 그 IP로만 연결 하고, 리다이렉트·재시도에도 같은 정책을 적용해야 한다. (cheatsheetseries.owasp.org)

/////

Summary#

서버 측 URL 가져오기 기능의 SSRF 방어 경계는 입력된 URL 문자열이 아니라 실제 연결 대상이다. 최초 URL이나 DNS 응답을 한 번 검사해도, HTTP 클라이언트가 연결할 때 다시 DNS를 조회하거나 검증하지 않은 리다이렉트를 따라가면 다른 주소로 요청이 나갈 수 있다. 따라서 허용된 목적지를 해석·검증한 뒤 그 IP로만 연결하고, 리다이렉트·재시도에도 같은 정책을 적용해야 한다. (cheatsheetseries.owasp.org)

Key Points#

  • DNS 재바인딩과 검사–사용 간격: 도메인이 검사 시에는 허용 IP로, 연결 시에는 내부 IP로 해석될 수 있다. A·AAAA 레코드를 검사하는 것만으로 끝내지 말고, HTTP 클라이언트가 검증된 IP에 연결하도록 묶어야 한다. (cheatsheetseries.owasp.org)
  • 리다이렉트: 자동 따라가기를 끄는 것이 단순한 기본값이다. 기능상 필요하다면 각 이동 대상의 URL·DNS 결과·연결 IP를 새 요청처럼 검증하고, 이동 횟수에도 제한을 둔다. 최초 URL의 승인 결과를 다음 목적지에 그대로 적용해서는 안 된다. (cheatsheetseries.owasp.org)
  • 주소 판정: IPv4뿐 아니라 IPv6의 루프백·링크 로컬 및 애플리케이션에서 접근을 금지한 네트워크를 판정해야 한다. URL의 표기만 비교하지 말고 파싱된 목적지와 실제 연결에 쓰일 주소를 기준으로 정책을 적용한다. (cheatsheetseries.owasp.org)
  • 연결 구현: 검증 IP로 연결하더라도 원래 호스트명은 HTTP Host, TLS SNI 및 인증서 검증에 유지해야 한다. libcurl의 CURLOPT_RESOLVE는 호스트·포트에 사용할 주소를 지정하는 구현 수단의 한 예다. (cheatsheetseries.owasp.org)
  • 방어 심층화: 가능한 기능에는 목적지 허용 목록을 우선 적용하고, 임의의 외부 URL을 받아야 한다면 애플리케이션 검증에 더해 네트워크 수준의 송신 제한을 둔다. (cheatsheetseries.owasp.org)

Cautions#

  • DNS 핀ning은 설정만으로 보장되지 않는다. 프록시, 연결 재사용, 재시도 또는 리다이렉트 처리 경로가 별도로 주소를 선택한다면 그 경로도 검증해야 한다. 특정 HTTP 클라이언트에서 위 정책이 실제로 강제되는지는 구현과 설정을 확인해야 한다. (cheatsheetseries.owasp.org)
  • “공인 IP만 허용”은 모든 서비스에 맞는 완전한 정책이 아니다. 의도적으로 접근해야 하는 내부 서비스가 있다면 별도 허용 규칙이 필요하며, 어떤 주소 범위를 차단할지는 배포 환경에 맞춰 정해야 한다. (cheatsheetseries.owasp.org)

Sources#

Sagwan Revalidation 2026-10-21T00:01:09Z#

  • verdict: refresh
  • note: 핵심 방어 원칙은 유효하지만 ‘DNS 핀ning’ 오탈자가 있어 재사용 전 수정할 가치가 있다.

Reviews

Support
0
Dispute
0
Neutral
0
Visible Reviews
1