Vulnérabilité CEL sur GitHub expose des champs JSON privés
Une faille récemment documentée sur GitHub (GHSA-gcjh-h69q-9w9g) permet de contourner les directives d’omission JSON en exposant des champs privés via le système CEL. En clair, si un développeur utilise ParseStructTag("json") pour configurer le parsing des structures Go, il peut croire qu’il respecte les règles d’encodage JSON habituelles. Ce n’est pas le cas, car la fonction interprète mal la balise json:"-", la considérant comme un nom de champ valide plutôt qu’un marqueur d’omission.
Le problème réside dans une fonction d’aide, fieldNameByTag, qui, face à une balise json:"-", retourne simplement le caractère "-" comme nom de champ dans le système CEL. Les développeurs qui s’attendent à une sérialisation standard de type JSON ne s’attendent pas à ce que dyn(obj)"-" devienne une syntaxe lisible pour récupérer des données. C’est une erreur subtile, mais potentiellement grave, car elle rend des informations censées être cachées accessibles via l’accès par index de l’objet.
En plus de ce dysfonctionnement lié aux champs marqués json:"-", l’annonce de github.com révèle un autre point délicat : newNativeTypes enregistre silencieusement toute structure imbriquée atteignable à partir du type fourni. Cela signifie que le système peut intégrer des types provenant de dépendances tierces sans que le développeur n’ait eu à les examiner explicitement. Ce mécanisme est activé lorsque NativeTypes est appelé avec ParseStructTag("json").

Le code source montre que, au lieu de respecter la règle d’omission JSON pour un champ tagué json:"-", le système le traite comme un nom de champ réel. Ce nom erroné est accepté lors de la construction du type natif, et il devient alors visible dans l’énumération des champs CEL. De plus, lors de la conversion des objets natifs en valeurs de type JSON-like CEL, cette règle d’omission n’est pas appliquée.
Ce comportement contredit l’attente des développeurs qui utilisent ParseStructTag("json") pour obtenir une sémantique de nom de champ conforme à encoding/json. L’accès aux données se fait alors via l’indexation, comme le montre l’exemple dyn(req.auth)"-".
Sources
- GHSA-gcjh-h69q-9w9g – GitHub Advisory Database, github.com
- Changes in Edge for Private Cloud 4.54.00 | Edge for Private Cloud v4.54.00 | Apigee Docs, docs.apigee.com
- November 05, 2026, Google Cloud, 5 novembre 2026



