Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
pyrocms-ssti-fix — CVE-2023-29689 - PyroCMSのSSTIに対するドロップイン修正(カスタムTwigサンドボックス実装によるもの) | Kitploit
ツール/GitHubGitHub/ysaxon/pyrocms-ssti-fix
防御ツール脆弱性分析コード分析ウェブアプリケーション悪用ウェブセキュリティ設定ミス
GitHubysaxon/pyrocms-ssti-fix

pyrocms-ssti-fix

CVE-2023-29689 - PyroCMSのSSTIに対するドロップイン修正(カスタムTwigサンドボックス実装によるもの)

リポジトリを見る
28ヶ月前未レビュー

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

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+ または 8.0+
  • Twig 2.16+ または 3.9+(SourcePolicyInterface サポート用)
  • Laravel 6.0+ / PyroCMS 3.x

仕組み

root@kitploit:~
┌─────────────────────────────────────────────────────────────┐
│                     Twig Render Request                      │
└─────────────────────────────────────────────────────────────┘
                              │
                              ▼
┌─────────────────────────────────────────────────────────────┐
│                    StorageSourcePolicy                       │
│                                                              │
│  Is template from storage path (database/user-editable)?     │
│                                                              │
│     YES ──────────────────►  Enable Sandbox                  │
│      │                       - Block: map, filter, reduce    │
│      │                       - Block: dangerous tags         │
│      │                       - Whitelist safe operations     │
│                                                              │
│     NO ───────────────────►  No Sandbox                      │
│                              (Theme/addon templates work     │
│                               normally)                      │
└─────────────────────────────────────────────────────────────┘

設定(オプション)

デフォルト設定は安全で、ほとんどのインストール環境で機能します。カスタマイズするには:

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:~
{# Variables #}
{{ entry.title }}
{{ user.name|upper }}

{# Loops and conditionals #}
{% for item in items %}
    {% if item.active %}
        {{ item.name }}
    {% endif %}
{% endfor %}

{# Safe filters #}
{{ text|escape }}
{{ date|date('Y-m-d') }}
{{ items|length }}
{{ name|lower|trim }}

{# Safe functions #}
{{ max(a, b) }}
{{ random(['red', 'blue', 'green']) }}

ホワイトリストの拡張

管理テンプレートが正当に追加機能を必要とする場合:

root@kitploit:~
// config/pyrocms-ssti-fix.php
'policy' => [
    'filters' => [
        SecurityPolicyDefaults::INCLUDE_DEFAULTS,
        'my_custom_filter',  // Add specific filter
    ],
    'methods' => [
        SecurityPolicyDefaults::INCLUDE_DEFAULTS,
        'App\Models\Post' => ['getTitle', 'getSummary'],
    ],
],

修正のテスト

インストール後、エクスプロイトがブロックされることを確認します:

  1. PyroCMS 管理画面 → ユーザー → ロール に移動します。
  2. ロールの説明フィールドを編集します。
  3. 次のように入力します: {{['id']|map('system')|join}}
  4. 保存して表示します。

修正前: id コマンドの出力が表示される(またはクラッシュする) 修正後: エラーまたは [rendering failed: Filter "map" is not allowed.] が表示される

トラブルシューティング

「Twig not found in container」

パッケージが 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 サンドボックスのドキュメント
ツールをダウンロード