modelcontextprotocol / modelcontextprotocol/php-sdk

[Schema] SEP-2106: Harden SchemaValidator against external $ref SSRF and composition DoS

Ouverte
#358 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

2026-07-28 enhancement improves spec compliance Schema
Langage dominant
PHP
Étoiles
1.6k
Forks
173
Merge moyen
2 j 49 min
PR mergées (30 j)
23

Description

Implements the security hardening portion of SEP-2106 for the MCP Spec 2026-07-28 release.

Tracked by umbrella #337.

Spec rationale

Once $ref and rich composition land in inputSchema/outputSchema, naive validators are exposed to: SSRF via external $ref URIs, and DoS via pathological compositions / deep nesting / large subschema counts.

PHP SDK changes

  • SchemaValidator MUST NOT auto-dereference external $ref URIs (block any non-same-document reference by default).
  • Bound: schema depth, subschema count, validation time.
  • Configurable limits with sensible defaults (mirror existing session-store DoS limit ergonomics).
  • Add regression tests with adversarial schemas.

Related

  • Umbrella #337
  • Vocabulary sub-issue (introduces $ref support that this hardens)

Guide de contribution

Ouvrir le guide de contribution

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Piste de recherche

Commencez par SchemaValidator et examinez la configuration existante des limites de DoS de session-store afin de déterminer l’ergonomie prévue des limites et leurs valeurs par défaut. Examinez la gestion actuelle de $ref, puis ajoutez une couverture de régression adversariale pour les références externes, l’imbrication profonde, un grand nombre de sous-schémas et le temps de validation ; le travail est considéré comme terminé lorsque les références externes qui ne ciblent pas le même document sont bloquées par défaut et que les limites sont configurables.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
php
Domaine
backend-api-design, security
Type d'issue
Fonctionnalité
Difficulté
4/5
Temps estimé
3-5 jours
Activité
Calme
Clarté
Plutôt claire
Accessibilité débutants
48/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.