Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
도구/GitHubGitHub/doyensec/regexploit
Static Code Analysis (SAST)Vulnerability AnalysisFuzzing
GitHubdoyensec/regexploit

regexploit

ReDoS(정규 표현식 서비스 거부)에 취약한 정규 표현식을 찾습니다.

저장소 보기
8485965년 전Kitploit 검토 완료

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

Regexploit

regexploit_logo

정규 표현식 서비스 거부 (ReDoS)에 취약한 정규식을 찾습니다.

자세한 내용은 Doyensec 블로그에서 확인하세요.

많은 기본 정규 표현식 파서는 최악의 경우 복잡도가 제한되지 않습니다. 정규식 일치는 일치하는 입력 문자열이 주어지면 빠를 수 있습니다. 그러나 특정 비일치 입력 문자열은 정규식 일치 엔진이 엄청난 백트래킹 루프에 빠지게 하여 처리하는 데 오랜 시간이 걸릴 수 있습니다. 이는 CPU가 정규식을 일치시키려고 붙잡혀 있기 때문에 서비스 거부를 유발할 수 있습니다.

이 도구는 다음을 위해 설계되었습니다:

  • ReDoS에 취약한 정규식 찾기
  • 치명적인 백트래킹을 유발하는 악의적인 문자열 예시 제공

최악의 경우 복잡도

이는 입력 문자열 길이에 대한 정규식 일치 엔진의 백트래킹 절차 복잡도를 반영합니다.

여기서 3차 복잡도는 문자열의 취약한 부분 길이가 두 배가 되면 실행 시간이 약 8배(2^3) 증가함을 의미합니다. 별표가 중첩된 지수 ReDoS(예: (a*)*$)의 경우 퍼지 계수가 사용되며 복잡도는 10보다 커집니다.

악용 가능성 측면에서, 진정으로 큰 문자열이 입력으로 허용되지 않는 한 일반적으로 3차 이상의 복잡도가 필요합니다.

예제

regexploit를 실행하고 명령줄에 정규식 v\w*_\w*_\w*$를 입력합니다.

root@kitploit:~
$ regexploit
v\w*_\w*_\w*$
패턴: v\w*_\w*_\w*$
---
최악의 경우 복잡도: 3 ⭐⭐⭐ (3차)
반복 문자: [5f:_]
백트래킹을 유발하는 최종 문자: [^WORD]
예시: 'v' + '_' * 3456 + '!'

\w*_\w*_\w* 부분은 세 개의 중복되는 반복 그룹을 포함합니다(\w는 문자, 숫자 및 밑줄과 일치). 반복 문자: [5f:_] 줄에서 볼 수 있듯이, 긴 _(0x5f) 문자열은 이 섹션을 여러 가지 방식으로 일치시킵니다. 세 개의 무한 반복 그룹이 있으므로 최악의 경우 복잡도는 3입니다. ReDoS를 유발하는 예시가 제공됩니다: 필수 접두사 v, 긴 _ 문자열, 그리고 백트래킹을 유발하는 ! (단어 문자가 아님)로 구성됩니다. 모든 ReDoS가 끝에 특정 문자를 필요로 하는 것은 아니지만, 이 경우 긴 _ 문자열은 정규식과 성공적으로 일치하여 백트래킹하지 않습니다. 백트래킹을 유발하는 최종 문자: [^WORD] 줄은 일치하지 않는 문자(단어 문자가 아님)가 끝에 필요하여 일치를 방지하고 ReDoS를 유발함을 보여줍니다.

또 다른 예로, ReDoS에 취약한 모듈 버전을 설치합니다(예: pip install ua-parser==0.9.0). 설치된 파이썬 모듈을 스캔하려면 regexploit-python-env를 실행합니다.

root@kitploit:~
Importing ua_parser.user_agent_parser
/somewhere/.env/lib/python3.9/site-packages/ua_parser/user_agent_parser.py #183 에서 취약한 정규식
패턴: \bSmartWatch *\( *([^;]+) *; *([^;]+) *;
컨텍스트: self.user_agent_re = re.compile(self.pattern)
---
최악의 경우 복잡도: 3 ⭐⭐⭐
반복 문자: [20]
예시: 'SmartWatch(' + ' ' * 3456

최악의 경우 복잡도: 3 ⭐⭐⭐
반복 문자: [20]
예시: 'SmartWatch(0;' + ' ' * 3456

/somewhere/.env/lib/python3.9/site-packages/ua_parser/user_agent_parser.py #183 에서 취약한 정규식
패턴: ; *([^;/]+) Build[/ ]Huawei(MT1-U06|[A-Z]+\d+[^\);]+)[^\);]*\)
컨텍스트: self.user_agent_re = re.compile(self.pattern)
---
최악의 경우 복잡도: 3 ⭐⭐⭐
반복 문자: [[0-9]]
예시: ';0 Build/HuaweiA' + '0' * 3456
...

취약한 각 정규식에 대해 ReDoS를 트리거하는 하나 이상의 악성 문자열을 출력합니다. 사용자 에이전트를 ;0 Build/HuaweiA000000000000000...로 설정하고 오래된 버전의 ua-parser를 사용하는 웹사이트를 탐색하면 서버가 요청을 처리하는 데 오랜 시간이 걸려 결국 502 상태가 될 수 있습니다.

설치

Python 3.8+가 필요합니다. JavaScript/TypeScript 코드에서 정규식을 추출하려면 NodeJS 12+도 필요합니다.

선택적으로 가상 환경을 만듭니다.

root@kitploit:~
python3 -m venv .env
source .env/bin/activate

이제 pip로 실제로 설치합니다.

root@kitploit:~
pip install regexploit

사용법

정규식 목록으로 Regexploit 사용

stdin을 통해 정규식을 regexploit에 한 줄에 하나씩 입력합니다.

root@kitploit:~
regexploit

또는 파일을 통해

root@kitploit:~
cat myregexes.txt | regexploit

정규식 자동 추출

Python, JavaScript, TypeScript, C#, YAML 및 JSON에서 정규식을 구문 분석하는 내장 지원이 있습니다.

Python 코드

AST를 통해 Python 코드(실행하지 않고)를 구문 분석하여 정규식을 찾습니다. 그런 다음 정규식을 ReDoS에 대해 분석합니다.

root@kitploit:~
regexploit-py my-project/
regexploit-py "my-project/**/*.py" --glob

JavaScript / TypeScript

regexploit/bin/javascript에 포함된 NodeJS 패키지를 사용하여 JavaScript를 eslint로 AST로 구문 분석하고 모든 정규식을 출력합니다.

그 정규식들은 파이썬 ReDoS 찾기 프로그램에 입력됩니다.

root@kitploit:~
regexploit-js my-module/my-file.js another/file.js some/folder/
regexploit-js "my-project/node_modules/**/*.js" --glob

참고: JavaScript와 Python 정규식 구문 분석에는 차이가 있으므로 약간의 오류가 있을 수 있습니다. JS 정규식 AST를 작성하고 싶지 않습니다.

Python 임포트

현재 경로/환경에 설치된 모든 Python 모듈에서 정규식을 검색합니다. 즉, 관심 있는 모듈을 pip install하면 분석됩니다. Cpython 코드도 포함됩니다.

root@kitploit:~
regexploit-python-env

참고: 이는 Python 코드를 AST로 구문 분석하지 않으며 모듈 임포트 시 자동으로 컴파일되는 정규식만 찾습니다. 모듈이 실제로 임포트되므로 모듈 내 코드가 실행됩니다. 이는 로드 시 더 작은 문자열로 구성된 정규식을 찾는 데 유용합니다(예: Pillow의 CVE-2021-25292).

JSON / YAML

YAML 지원에는 pyyaml이 필요하며, pip install regexploit[yaml]로 설치할 수 있습니다.

root@kitploit:~
regexploit-json *.json
regexploit-yaml *.yaml

C# (.NET)

root@kitploit:~
regexploit-csharp something.cs

🏆 보고된 버그 🏆

  • CVE-2020-5243: uap-core – uap-python, uap-ruby 등에 영향 (User-Agent 헤더 파싱)
  • CVE-2020-8492: cpython의 urllib.request (WWW-Authenticate 헤더 파싱)
  • CVE-2021-21236: CairoSVG (SVG 파싱)
  • CVE-2021-21240: httplib2 (WWW-Authenticate 헤더 파싱)
  • CVE-2021-25292: python-pillow (PDF 파싱)
  • CVE-2021-26813: python-markdown2 (Markdown 파싱)
  • CVE-2021-27290: npm/ssri (SRI 파싱)
  • CVE-2021-27291: pygments ADL, CADL, Ceylon, Evoque, Factor, Logos, Matlab, Octave, ODIN, Scilab 및 Varnish VCL용 렉서 (구문 강조)
  • CVE-2021-27292: ua-parser-js (User-Agent 헤더 파싱)
  • CVE-2021-27293: RestSharp (.NET C# 패키지의 JSON 역직렬화)
  • bpo-38804: cpython의 http.cookiejar (Set-Cookie 헤더 파싱)
  • SimpleCrawler (보관됨) (HTML 파싱)
  • CVE-2021-28092: is-svg (SVG 파싱)
  • nuget.org, NuGetGallery 및 NuGet.Client (NuGet 패키지 ID 파싱)
  • markdown (python) (Markdown 파싱)

크레딧

이 도구는 연구 시간 동안 Doyensec LLC의 Ben Caller가 만들었습니다.

alt text

도구 다운로드
  • ansi-html (nodejs) (ANSI 파싱)
  • 그리고 여러 pypi, npm, ruby 및 nuget 패키지의 미공개 버그