# GitHub : une faille expose des champs privés via les types natifs CEL

_Publié le 1 novembre 2026 — https://ip73.fr/2026/11/01/github-une-faille-expose-des-champs-prives-via-les-types-natifs-cel/_

La fonction `ext.NativeTypes(ParseStructTag("json"))` de GitHub ne respecte pas la directive de saut `json:"-"` issue du package `encoding/json`. En clair, un développeur qui s'attend à ce que certains champs soient ignorés lors de la sérialisation JSON peut se tromper lourdement. Selon l'annonce de github.com, cette divergence entraîne un comportement où les champs marqués `json:"-"` sont enregistrés dans le système de types CEL (Common Expression Language) sous le nom littéral « - ». Ce nom permet à n'importe quel utilisateur d'injecter une expression CEL pour lire la valeur de ce champ, via une syntaxe d'accès par crochet : `dyn(obj)["-"]`.

Ce problème ne se limite pas à cette directive. L'implémentation `newNativeTypes` enregistre également silencieusement tous les structs imbriqués atteignables depuis le type passé en paramètre, y compris des types provenant de dépendances tierces que le développeur n'a jamais inspectées. Difficile de ne pas y voir une porte ouverte aux fuites d'informations sensibles si les structures de données internes contiennent des attributs confidentiels.

Le mécanisme défaillant réside dans la fonction `fieldNameByTag`, utilisée par `ParseStructTag("json")` pour traduire les balises des structs Go en noms de champs CEL. Au lieu de vérifier si la balise est le sentinelle de saut JSON, le code interprète simplement `"-"` comme un nom de champ valide. Une fois accepté, ce champ fait partie de la vue CEL du type, apparaissant dans les rapports d'énumération des champs.

Ce comportement est renforcé au niveau de la lecture. La fonction `FindStructFieldType` traite ce nom comme valide, permettant ensuite l'accès aux données sous-jacentes. Pire encore, lors de la conversion des objets natifs en valeurs de type JSON-like CEL, l'itération sur les champs Go s'effectue sans appliquer la règle de saut JSON, inscrivant ainsi le champ `"-"` dans la sortie.

## Les conséquences d'une mauvaise traduction de balise

Ce dysfonctionnement révèle une tension entre la manière dont Go gère les métadonnées de sérialisation et la manière dont CEL construit son modèle de type. On s'attend à une cohérence, or ici, un simple caractère spécial est promu au rang d'identifiant utilisable par un attaquant. L'accessibilité par indexation, attestée par la présence du trait `traits.IndexerType` sur les objets natifs, rend cette lecture triviale une fois que le nom `"-"` est connu.

D'autres systèmes affichent des complexités analogues dans la gestion de leurs dépendances externes. Prenons l'exemple d'Apigee Edge for Private Cloud v4.54.00 : des modifications récentes y imposent des contraintes sévères sur l'environnement d'exécution. Ces mises à jour exigent des utilisateurs de valider la compatibilité de leurs politiques JavaCallout avec Java 21 LTS, puisque des modules tels que Java EE et CORBA sont retirés de la plateforme, d'après docs.apigee.com. Cela illustre un cas où une évolution technique impose une vérification rigoureuse de ce qui semblait acquis.

## Vigilance accrue sur les périmètres technologiques

La gestion des dépendances est un sujet récurrent dans le développement moderne. Tandis que GitHub dénonce ce problème de reconnaissance de nommage, Google Cloud met en avant l'importance de la découverte centralisée des agents d'IA via l'Agent Registry, permettant de gouverner des actifs sur des projets multiples, selon docs.cloud.google.com. Ces deux annonces, bien que traitant de domaines différents – une faille de type d'un côté, une capacité de gouvernance de l'autre – soulignent la nécessité absolue de connaître l'intégralité du périmètre technologique utilisé.

Les entreprises sont mises au défi de ne plus faire confiance aveuglément aux conventions de nommage. Il reste à voir comment GitHub ou le noyau Go va corriger cette logique pour s'assurer que les sentinelles de sérialisation soient respectées, même lorsqu'elles sont mal interprétées par des systèmes dérivés comme CEL. Il faudra surveiller si des correctifs arrivent rapidement pour cette vulnérabilité spécifique GHSA-gcjh-h69q-9w9g.

## Sources

- [GHSA-gcjh-h69q-9w9g - GitHub Advisory Database](https://github.com/advisories/GHSA-gcjh-h69q-9w9g), github.com
- [Changes in Edge for Private Cloud 4.54.00 \| Edge for Private Cloud v4.54.00 \| Apigee Docs](https://docs.apigee.com/private-cloud/v4.54.00/changes-privatecloud-45400), docs.apigee.com
- [October 31, 2026](https://docs.cloud.google.com/release-notes#October_31_2026), Google Cloud, 31 octobre 2026
