서버측 요청 위조
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