{"id":5759,"date":"2023-01-26T10:27:09","date_gmt":"2023-01-26T09:27:09","guid":{"rendered":"https:\/\/www.vaadata.com\/blog\/?p=5759"},"modified":"2023-08-11T12:20:08","modified_gmt":"2023-08-11T10:20:08","slug":"exploitation-dun-manque-de-controle-de-droits-sur-graphql","status":"publish","type":"post","link":"https:\/\/www.vaadata.com\/blog\/fr\/exploitation-dun-manque-de-controle-de-droits-sur-graphql\/","title":{"rendered":"Exploitation d&rsquo;un manque de contr\u00f4le de droits sur GraphQL"},"content":{"rendered":"\n<p>Lors d&rsquo;un <a href=\"https:\/\/www.vaadata.com\/fr\/pentest-web\/\" title=\"\">pentest d&rsquo;application web<\/a>, nous avons d\u00e9couvert une vuln\u00e9rabilit\u00e9 li\u00e9e \u00e0 la configuration et \u00e0 la mauvaise gestion des contr\u00f4les de droits sur GraphQL. <\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"1024\" height=\"540\" src=\"https:\/\/www.vaadata.com\/blog\/wp-content\/uploads\/2023\/01\/exploitation-grapql-1024x540.png\" alt=\"\" class=\"wp-image-5777\" srcset=\"https:\/\/www.vaadata.com\/blog\/wp-content\/uploads\/2023\/01\/exploitation-grapql-1024x540.png 1024w, https:\/\/www.vaadata.com\/blog\/wp-content\/uploads\/2023\/01\/exploitation-grapql-300x158.png 300w, https:\/\/www.vaadata.com\/blog\/wp-content\/uploads\/2023\/01\/exploitation-grapql.png 1191w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<!--more-->\n\n\n\n<p>En profitant \u00e9galement d&rsquo;une IDOR, cette vuln\u00e9rabilit\u00e9 critique nous a permis de sortir du cloisonnement et d\u2019acc\u00e9der \u00e0 des donn\u00e9es appartenant \u00e0 d\u2019autres instances. Nous vous expliquons comment en pr\u00e9sentant, dans un premier temps, les diff\u00e9rentes \u00e9tapes pour exploiter GraphQL avant d&rsquo;exposer le cas concret rencontr\u00e9 lors du pentest.    <\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Comment exploiter GraphQL ? <\/h2>\n\n\n\n<p>Commen\u00e7ons par une d\u00e9monstration d&rsquo;exploitation de GraphQL effectu\u00e9e sur une <a href=\"https:\/\/github.com\/dolevf\/Damn-Vulnerable-GraphQL-Application\" target=\"_blank\" rel=\"noopener\" title=\"\">application de test accessible sur Github<\/a> contenant des vuln\u00e9rabilit\u00e9s.<\/p>\n\n\n\n<h3 class=\"wp-block-heading has-text-color\" style=\"color:#c0b800\">R\u00e9cup\u00e9ration du sch\u00e9ma d&rsquo;introspection GraphQL<\/h3>\n\n\n\n<p>La premi\u00e8re \u00e9tape consiste \u00e0 r\u00e9cup\u00e9rer le sch\u00e9ma d&rsquo;introspection GraphQL. Ce sch\u00e9ma permet d\u2019obtenir des informations importantes sur la structure de GraphQL, notamment les relations entre les diff\u00e9rents objets et le nom des diff\u00e9rents champs. <\/p>\n\n\n\n<p>Pour ce faire, plusieurs m\u00e9thodes peuvent \u00eatre utilis\u00e9es pour r\u00e9cup\u00e9rer ce sch\u00e9ma comme l&rsquo;<a href=\"https:\/\/portswigger.net\/bappstore\/296e9a0730384be4b2fffef7b4e19b1f\" target=\"_blank\" rel=\"noopener\" title=\"\">extension InQL de Burp<\/a> ou, manuellement via le recours \u00e0 la requ\u00eate GraphQL suivante si l\u2019introspection est bien activ\u00e9e.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>{__schema{queryType{name}mutationType{name}subscriptionType{name}types{\u2026FullType}directives{name description locations args{\u2026InputValue}}}}fragment FullType on __Type{kind name description fields(includeDeprecated :true){name description args{\u2026InputValue}type{\u2026TypeRef}isDeprecated deprecationReason}inputFields{\u2026InputValue}interfaces{\u2026TypeRef}enumValues(includeDeprecated :true){name description isDeprecated deprecationReason}possibleTypes{\u2026TypeRef}}fragment InputValue on __InputValue{name description type{\u2026TypeRef}defaultValue}fragment TypeRef on __Type{kind name ofType{kind name ofType{kind name ofType{kind name ofType{kind name ofType{kind name ofType{kind name ofType{kind name}}}}}}}}<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"1024\" height=\"568\" src=\"https:\/\/www.vaadata.com\/blog\/wp-content\/uploads\/2023\/01\/recuperation-schema-introspection-graphql-1024x568.png\" alt=\"R\u00e9cup\u00e9ration du sch\u00e9ma d'introspection GraphQL\" class=\"wp-image-5763\" srcset=\"https:\/\/www.vaadata.com\/blog\/wp-content\/uploads\/2023\/01\/recuperation-schema-introspection-graphql-1024x568.png 1024w, https:\/\/www.vaadata.com\/blog\/wp-content\/uploads\/2023\/01\/recuperation-schema-introspection-graphql-300x166.png 300w, https:\/\/www.vaadata.com\/blog\/wp-content\/uploads\/2023\/01\/recuperation-schema-introspection-graphql.png 1245w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Par ailleurs, le sch\u00e9ma peut \u00eatre import\u00e9 sur <a href=\"https:\/\/github.com\/IvanGoncharov\/graphql-voyager\" target=\"_blank\" rel=\"noopener\" title=\"\">GraphQL Voyager<\/a>, un outil permettant d\u2019obtenir un graphique interactif du sch\u00e9ma GraphQL.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"1024\" height=\"539\" src=\"https:\/\/www.vaadata.com\/blog\/wp-content\/uploads\/2023\/01\/import-schema-introspection-graphql-voyager-1024x539.png\" alt=\"Import sch\u00e9ma d'introspection sur GraphQL Voyager\" class=\"wp-image-5767\" srcset=\"https:\/\/www.vaadata.com\/blog\/wp-content\/uploads\/2023\/01\/import-schema-introspection-graphql-voyager-1024x539.png 1024w, https:\/\/www.vaadata.com\/blog\/wp-content\/uploads\/2023\/01\/import-schema-introspection-graphql-voyager-300x158.png 300w, https:\/\/www.vaadata.com\/blog\/wp-content\/uploads\/2023\/01\/import-schema-introspection-graphql-voyager.png 1187w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Gr\u00e2ce \u00e0 cet outil, les relations entre les diff\u00e9rents objets apparaissent plus clairement et l\u2019exploitation va \u00eatre beaucoup plus simple \u00e0 effectuer.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"1024\" height=\"557\" src=\"https:\/\/www.vaadata.com\/blog\/wp-content\/uploads\/2023\/01\/visualisation-schema-graphql-1024x557.png\" alt=\"Visualisation des objets du sch\u00e9ma GraphQL\" class=\"wp-image-5770\" srcset=\"https:\/\/www.vaadata.com\/blog\/wp-content\/uploads\/2023\/01\/visualisation-schema-graphql-1024x557.png 1024w, https:\/\/www.vaadata.com\/blog\/wp-content\/uploads\/2023\/01\/visualisation-schema-graphql-300x163.png 300w, https:\/\/www.vaadata.com\/blog\/wp-content\/uploads\/2023\/01\/visualisation-schema-graphql.png 1187w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading has-text-color\" style=\"color:#c0b800\">Exploitation des vuln\u00e9rabilit\u00e9s GraphQL<\/h3>\n\n\n\n<p>L\u2019objectif va \u00eatre d\u2019utiliser toutes les relations afin d\u2019acc\u00e9der aux diff\u00e9rents objets contenant les informations de l\u2019application. Par exemple, acc\u00e9der aux informations des utilisateurs \u00e0 partir de la requ\u00eate qui r\u00e9cup\u00e8re les notes priv\u00e9es.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"1024\" height=\"541\" src=\"https:\/\/www.vaadata.com\/blog\/wp-content\/uploads\/2023\/01\/exploitation-graphql-private-pastes-1024x541.png\" alt=\"\" class=\"wp-image-5791\" srcset=\"https:\/\/www.vaadata.com\/blog\/wp-content\/uploads\/2023\/01\/exploitation-graphql-private-pastes-1024x541.png 1024w, https:\/\/www.vaadata.com\/blog\/wp-content\/uploads\/2023\/01\/exploitation-graphql-private-pastes-300x159.png 300w, https:\/\/www.vaadata.com\/blog\/wp-content\/uploads\/2023\/01\/exploitation-graphql-private-pastes.png 1196w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Si on clique sur le bouton <code>Private Pastes<\/code> et qu\u2019on intercepte la requ\u00eate avec l\u2019outil <a href=\"https:\/\/www.vaadata.com\/blog\/fr\/introduction-burp-outil-dedie-securite-plateformes-web\/\" target=\"_blank\" rel=\"noopener\" title=\"\">Burp Suite<\/a>, on remarque que la requ\u00eate suivante est transmise au serveur&nbsp;:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>query getPastes {\n        pastes(public:false) {\n          id\n          title\n          content\n          ipAddr\n          userAgent\n          owner {\n            name\n          }\n          }\n        }\n<\/code><\/pre>\n\n\n\n<p>En comparant cette requ\u00eate avec le graphique interactif de GraphQL Voyager, on peut d\u00e9terminer le chemin parcouru passant par les diff\u00e9rentes relations du sch\u00e9ma.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"1024\" height=\"561\" src=\"https:\/\/www.vaadata.com\/blog\/wp-content\/uploads\/2023\/01\/relations-schema-graphql-1024x561.png\" alt=\"\" class=\"wp-image-5799\" srcset=\"https:\/\/www.vaadata.com\/blog\/wp-content\/uploads\/2023\/01\/relations-schema-graphql-1024x561.png 1024w, https:\/\/www.vaadata.com\/blog\/wp-content\/uploads\/2023\/01\/relations-schema-graphql-300x164.png 300w, https:\/\/www.vaadata.com\/blog\/wp-content\/uploads\/2023\/01\/relations-schema-graphql.png 1169w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>L\u2019attribut <code>__typename<\/code><strong> <\/strong>peut \u00eatre ajout\u00e9 \u00e0 la requ\u00eate afin que le serveur retourne le nom de l\u2019objet pr\u00e9sent.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"1024\" height=\"608\" src=\"https:\/\/www.vaadata.com\/blog\/wp-content\/uploads\/2023\/01\/reponse-serveur-requete-graphql-1024x608.png\" alt=\"\" class=\"wp-image-5803\" srcset=\"https:\/\/www.vaadata.com\/blog\/wp-content\/uploads\/2023\/01\/reponse-serveur-requete-graphql-1024x608.png 1024w, https:\/\/www.vaadata.com\/blog\/wp-content\/uploads\/2023\/01\/reponse-serveur-requete-graphql-300x178.png 300w, https:\/\/www.vaadata.com\/blog\/wp-content\/uploads\/2023\/01\/reponse-serveur-requete-graphql.png 1193w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>En comprenant cette logique, il est possible de r\u00e9cup\u00e9rer les informations de l\u2019objet <code>users<\/code>, en passant par la relation <code>users<\/code>.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>query getPastes {\n\t__typename\n  \tusers {\n\t\tusername\n\t\tpassword\n\t\t__typename\n  }\n}\n<\/code><\/pre>\n\n\n\n<p>Ainsi, le serveur renvoie les informations confidentielles des diff\u00e9rents utilisateurs enregistr\u00e9s sur la plateforme.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"1024\" height=\"621\" src=\"https:\/\/www.vaadata.com\/blog\/wp-content\/uploads\/2023\/01\/reception-informations-confidentielles-reponse-serveur-1024x621.png\" alt=\"\" class=\"wp-image-5805\" srcset=\"https:\/\/www.vaadata.com\/blog\/wp-content\/uploads\/2023\/01\/reception-informations-confidentielles-reponse-serveur-1024x621.png 1024w, https:\/\/www.vaadata.com\/blog\/wp-content\/uploads\/2023\/01\/reception-informations-confidentielles-reponse-serveur-300x182.png 300w, https:\/\/www.vaadata.com\/blog\/wp-content\/uploads\/2023\/01\/reception-informations-confidentielles-reponse-serveur.png 1208w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Bien entendu, on pourrait aussi passer par le lien <code>search<\/code> puis <code>UserObject<\/code>, pour atteindre les informations des utilisateurs :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>query getPastes {\n\t__typename\n  \tsearch {\n\t\t\t... on UserObject {\n\t\t\t\tusername\n\t\t\t\tpassword\n\t\t\t\t__typename\n\t\t\t}\n\t\t\t__typename\n  }\n}\n<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"1024\" height=\"610\" src=\"https:\/\/www.vaadata.com\/blog\/wp-content\/uploads\/2023\/01\/reception-informations-confidentielles-reponse-serveur-2-1024x610.png\" alt=\"\" class=\"wp-image-5807\" srcset=\"https:\/\/www.vaadata.com\/blog\/wp-content\/uploads\/2023\/01\/reception-informations-confidentielles-reponse-serveur-2-1024x610.png 1024w, https:\/\/www.vaadata.com\/blog\/wp-content\/uploads\/2023\/01\/reception-informations-confidentielles-reponse-serveur-2-300x179.png 300w, https:\/\/www.vaadata.com\/blog\/wp-content\/uploads\/2023\/01\/reception-informations-confidentielles-reponse-serveur-2.png 1196w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Enfin, de la m\u00eame fa\u00e7on, la requ\u00eate suivante permet de r\u00e9cup\u00e9rer les donn\u00e9es de GraphQL&nbsp;:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>query getPastes {\n\tpastes {\n\t\tid\n\t\ttitle\n\t\tcontent\n\t\tpublic\n\t\tuserAgent\n\t\tipAddr\n\t\townerId\n\t\tburn\n\t\towner {\n\t\t\tid\n\t\t\tname\n\t\t\t__typename\n\t\t}\n\t\t__typename\n\t}\n\tsearch {\n\t\t... on UserObject {\n\t\t\tid\n\t\t\tusername\n\t\t\tpassword\n\t\t\t__typename\n\t\t}\n\t\t__typename\n\t}\n\taudits {\n\t\tid\n\t\tgqloperation\n\t\tgqlquery\n\t\ttimestamp\n\t\t__typename\n\t}\n\t__typename\n}\n<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"1024\" height=\"579\" src=\"https:\/\/www.vaadata.com\/blog\/wp-content\/uploads\/2023\/01\/recuperation-donnees-graphql-1024x579.png\" alt=\"\" class=\"wp-image-5809\" srcset=\"https:\/\/www.vaadata.com\/blog\/wp-content\/uploads\/2023\/01\/recuperation-donnees-graphql-1024x579.png 1024w, https:\/\/www.vaadata.com\/blog\/wp-content\/uploads\/2023\/01\/recuperation-donnees-graphql-300x170.png 300w, https:\/\/www.vaadata.com\/blog\/wp-content\/uploads\/2023\/01\/recuperation-donnees-graphql.png 1206w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Cas concret d&rsquo;une exploitation multi-tenant de GraphQL via une IDOR <\/h2>\n\n\n\n<h3 class=\"wp-block-heading has-text-color\" style=\"color:#c0b800\">Contexte<\/h3>\n\n\n\n<p>Lors d&rsquo;un pentest, nous avons \u00e9t\u00e9 amen\u00e9s \u00e0 tester une application SaaS \u00e0 architecture multi-tenant, disposant naturellement d&rsquo;un cloisonnement des donn\u00e9es entre diff\u00e9rentes entreprises. Et bien \u00e9videmment, chacune de ces entreprises disposait de ses propres utilisateurs, r\u00f4les et informations confidentielles. <\/p>\n\n\n\n<p>De fait, notre objectif \u00e9tait de v\u00e9rifier le bon cloisonnement des donn\u00e9es entre les diff\u00e9rentes entreprises, autrement dit essayer de r\u00e9cup\u00e9rer des informations auxquelles nous ne sommes pas du tout cens\u00e9s avoir acc\u00e8s. Par cons\u00e9quent, il s&rsquo;agissait ici d&rsquo;un <a href=\"https:\/\/www.vaadata.com\/blog\/fr\/test-intrusion-boite-noire-grise-blanche-3-options\/\" target=\"_blank\" rel=\"noopener\" title=\"\">test d&rsquo;intrusion en boite grise<\/a>, avec un compte utilisateur \u00ab\u00a0standard\u00a0\u00bb d&rsquo;une entreprise \u00e0 notre disposition. <\/p>\n\n\n\n<p>Pour r\u00e9sumer, nous devions d&rsquo;abord d\u00e9tecter un lien entre notre entreprise et une autre sur la plateforme et trouver des moyens de contourner le cloisonnement en place.<\/p>\n\n\n\n<h3 class=\"wp-block-heading has-text-color\" style=\"color:#c0b800\">D\u00e9couverte d&rsquo;une vuln\u00e9rabilit\u00e9 IDOR<\/h3>\n\n\n\n<p>En d\u00e9roulant m\u00e9thodiquement nos tests, nous avons identifi\u00e9 une vuln\u00e9rabilit\u00e9 IDOR sur une fonctionnalit\u00e9 de l&rsquo;application. Cette fonctionnalit\u00e9 permettait d&rsquo;assigner des r\u00f4les sp\u00e9cifiques \u00e0 des projets.<\/p>\n\n\n\n<p>Une <strong>IDOR (Insecure Direct Object Reference)<\/strong> est une vuln\u00e9rabilit\u00e9 de s\u00e9curit\u00e9 qui se produit lorsqu&rsquo;une application web ne contr\u00f4le pas correctement les acc\u00e8s aux objets auxquels un utilisateur peut acc\u00e9der. Cela signifie qu\u2019un utilisateur peut lire, modifier ou supprimer un objet qui ne lui appartient pas, comme des informations sensibles ou des fonctionnalit\u00e9s.<\/p>\n\n\n\n<p>Ainsi, nous avons d\u00e9couvert qu&rsquo;un utilisateur de notre entreprise \u00e9tait en mesure d&rsquo;assigner un r\u00f4le d&rsquo;une autre entreprise \u00e0 un de nos projets, en raison d&rsquo;un manque de contr\u00f4le des droits sur la modification des param\u00e8tres d&rsquo;un projet. Cela a cr\u00e9\u00e9 un lien entre un projet appartenant \u00e0 notre entreprise et un r\u00f4le appartenant \u00e0 une autre entreprise.<\/p>\n\n\n\n<h3 class=\"wp-block-heading has-text-color\" style=\"color:#c0b800\">Exploitation manque de contr\u00f4le de droits<\/h3>\n\n\n\n<p>Pour exploiter le manque de contr\u00f4le des droits dans GraphQL en combinant avec la vuln\u00e9rabilit\u00e9 IDOR, nous pouvons utiliser GraphQL pour r\u00e9cup\u00e9rer des informations li\u00e9es \u00e0 nos projets, notamment les r\u00f4les qui y sont assign\u00e9s. Ensuite, nous pouvons utiliser ce r\u00f4le pour pivoter vers des informations sensibles appartenant \u00e0 une autre entreprise, en utilisant les faiblesses de contr\u00f4le des acc\u00e8s.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Entreprise_Vaadata -&gt; Liste les r\u00f4les des projets -&gt; Pivot sur le r\u00f4le de l\u2019Entreprise B -&gt; Liste les utilisateurs de l'entreprise B -&gt; R\u00e9cup\u00e8re les donn\u00e9es appartenant aux utilisateurs<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Comment s\u00e9curiser GraphQL ? <\/h2>\n\n\n\n<p>Pour corriger les probl\u00e8mes de contr\u00f4le des droits sur GraphQL, il est important de mettre en place des m\u00e9canismes de s\u00e9curit\u00e9 pour s&rsquo;assurer que seuls les utilisateurs autoris\u00e9s ont acc\u00e8s aux informations et aux fonctionnalit\u00e9s souhait\u00e9es. Il existe plusieurs solutions pour cela. <\/p>\n\n\n\n<p>Tout d&rsquo;abord, il faut mettre en place un syst\u00e8me d&rsquo;authentification et d&rsquo;autorisation robuste. Cela signifie que les utilisateurs doivent fournir des informations d&rsquo;identification valides pour acc\u00e9der \u00e0 l&rsquo;application et que les autorisations sont v\u00e9rifi\u00e9es avant de permettre l&rsquo;acc\u00e8s \u00e0 des informations ou des fonctionnalit\u00e9s sp\u00e9cifiques.<\/p>\n\n\n\n<p>Ensuite, il est important de mettre en place des contr\u00f4les d&rsquo;acc\u00e8s bas\u00e9s sur les r\u00f4les. Cela signifie que les diff\u00e9rents r\u00f4les ont des autorisations diff\u00e9rentes pour acc\u00e9der \u00e0 des informations et \u00e0 des fonctionnalit\u00e9s sp\u00e9cifiques.<\/p>\n\n\n\n<p>Enfin, il est important de mettre en place des contr\u00f4les de validation de donn\u00e9es pour s&rsquo;assurer que les utilisateurs ne peuvent pas acc\u00e9der \u00e0 des informations ou \u00e0 des fonctionnalit\u00e9s qui ne leur sont pas destin\u00e9es en modifiant les param\u00e8tres de leurs requ\u00eates.<\/p>\n\n\n\n<p><strong>Auteur : Alexis MARTIN \u2013 Pentester @Vaadata<\/strong><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Lors d&rsquo;un pentest d&rsquo;application web, nous avons d\u00e9couvert une vuln\u00e9rabilit\u00e9 li\u00e9e \u00e0 la configuration et \u00e0 la mauvaise gestion des contr\u00f4les de droits sur GraphQL.<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[14],"tags":[],"class_list":{"0":"post-5759","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-technique"},"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.vaadata.com\/blog\/fr\/wp-json\/wp\/v2\/posts\/5759","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.vaadata.com\/blog\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.vaadata.com\/blog\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.vaadata.com\/blog\/fr\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.vaadata.com\/blog\/fr\/wp-json\/wp\/v2\/comments?post=5759"}],"version-history":[{"count":31,"href":"https:\/\/www.vaadata.com\/blog\/fr\/wp-json\/wp\/v2\/posts\/5759\/revisions"}],"predecessor-version":[{"id":7323,"href":"https:\/\/www.vaadata.com\/blog\/fr\/wp-json\/wp\/v2\/posts\/5759\/revisions\/7323"}],"wp:attachment":[{"href":"https:\/\/www.vaadata.com\/blog\/fr\/wp-json\/wp\/v2\/media?parent=5759"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.vaadata.com\/blog\/fr\/wp-json\/wp\/v2\/categories?post=5759"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.vaadata.com\/blog\/fr\/wp-json\/wp\/v2\/tags?post=5759"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}