mppx-condition-gate: 自由アクセスパスは、コントロールの証明なしに自己申告されたウォレットに対して付与されます。

### 影響

両方のパッケージは、`mppx`の支払い方法をラップしており、オンチェーンの条件を満たすウォレットに対して、料金が発生する代わりに自由アクセスを許可します。

自由アクセスパスは、支払い証明に含まれるクライアントが提供するDIDである`credential.source`から支払い元のウォレットアドレスを読み取り、InsumerAPIにそのアドレスが設定された条件を満たしているかどうかを問い合わせます。条件を満たしている場合、支払い検証機能を呼び出すことなく、成功のレシートを返します。このパスには、呼び出し元が指定したウォレットをコントロールしていることを確認する機能はありません。

条件を満たすウォレットは、パブリックチェーンの状態であるため、攻撃者が推測する必要はありません。`credential.source`に、条件を満たす任意のウォレットアドレスを指定するだけで、本来は料金が発生するはずのルートへの自由アクセスを得ることができます。その後、インプロセスキャッシュ(デフォルトのTTLは300秒で、ウォレットと条件に基づいてキーが設定されます)が、再評価なしにアクセス権を再利用します。

`mppx`は、この要件を明示的に記述しています。その型定義では、`source`を「独立したコントロールの証明ではなく、主張されたIDである」と説明し、それらに依存するメソッドは「証明の内容との関連性を検証する必要がある」と述べています。しかし、これらのパッケージでは、その検証が行われていませんでした。

**これは、これらのラッパーパッケージの欠陥であり、それらが消費する証明書の問題ではありません。** 証明書は、1つの質問に答えます。つまり、「このウォレットはこれらの条件を満たしていますか?」そして、与えられたアドレスについて、正直にその答えを提供しています。そのアドレスを呼び出し元に紐付ける責任は、ラッパーパッケージにありました。

### 影響を受けるバージョン

両方のパッケージのすべての公開バージョンが影響を受けます。この脆弱な制御フローは、各パッケージの最初のリリースから存在していました。

### 修正

修正されたバージョンでは、支払い元のウォレットが認証されていない場合、自由アクセスは許可されず、認証されていない支払い元が存在する場合は、有料のパスにフォールスルーします。

### 対策

支払い方法から条件判定機能を一時的に削除し、固定バージョンがインストールされるまで、すべてのリクエストが通常の有料経路を経るようにします。または、ゲートが参照される前に、ラップされた支払い方法が既に支払い元に認証情報を紐づけていることを確認してください。

### 謝辞

この問題を特定し、正確なコード経路を追跡し、適切な修正策を提案してくれた @chenshj73 に感謝します。

影響を受けるパッケージ:
- npm (JavaScript) @insumermodel/mppx-condition-gate: 影響を受けるバージョンは 2.0.3 以下、3.0.0 で修正済み
- npm (JavaScript) @insumermodel/mppx-token-gate: 影響を受けるバージョンは 1.0.3 以下、1.0.4 で修正済み