Regular expression Denial of Service - ReDoS
정규 표현식 거부 서비스 - ReDoS
정규 표현식 거부 서비스 (ReDoS)
**정규 표현식 거부 서비스 (ReDoS)**는 정규 표현식(텍스트에서 패턴을 검색하고 일치시키는 방법)의 작동 방식에 취약점을 이용하는 경우 발생합니다. 때때로 정규 표현식을 사용할 때, 특히 작업 중인 텍스트 조각이 커질 경우 매우 느려질 수 있습니다. 이 느림은 텍스트 크기의 작은 증가에도 매우 빠르게 증가할 수 있습니다. 공격자는 이 문제를 이용하여 정규 표현식을 사용하는 프로그램을 오랫동안 제대로 작동하지 못하게 만들 수 있습니다.
문제가 되는 정규 표현식의 단순 알고리즘
자세한 내용은 https://owasp.org/www-community/attacks/Regular_expression_Denial_of_Service_-_ReDoS에서 확인하세요
악성 정규 표현식
악성 정규 표현식 패턴은 DoS를 유발하는 조작된 입력에 갇힐 수 있는 패턴입니다. 악성 정규 표현식 패턴은 일반적으로 반복 그룹과 반복 또는 중첩된 대체를 포함합니다. 일부 악성 패턴의 예시는 다음과 같습니다:
(a+)+
([a-zA-Z]+)*
(a|aa)+
(a|a?)+
(.*a){x} (x > 10)
모든 이러한 패턴은 입력 aaaaaaaaaaaaaaaaaaaaaaaa!
에 취약합니다.
ReDoS 페이로드
ReDoS를 통한 문자열 유출
CTF(또는 버그 바운티)에서는 정규 표현식이 민감한 정보(깃발)와 일치하는지 확인하는 데 사용될 수 있습니다. 그런 경우, 정규 표현식이 일치하는 경우 페이지를 멈추게(타임아웃 또는 더 긴 처리 시간) 만들면 유용할 수 있습니다. 이렇게 하면 문자열을 문자별로 유출할 수 있습니다:
이 게시물에서 다음 ReDoS 규칙을 찾을 수 있습니다:
^(?=<flag>)((.*)*)*salt$
예시:
^(?=HTB{sOmE_fl§N§)((.*)*)*salt$
이 writeup에서 다음을 찾을 수 있습니다:
<flag>(((((((.*)*)*)*)*)*)*)!
이 writeup에서는 다음을 사용했습니다:
^(?=${flag_prefix}).*.*.*.*.*.*.*.*!!!!$
입력 및 정규 표현식 제어를 통한 ReDoS
다음은 입력과 정규 표현식을 모두 제어하는 ReDoS 예시입니다:
도구
참고 자료
Last updated