서버측 요청 위조

Server-Side Request Forgery (SSRF)

설명

서버사이드 요청 위조(SSRF)는 공격자가 서버를 통해 임의의 요청을 보내도록 유도하는 취약성입니다. 이를 통해 내부 네트워크에 접근하거나 민감한 데이터를 탈취할 수 있습니다. SSRF는 서버가 사용자의 입력을 기반으로 의도하지 않은 서버에 요청을 보낼 때 발생합니다.

잠재적 영향

  • 내부 네트워크 접근: 공격자가 서버를 통해 내부 네트워크에 접근하여 민감한 정보를 얻을 수 있습니다.

  • 데이터 유출: 공격자가 내부 서버의 데이터를 탈취할 수 있습니다.

  • 서비스 중단: 악의적인 요청으로 인해 서비스가 중단될 수 있습니다.

해결 방법

  • 입력값 검증: 외부 요청을 보내기 전에 입력값을 철저히 검증합니다.

  • 화이트리스트 사용: 허용된 도메인 리스트를 만들어 그 외의 요청은 차단합니다.

  • 보안 라이브러리 사용: SSRF 공격 방지를 위한 보안 라이브러리를 사용합니다.

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

취약한 코드

# Unsafe SSRF in Flask
from flask import Flask, request
import requests

app = Flask(__name__)

@app.route('/fetch')
def fetch():
    url = request.args.get('url')
    response = requests.get(url)
    return response.content

안전한 코드

설명:

  • 취약한 코드: 사용자 입력을 검증하지 않고 외부 요청을 보내 SSRF 공격에 취약합니다.

  • 안전한 코드: URL의 호스트명을 검증하여 허용된 도메인 리스트에 있는 경우에만 요청을 보냅니다. 추가로 요청전 사용되고 있는 스키마 검증을 하도록 합니다. (예: 안전하지 않은 http가 아닌 https 사용만 허용)

참조

Last updated