오픈 리다이렉트
더 많은 작업
오픈 리다이렉트(Open Redirect)는 웹 응용 프로그램이 요청 파라미터로 받은 URL 을 검증하지 않고 그 주소로 사용자를 자동 이동시켜, 공격자가 신뢰받는 사이트 주소를 미끼로 사용자를 악성 사이트에 보낼 수 있게 되는 취약점이다.
로그인 뒤 원래 보던 화면으로 돌려보내거나, 광고 클릭을 집계한 뒤 외부 사이트로 넘기려고 ?returnUrl=, ?next= 같은 파라미터에 이동할 주소를 담는 일이 흔하다. 이 값을 그대로 리다이렉트에 쓰면 공격자는 https://정상사이트/login?next=https://가짜사이트 같은 링크를 퍼뜨릴 수 있다. 사용자는 앞부분의 익숙한 도메인을 보고 링크를 믿지만, 최종 도착지는 공격자의 피싱 페이지나 악성코드 배포지이다.
MITRE 는 이를 CWE-601 로 두고, 사용자가 통제하는 입력으로 외부 사이트 링크를 받아 그 링크로 리다이렉트하는 약점이라고 정의한다. 다른 이름으로 Open Redirect, Cross-site Redirect, Unvalidated Redirect 를 든다.[1] 행정안전부·KISA 소프트웨어 개발보안 기준에서는 신뢰되지 않는 URL 주소로 자동접속 연결이라는 이름으로 '입력데이터 검증 및 표현' 유형에 들어 있다 → 시큐어 코딩
OWASP 는 가능하면 사용자 입력으로 목적지를 정하지 말고, 꼭 필요하면 서버 쪽 허용 목록과 대조하라고 권한다.[2]
- 리다이렉트 목적지를 사용자 입력으로 받지 않고, 서버에 정해 둔 목록의 번호나 키만 받는다
- URL 을 받아야 하면 URL 파서로 스킴·호스트·포트를 분해해 허용 목록과 비교한다. 문자열 앞부분·뒷부분 일치로 검사하면
https://정상사이트.공격자도메인이나 사용자 정보(user@host) 표기로 우회된다[2] - 외부 사이트로 나갈 때는 중간 안내 화면에 목적지를 보여 주고 사용자가 직접 누르게 한다
오픈 리다이렉트, 포맷 스트링, 버퍼 오버플로는 모두 외부 입력을 검증하지 않아 생기는 약점이다. 반면 경쟁 조건은 입력의 문제가 아니라 실행 순서와 타이밍의 문제이다.
| 약점 | 원인 | 개발보안 기준의 유형 |
|---|---|---|
| 신뢰되지 않는 URL 주소로 자동접속 연결 | 검증 없는 리다이렉트 목적지 | 입력데이터 검증 및 표현 |
| 포맷 스트링 삽입 | 외부 입력을 printf 류 함수의 형식 문자열로 사용 | 입력데이터 검증 및 표현 |
| 메모리 버퍼 오버플로우 | 입력 길이를 검사하지 않고 버퍼에 복사 | 입력데이터 검증 및 표현 |
| 경쟁 조건(검사 시점과 사용 시점) | 공유 자원 검사와 사용 사이에 상태가 바뀜 | 시간 및 상태 |
- ↑ 「CWE-601: URL Redirection to Untrusted Site ('Open Redirect')」, MITRE, https://cwe.mitre.org/data/definitions/601.html, 확인일: 2026-11-04.
- ↑ 2.0 2.1 「Unvalidated Redirects and Forwards Cheat Sheet」, OWASP Cheat Sheet Series, https://cheatsheetseries.owasp.org/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html, 확인일: 2026-11-04.