本文へスキップ
Z-CMS is being built in the open on GitHub. コミュニティに参加する

記事一覧

Z-CMS のための安全な Plugin Marketplace を構築する

2026年7月12日 · Z-SOFT Admin · 約 6 分で読めます

Marketplace を software supply-chain system として設計する

Marketplace は ZIP download page ではない

Plugin marketplace は executable code を production system に配布します。そのため、誰が package を作成したか、改変されていないか、どの permission を要求するか、どの version に vulnerability があるか、bad update からどう recovery するかを説明できなければなりません。

Threat model

主な threat は typosquatting package、compromised publisher account、upload・storage・delivery 中の package modification、目的と無関係な permission、悪意ある transitive dependency、cross-tenant access、unauthorized data transfer です。

Signed package と immutable release

各 release は checksum と digital signature を持ちます。CMS は install 前に checksum、marketplace signature、publisher identity を verify します。公開済み version は上書きせず、修正は新 version として publish し、reproducibility と auditability を保ちます。

Developer builds plugin
    ↓
Generate checksum
    ↓
Sign package
    ↓
Marketplace verifies
    ↓
CMS verifies before install

Publisher identity と namespace ownership

Marketplace は community publisher、verified publisher、verified organization、official package を区別します。@organization/plugin-name 形式の namespace は偽装を減らします。Publish 権限は Owner、Maintainer、Publisher、Security Reviewer などの role で管理します。

Permission manifest と runtime enforcement

Administrator は plugin がどの data を read、update、external transfer できるかを install 前に確認できる必要があります。Update で新 permission が追加された場合、auto-update を停止して approval を要求します。

Permission は install 時だけでなく runtime bridge でも enforce します。users:read を持たない plugin は users API を呼び出せません。

{
  "permissions": [
    "content:read",
    "content:update",
    "http:domain:api.example.com"
  ]
}

Multi-tenant isolation

Plugin のすべての API call には Core が発行した tenant context が含まれます。Plugin は tenantId を任意に指定できません。Database、cache、storage、queue、search は tenant scope を enforce します。

Security scanning pipeline

Pipeline には manifest validation、dependency vulnerability scan、static analysis、secret scanning、malware analysis、sensitive permission に対する manual review を含めます。eval()、child_process、process.env、obfuscated code、unrestricted network access などは review 対象です。

Security advisory、revocation、rollback

Marketplace は affected version、severity、patched version を含む advisory を発行します。必要に応じて package を revoke し、新規 install を block、既存 instance に警告します。Versioned bundle により bad update から迅速に rollback できます。

Audit log と data transparency

Install、approval、activation、permission change、update は audit log に記録します。Plugin が external domain に data を送信する場合、domain、data type、purpose を明示し、administrator が判断できるようにします。

結論

安全な marketplace には publisher identity、package signing、immutable release、runtime permission、security scanning、multi-tenant isolation、advisory、revocation、audit log、rollback が必要です。すべての plugin の完全な安全を保証するのではなく、risk を減らし control と transparency を高めることが目的です。

Key takeaways

  • Security boundary は plugin の善意ではなく Core 側で enforce する必要があります。
  • Lifecycle、permission、tenant context、observability は同じ platform contract の一部です。
  • 優れた developer experience は、安全な runtime と supply chain の設計によって持続可能になります。

GitHub: https://github.com/zscontributor/z-cms
Website: https://z-cms.org