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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2022-0778 — CVE-2022-0778의 개념 증명 익스플로잇, OpenSSL의 BN_mod_sqrt() 함수에서의 서비스 거부 취약점, 테스트 및 분석을 위한 Docker 기반 랩 환경 포함. | Kitploit
도구/GitHubGitHub/jeongjunsoo/cve-2022-0778
Vulnerability AnalysisExploitationCryptographyLearning & EducationLabs & Practice
GitHubjeongjunsoo/cve-2022-0778

CVE-2022-0778

CVE-2022-0778의 개념 증명 익스플로잇, OpenSSL의 BN_mod_sqrt() 함수에서의 서비스 거부 취약점, 테스트 및 분석을 위한 Docker 기반 랩 환경 포함.

저장소 보기
12년 전아직 검토되지 않음

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2022-0778

Contributors

  • 정준수(@jeongjunsoo)

요약

  • CVE-2022-0778 취약점은 OpenSSL에서 소수의 제곱근을 계산하는 BN_mod_sqrt()함수에 영향을 미칩니다.

  • 이 함수가 소수 기반이 아닌 악의적으로 조작된 인증서를 처리할 때, 패치되지 않은 서버는 DoS 공격에 노출될 수 있습니다.


Target

  • OpenSSL 1.0.2
  • OpenSSL 1.1.1
  • OpenSSL 3.0

패치 전

root@kitploit:~
i = 1;
if (!BN_mod_sqr(t, b, p, ctx))
    goto end;
while (!BN_is_one(t)) {
    i++;
    if (i == e) {
        ERR_raise(ERR_LIB_BN, BN_R_NOT_A_SQUARE);
        goto end;
    }
    if (!BN_mod_mul(t, t, t, p, ctx))
        goto end;
}

  • 이 알고리즘에 따르면, i 값이 e 값에 도달하면 loop가 종료되어야 합니다.
  • 그러나 특정 입력을 통해 i와 e 모두 1의 값을 갖도록 만들면 해당 loop는 끝나지 않고 무한 loop가 발생합니다.
  • 이로 인해 서비스 거부가 발생하게 됩니다.

패치 후

root@kitploit:~
for (i = 1; i < e; i++) {
    if (i == 1) {
        if (!BN_mod_sqr(t, b, p, ctx))
            goto end;
    } else {
        if (!BN_mod_mul(t, t, t, p, ctx))
            goto end;
    }
    if (BN_is_one(t))
        break;
}
/* If not found, a is not a square or p is not prime. */
if (i >= e) {
    ERR_raise(ERR_LIB_BN, BN_R_NOT_A_SQUARE);
    goto end;
}

  • 기존의 while 문을 for 문으로 변경되었습니다.
  • 이에 따라 i의 값이 e에 도달하면 자동으로 loop가 종료되게 패치되었습니다.
  • 위 패치를 통해 무한 loop 위험을 제거했습니다.

환경 구성 및 실행

  • Ubuntu 환경 구성

  • docker compose up -d 테스트 환경 실행

  • docker run -it --rm -p 12345:12345 yywing/cve-2022-0778 --addr 0.0.0.0:12345

  • docker compose exec curl top 프로세스 상태 확인

  • docker compose exec curl bash bash 실행

  • curl -k https://172.17.0.1:12345 12345 포트로 HTTPS 요청 전송


실행

  • 실습을 위해 세 개의 터미널 창(A, B, C)를 준비합니다.

  • A 터미널에서 docker run -it --rm -p 12345:12345 yywing/cve-2022-0778 --addr 0.0.0.0:12345 명령을 실행하여 Docker 이미지를 시작합니다.

  • 다음으로 B 터미널에서 docker compose exec curl top 명령어를 실행해 현재 실행 중인 프로세스들의 상황을 살펴봅니다.

  • 마지막으로 C 터미널에서는 docker compose exec curl bash를 입력한 후, curl -k https://172.17.0.1:12345 12345 포트로 HTTPS 요청 전송을 합니다.

결과

  • B 터미널에서 실행된 top 명령의 결과로 curl 프로세스가 CPU 자원을 거의 100% 사용하는 것을 확인할 수 있습니다. 이는 무한 loop에 빠져서 발생한 것입니다.

정리

  • 해당 취약점은 소수 여부의 검증 부재로 인해 발생한 취약점입니다.
  • 무한 loop 문제를 방지하기 위해 while 문을 for 문으로 변경하여 패치 되었습니다.

레퍼런스

  • https://github.com/drago-96/CVE-2022-0778

  • https://hackyboiz.github.io/2022/03/19/syru/cve-2022-0778/

  • https://github.com/yywing/cve-2022-0778/


도구 다운로드