HTTP Parameter Pollution (HPP) 및 SSRF

HTTP Parameter Pollution

설명

애플리케이션이 사용자 입력을 검증 없이 URL에 직접 포함할 경우 HTTP Parameter Pollution (HPP) 또는 더 심각한 Server-Side Request Forgery (SSRF) 공격이 발생할 수 있습니다. HPP 공격은 URL 매개변수에 인코딩된 구분자를 삽입하여 요청의 논리를 변경할 수 있도록 합니다. SSRF 공격은 서버가 공격자가 지정한 외부 URL에 요청을 보내도록 유도하여 내부 네트워크에 대한 접근을 시도하는 공격입니다.

잠재적 영향

  • 공격자가 기존 요청 파라미터를 덮어씌여 권한이 없는 기능을 수행하도록 유도할 수 있습니다.

  • 보안이 취약한 내부 API 또는 클라우드 메타데이터 서비스(http://169.254.169.254/)에 접근 가능할 위험 또한 존재합니다.

  • 내부 네트워크의 민감한 정보 유출 위험이 존재합니다.

해결 방법

  • 사용자 입력을 URL 또는 URL 매개변수에 직접 포함하지 않도록 적용하세요.

  • Lookup Table을 사용하여 미리 정의된 값만 허용하도록 하세요.

  • URL 인코딩(java.net.URLEncoder.encode)을 적용하여 입력값을 안전하게 처리하세요.

    • 가능하면 Lookup Table로 whitelist를 적용하여 검증하는 것을 추천합니다. URL 인코딩 경우 다른 서버로 넘어가는 과정에서 디코딩이 발생하여 여전히 문제가 발생할 소지가 있습니다.

  • 사용자 입력을 통한 전체 URL 요청을 허용하지 않도록 적용하세요.

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

취약한 코드

안전한 코드

설명:

  • 취약한 코드: 사용자 입력을 직접 URL 매개변수에 포함하여 HPP 및 SSRF 공격이 발생할 수 있습니다.

  • 안전한 코드: Lookup Table을 사용하여 허용된 값만 전달하며, 사용자 입력을 직접 URL에 포함하지 않도록 합니다.

관련 CVE

참조

Last updated