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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
pyrocms-ssti-fix — CVE-2023-29689 - PyroCMS의 SSTI 취약점을 위한 드롭인 수정, 커스텀 Twig 샌드박스 구현을 통해 | Kitploit
도구/GitHubGitHub/ysaxon/pyrocms-ssti-fix
Defensive ToolsVulnerability AnalysisCode AnalysisWeb Application ExploitationWeb SecurityMisconfiguration
GitHubysaxon/pyrocms-ssti-fix

pyrocms-ssti-fix

CVE-2023-29689 - PyroCMS의 SSTI 취약점을 위한 드롭인 수정, 커스텀 Twig 샌드박스 구현을 통해

저장소 보기
7개월 전아직 검토되지 않음

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

Packagist Version

🛡️ PyroCMS SSTI 수정

CVE-2023-29689를 위한 드롭인 보안 수정 - PyroCMS 3.9에서 원격 코드 실행으로 이어지는 서버사이드 템플릿 인젝션.

문제점

PyroCMS는 관리자 사용자가 데이터베이스에 저장된 템플릿을 편집할 수 있도록 합니다. 샌드박싱이 없으면 관리자 접근 권한을 가진 공격자가 악의적인 Twig 코드를 주입할 수 있습니다:

root@kitploit:~
{{['id']|map('system')|join}}

이것은 임의의 시스템 명령을 실행합니다. 업스트림 유지관리자들은 관리자 사용자가 신뢰되므로 '의도대로 작동'한다고 간주하지만, 멀티 테넌트 또는 엔터프라이즈 환경에서는 '관리자' ≠ '쉘 접근이 신뢰됨'입니다.

해결책

이 패키지는 사용자 편집 가능한 템플릿을 자동으로 샌드박싱하면서 정당한 테마/애드온 템플릿은 제한 없이 둡니다. 이 패키지의 작성자가 업스트림에 기여한 Twig의 SourcePolicyInterface를 사용하여 선택적으로 제한을 적용합니다.

설치

root@kitploit:~
composer require ysaxon/pyrocms-ssti-fix

안타깝게도 PyroCMS가 자동 발견을 비활성화했기 때문에 serviceProvider를 직접 추가해야 합니다.

다음 명령으로 추가할 수 있습니다:

root@kitploit:~
sed -i "/App\\\Providers\\\AppServiceProvider::class,/a \        YSaxon\\\PyroCmsSstiFix\\\SandboxServiceProvider::class," config/app.php

요구 사항

  • PHP 7.4+ or 8.0+
  • Twig 2.16+ or 3.9+ (SourcePolicyInterface 지원을 위해)
  • Laravel 6.0+ / PyroCMS 3.x

작동 방식

root@kitploit:~
┌─────────────────────────────────────────────────────────────┐
│                     Twig 렌더 요청                           │
└─────────────────────────────────────────────────────────────┘
                              │
                              ▼
┌─────────────────────────────────────────────────────────────┐
│                    저장소 소스 정책                           │
│                                                              │
│  템플릿이 저장소 경로(데이터베이스/사용자 편집 가능)에서 왔습니까?│
│                                                              │
│     예 ──────────────────►  샌드박스 활성화                   │
│      │                       - 차단: map, filter, reduce      │
│      │                       - 차단: 위험한 태그              │
│      │                       - 허용 목록: 안전한 작업         │
│                                                              │
│     아니오 ───────────────────►  샌드박스 없음                │
│                              (테마/애드온 템플릿이 정상적으로   │
│                               작동)                          │
└─────────────────────────────────────────────────────────────┘

구성 (선택 사항)

기본 설정은 안전하며 대부분의 설치에서 작동합니다. 사용자 정의하려면:

root@kitploit:~
php artisan vendor:publish --tag=pyrocms-ssti-fix-config

이 명령은 config/pyrocms-ssti-fix.php를 생성합니다:

root@kitploit:~
return [
    // Master switch
    'enabled' => env('PYROCMS_SSTI_FIX_ENABLED', true),

    // Override auto-detected storage path
    'storage_path' => env('PYROCMS_SSTI_FIX_STORAGE_PATH', null),

    // Customize allowed tags/filters/functions/methods/properties
    'policy' => [
        'tags' => [SecurityPolicyDefaults::INCLUDE_DEFAULTS],
        'filters' => [SecurityPolicyDefaults::INCLUDE_DEFAULTS],
        // ... see config file for full options
    ],
];

차단되는 것

기본 보안 정책은 샌드박스 템플릿에서 다음과 같은 위험한 기능을 차단합니다:

필터 (RCE 벡터)

  • map - {{['cmd']|map('system')}}는 쉘 명령을 실행합니다
  • filter - 임의의 PHP 함수를 호출할 수 있습니다
  • reduce - 임의의 PHP 함수를 호출할 수 있습니다

태그 (포함 공격)

  • include, extends, block, macro, import, embed, use

함수

  • source - 임의의 파일 내용을 읽습니다
  • include - 다른 템플릿을 포함합니다
  • template_from_string - 문자열에서 템플릿을 생성합니다

허용되는 것

안전한 작업은 샌드박스 템플릿에서 계속 사용할 수 있습니다:

root@kitploit:~
{# 변수 #}
{{ entry.title }}
{{ user.name|upper }}

{# 반복문과 조건문 #}
{% for item in items %}
    {% if item.active %}
        {{ item.name }}
    {% endif %}
{% endfor %}

{# 안전한 필터 #}
{{ text|escape }}
{{ date|date('Y-m-d') }}
{{ items|length }}
{{ name|lower|trim }}

{# 안전한 함수 #}
{{ max(a, b) }}
{{ random(['red', 'blue', 'green']) }}

허용 목록 확장

관리자 템플릿이 합법적으로 추가 기능을 필요로 하는 경우:

root@kitploit:~
// config/pyrocms-ssti-fix.php
'policy' => [
    'filters' => [
        SecurityPolicyDefaults::INCLUDE_DEFAULTS,
        'my_custom_filter',  // 특정 필터 추가
    ],
    'methods' => [
        SecurityPolicyDefaults::INCLUDE_DEFAULTS,
        'App\Models\Post' => ['getTitle', 'getSummary'],
    ],
],

수정 테스트

설치 후 익스플로잇이 차단되었는지 확인하십시오:

  1. PyroCMS 관리자 → 사용자 → 역할로 이동
  2. 역할의 설명 필드 편집
  3. 다음 입력: {{['id']|map('system')|join}}
  4. 저장 후 보기

수정 전: id 명령의 출력이 표시되거나 (또는 충돌) 수정 후: 오류가 표시되거나 [렌더링 실패: "map" 필터가 허용되지 않음.]이 표시됨

문제 해결

"컨테이너에서 Twig를 찾을 수 없음"

패키지가 Twig를 찾을 수 없습니다. 일반적으로 다음을 의미합니다:

  • PyroCMS/streams-platform이 완전히 로드되지 않았습니다
  • PyroCMS 환경에서 실행 중이 아닙니다

세부 정보를 보려면 디버그 모드를 활성화하십시오:

root@kitploit:~
PYROCMS_SSTI_FIX_DEBUG=true

정당한 템플릿이 깨짐

관리자가 편집 가능한 템플릿이 이제 차단된 기능을 사용하는 경우:

  1. 로그에서 어떤 기능이 차단되었는지 확인
  2. 안전한 경우 구성의 허용 목록에 추가
  3. 또는 허용된 기능을 사용하도록 템플릿 리팩터링

성능 문제

패키지는 모든 경로 검사와 메서드/속성 조회를 캐시합니다. auto 모드에서는 저장소 경로 템플릿만 샌드박스 오버헤드가 발생합니다.

보안 참고 사항

  • 이 패키지는 근본적인 아키텍처 문제(Twig가 사용자 입력을 렌더링)를 해결하지 않습니다
  • 샌드박스 템플릿이 할 수 있는 작업을 제한하여 익스플로잇을 완화합니다
  • 관리자 사용자는 여전히 성가신 템플릿을 만들 수 있습니다. 단, RCE를 달성할 수는 없습니다
  • 심층 방어를 위해 추가 강화 조치(WAF 규칙, CSP 등)를 고려하십시오

크레딧

  • Yaakov Saxon - 패키지 작성자, Twig에 SourcePolicyInterface 기여자
  • Twig PR #3893 - 선택적 샌드박스를 가능하게 한 업스트림 기여

라이선스

MIT 라이선스 - LICENSE 파일 참조

관련 자료

  • CVE-2023-29689 - NVD 항목
  • GHSA-w7vm-4v3j-vgpw - GitHub 보안 권고
  • Twig 샌드박스 문서
도구 다운로드