{"id":8557,"date":"2024-04-10T11:54:06","date_gmt":"2024-04-10T09:54:06","guid":{"rendered":"https:\/\/www.vaadata.com\/blog\/?p=8557"},"modified":"2024-04-10T11:54:10","modified_gmt":"2024-04-10T09:54:10","slug":"modifier-des-objets-serialises-java-aussi-facilement-quen-json","status":"publish","type":"post","link":"https:\/\/www.vaadata.com\/blog\/fr\/modifier-des-objets-serialises-java-aussi-facilement-quen-json\/","title":{"rendered":"Modifier des objets s\u00e9rialis\u00e9s Java aussi facilement qu&rsquo;en JSON"},"content":{"rendered":"<div class=\"wp-block-image\">\n<figure class=\"alignright size-large is-resized\"><img decoding=\"async\" width=\"1024\" height=\"535\" src=\"https:\/\/www.vaadata.com\/blog\/wp-content\/uploads\/2024\/02\/modifier-objets-serialises-java-1024x535.png\" alt=\"\" class=\"wp-image-8841\" style=\"width:397px;height:auto\" srcset=\"https:\/\/www.vaadata.com\/blog\/wp-content\/uploads\/2024\/02\/modifier-objets-serialises-java-1024x535.png 1024w, https:\/\/www.vaadata.com\/blog\/wp-content\/uploads\/2024\/02\/modifier-objets-serialises-java-300x157.png 300w, https:\/\/www.vaadata.com\/blog\/wp-content\/uploads\/2024\/02\/modifier-objets-serialises-java-1536x803.png 1536w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n<\/div>\n\n\n<p>Souvent, lorsque nous entendons parler de la s\u00e9rialisation Java, nous trouvons des ressources ou des challenges qui parlent uniquement de g\u00e9n\u00e9rer et d&rsquo;ex\u00e9cuter des payloads <a href=\"https:\/\/github.com\/frohoff\/ysoserial\" target=\"_blank\" rel=\"noopener\" title=\"\">ysoserial<\/a>. <\/p>\n\n\n\n<p>Dans certaines situations, cela peut fonctionner. Cependant, d\u00e8s qu&rsquo;un client est conscient de cette possibilit\u00e9, plut\u00f4t que de recourir \u00e0 un format plus s\u00fbr, il pr\u00e9f\u00e8re g\u00e9n\u00e9ralement utiliser \u00e0 une biblioth\u00e8que comme <a href=\"https:\/\/github.com\/kantega\/notsoserial\" target=\"_blank\" rel=\"noopener\" title=\"\">notsoserial<\/a> qui emp\u00eache la d\u00e9s\u00e9rialisation des classes non autoris\u00e9es.<\/p>\n\n\n\n<!--more-->\n\n\n\n<p>Et si l&rsquo;on bloque l&rsquo;utilisation de classes int\u00e9ressantes, nous sommes alors coinc\u00e9s avec une API classique qui utilise des objets s\u00e9rialis\u00e9s Java plut\u00f4t qu&rsquo;un format plus r\u00e9pandu tel que JSON. <\/p>\n\n\n\n<p>Cela signifie que nous pouvons effectuer des tests comme nous le ferions avec une API normale, n&rsquo;est-ce pas ? Techniquement, oui, mais la t\u00e2che n&rsquo;est pas simple. Les objets JSON peuvent \u00eatre r\u00e9\u00e9crits par des humains et nous pouvons \u00e9galement les lire facilement, ce qui n&rsquo;est pas le cas des objets s\u00e9rialis\u00e9s Java puisqu&rsquo;ils sont sous format binaire.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Analyse d&rsquo;un objet s\u00e9rialis\u00e9 Java <\/h2>\n\n\n\n<p>Lors d&rsquo;un pentest d&rsquo;application web, nous avons \u00e9t\u00e9 amen\u00e9s \u00e0 analyser un objet s\u00e9rialis\u00e9. Pour ce faire, nous avons opt\u00e9 pour l&rsquo;utilisation d&rsquo;outils tels que <a href=\"https:\/\/github.com\/NickstaDB\/SerializationDumper\" target=\"_blank\" rel=\"noopener\" title=\"\">SerializationDumper<\/a> afin de transformer le flux dans un format verbeux et plus lisible. <\/p>\n\n\n\n<p>Maintenant que nous pouvons analyser les donn\u00e9es, nous y trouverons peut-\u00eatre une cha\u00eene de caract\u00e8res int\u00e9ressante. L&rsquo;outil nous permet \u00e9galement de reconstruire le flux \u00e0 partir du format lisible, ce qui signifie que nous pouvons patcher des valeurs \u00e0 l&rsquo;int\u00e9rieur, c&rsquo;est g\u00e9nial non ?<\/p>\n\n\n\n<p>Oui\u2026 mais pas vraiment. En effet, si une application utilise peu de messages s\u00e9rialis\u00e9s, il est possible de faire ce processus manuellement malgr\u00e9 le temps n\u00e9cessaire, parfois long, pour extraire le flux s\u00e9rialis\u00e9, ex\u00e9cuter les outils dessus, reconstruire le flux et l&rsquo;ins\u00e9rer \u00e0 nouveau dans une requ\u00eate. Cependant, lorsque l&rsquo;application les utilise pour chaque message, cela devient tr\u00e8s chronophage.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">D\u00e9veloppement d&rsquo;une extension Burp<\/h2>\n\n\n\n<p>Pour faciliter notre travail, la premi\u00e8re \u00e9tape est l&rsquo;automatisation. Nous avons commenc\u00e9 par cr\u00e9er une extension <a href=\"https:\/\/www.vaadata.com\/blog\/fr\/introduction-burp-outil-dedie-securite-plateformes-web\/\" target=\"_blank\" rel=\"noopener\" title=\"\">Burp<\/a> qui int\u00e8gre une <a href=\"https:\/\/github.com\/inductiveautomation\/kindling\/tree\/main\/src\/main\/java\/deser\" target=\"_blank\" rel=\"noopener\" title=\"\">version modifi\u00e9e de SerializationDumper<\/a>. La version modifi\u00e9e est int\u00e9ressante car elle peut \u00eatre utilis\u00e9e comme une biblioth\u00e8que, ce qui \u00e9vite d&rsquo;avoir \u00e0 \u00e9crire un wrapper autour d&rsquo;un programme que nous devons appeler \u00e0 chaque fois que nous voulons faire quelque chose.<\/p>\n\n\n\n<p>Malheureusement, la version modifi\u00e9e ne semble pas supporter la reconstruction des flux Java et, m\u00eame si nous l&rsquo;impl\u00e9mentons, nous pensons que le format est encore trop verbeux pour que nous puissions travailler avec. Nous avons donc d\u00e9cid\u00e9 de tout red\u00e9velopper en tenant compte de ces pr\u00e9occupations.<\/p>\n\n\n\n<p>Nous sommes heureux d&rsquo;annoncer la sortie d&rsquo;un de nos outils interne : <a href=\"https:\/\/github.com\/vaadata\/java-serde\" target=\"_blank\" rel=\"noopener\" title=\"\">Java Serde<\/a>. <\/p>\n\n\n\n<p>Cet outil est utilis\u00e9 lorsque nous devons interagir avec des objets Java s\u00e9rialis\u00e9s car il les rend plus faciles \u00e0 manipuler. L&rsquo;id\u00e9e est de convertir un flux d&rsquo;objets en un document JSON et vice versa. Cela permet d&rsquo;identifier plus facilement la forme des objets mais aussi de faciliter le forgeage de nouveaux objets. <\/p>\n\n\n\n<p>Nous avons choisi d&rsquo;utiliser JSON plut\u00f4t qu&rsquo;un format personnalis\u00e9 lisible par l&rsquo;homme parce qu&rsquo;il s&rsquo;int\u00e8gre bien \u00e0 de nombreux outils d\u00e9j\u00e0 existants utilis\u00e9s pour manipuler les documents JSON.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">D\u00e9monstration de l&rsquo;outil Java Serde <\/h2>\n\n\n\n<p>Pour illustrer le fonctionnement de notre outil, nous prendrons quelques exemples tir\u00e9s de ressources en ligne, y compris les challenges de PortSwigger que nous risquons de d\u00e9voiler un peu. Pour \u00e9viter tout spoil, nous vous recommandons de les faire d&rsquo;abord de votre c\u00f4t\u00e9.<\/p>\n\n\n\n<h3 class=\"wp-block-heading has-text-color has-link-color wp-elements-7413e2c1348dadb7a23c9f166c2c1c14\" style=\"color:#c0b800\">D\u00e9coder un flux Java <\/h3>\n\n\n\n<p>Lors de l&rsquo;authentification sur un challenge de PortSwigger, nous recevons un cookie de session qui contient un flux Java encod\u00e9 en Base64.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"1024\" height=\"124\" src=\"https:\/\/www.vaadata.com\/blog\/wp-content\/uploads\/2024\/02\/session-cookie-containing-base64-encoded-java-stream-1024x124.png\" alt=\"\" class=\"wp-image-8560\" srcset=\"https:\/\/www.vaadata.com\/blog\/wp-content\/uploads\/2024\/02\/session-cookie-containing-base64-encoded-java-stream-1024x124.png 1024w, https:\/\/www.vaadata.com\/blog\/wp-content\/uploads\/2024\/02\/session-cookie-containing-base64-encoded-java-stream-300x36.png 300w, https:\/\/www.vaadata.com\/blog\/wp-content\/uploads\/2024\/02\/session-cookie-containing-base64-encoded-java-stream.png 1449w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Si nous d\u00e9codons le cookie, nous obtenons un flux Java brut qui n&rsquo;est pas facile \u00e0 manipuler. Nous ne pouvons pas modifier facilement la longueur des cha\u00eenes de caract\u00e8res et nous avons peu d&rsquo;informations sur la forme de l&rsquo;objet. <\/p>\n\n\n\n<p>Mais avec notre outil, nous pouvons transformer le binaire en un document JSON.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ echo \"rO0A&#91;\u2026]cg==\" | base64 -d | java -jar java-serde.jar decode\n&#91;\n  {\n    \"@handle\": 8257538,\n    \"@class\": {\n      \"@handle\": 8257536,\n      \"@name\": \"lab.actions.common.serializable.AccessTokenUser\",\n      \"@serial\": 1824517384844061057,\n      \"@flags\": 2,\n      \"@fields\": &#91;\n        {\n          \"@name\": \"accessToken\",\n          \"@type\": \"Ljava\/lang\/String;\"\n        },\n        {\n          \"@name\": \"username\",\n          \"@type\": \"Ljava\/lang\/String;\"\n        }\n      ],\n      \"@annotations\": &#91;],\n      \"@super\": null\n    },\n    \"@data\": &#91;\n      {\n        \"@values\": &#91;\n          \"fi9b2c76gn4pix5wfxadcxp2lbv6j35j\",\n          \"wiener\"\n        ],\n        \"@annotations\": &#91;]\n      }\n    ]\n  }\n]<\/code><\/pre>\n\n\n\n<p>Comme nous pouvons le voir, il y a beaucoup de donn\u00e9es mais nous avons au moins un JSON. L&rsquo;id\u00e9e est de garder beaucoup d&rsquo;informations sur le flux original pour faciliter sa reconstruction, mais cela le rend plus verbeux. <\/p>\n\n\n\n<p>Le premier champ que nous pouvons voir est \u00ab\u00a0handle\u00a0\u00bb. Il s&rsquo;agit d&rsquo;un num\u00e9ro attribu\u00e9 aux \u00e9l\u00e9ments qui peuvent \u00eatre r\u00e9f\u00e9renc\u00e9s plus tard dans le flux. Lorsque vous les \u00e9ditez, vous pouvez s\u00e9lectionner n&rsquo;importe quel num\u00e9ro, notre programme se chargera d&rsquo;utiliser le bon lors de l&rsquo;\u00e9criture du flux.<\/p>\n\n\n\n<p>Puis, nous pouvons facilement identifier qu&rsquo;il y a une classe nomm\u00e9e \u00ab\u00a0AccessTokenUser\u00a0\u00bb et ses champs, \u00ab\u00a0username\u00a0\u00bb et \u00ab\u00a0accessToken\u00a0\u00bb, qui sont tous deux des cha\u00eenes de caract\u00e8res. <\/p>\n\n\n\n<p>Enfin, nous pouvons voir les valeurs de chaque champ dans l&rsquo;ordre o\u00f9 ils sont d\u00e9clar\u00e9s dans la description de la classe (c&rsquo;est une chose qui pourrait changer dans le futur, avec un objet cl\u00e9-valeur pour rendre les choses plus faciles \u00e0 lire et \u00e0 \u00e9crire).<\/p>\n\n\n\n<p>Malheureusement, le challenge ne nous demande pas de modifier l&rsquo;objet (comme changer le nom d&rsquo;utilisateur).<\/p>\n\n\n\n<h3 class=\"wp-block-heading has-text-color has-link-color wp-elements-2ca0c367331a7041b46386049d874b3c\" style=\"color:#c0b800\">Patcher un flux <\/h3>\n\n\n\n<p>Imaginez que vous jouez \u00e0 un jeu trouv\u00e9 sur GitHub qui utilise des objets Java pour son format de sauvegarde et que vous n&rsquo;\u00eates pas tr\u00e8s patient ou bon au jeu. <\/p>\n\n\n\n<p>Vous pouvez modifier le fichier de sauvegarde pour qu&rsquo;il vous donne ce que vous voulez.<\/p>\n\n\n\n<p>Nous avons trouv\u00e9 un petit jeu sur GitHub : un <a href=\"https:\/\/github.com\/humbertodias\/game-zelda-slick2d\" target=\"_blank\" rel=\"noopener\" title=\"\">RPG inspir\u00e9 de Zelda<\/a>. <\/p>\n\n\n\n<p>Lorsqu&rsquo;on lance le jeu, on voit notre personnage, nos points de vie et notre argent (on voit aussi chaque hitbox, mais c&rsquo;est un d\u00e9tail). Apr\u00e8s avoir frapp\u00e9 quelques ennemis, il ne nous reste que 2 c\u0153urs et nous avons trouv\u00e9 5 rubis.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"803\" height=\"579\" src=\"https:\/\/www.vaadata.com\/blog\/wp-content\/uploads\/2024\/02\/rpg-game.png\" alt=\"\" class=\"wp-image-8564\" srcset=\"https:\/\/www.vaadata.com\/blog\/wp-content\/uploads\/2024\/02\/rpg-game.png 803w, https:\/\/www.vaadata.com\/blog\/wp-content\/uploads\/2024\/02\/rpg-game-300x216.png 300w\" sizes=\"(max-width: 803px) 100vw, 803px\" \/><\/figure>\n\n\n\n<p>Nous pouvons maintenant utiliser notre programme pour modifier notre fichier de sauvegarde afin de r\u00e9tablir notre sant\u00e9 et obtenir un peu d&rsquo;argent de poche.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ cat Zelda.ser | java -jar java-serde.jar decode\n&#91;\n  {\n    \"@handle\": 8257538,\n    \"@class\": {\n      \"@handle\": 8257536,\n      \"@name\": \"zelda.engine.SaveData\",\n      \"@serial\": 40658369698633593,\n      \"@flags\": 2,\n      \"@fields\": &#91;\n        {\n          \"@name\": \"health\",\n          \"@type\": \"I\"\n        },\n        {\n          \"@name\": \"rupee\",\n          \"@type\": \"I\"\n        },\n        {\n          \"@name\": \"sceneName\",\n          \"@type\": \"Ljava\/lang\/String;\"\n        }\n      ],\n      \"@annotations\": &#91;],\n      \"@super\": null\n    },\n    \"@data\": &#91;\n      {\n        \"@values\": &#91;\n          2,\n          5,\n          \"ForrestScene\"\n        ],\n        \"@annotations\": &#91;]\n      }\n    ]\n  }\n]<\/code><\/pre>\n\n\n\n<p>Nous pouvons voir ici que le format de sauvegarde est simple avec uniquement  trois informations sp\u00e9cifiques sur le jeu : la sant\u00e9 du joueur, les rubis, et sa position. <\/p>\n\n\n\n<p>Il est possible d&rsquo;utiliser la <a href=\"https:\/\/jqlang.github.io\/jq\/\" target=\"_blank\" rel=\"noopener\" title=\"\">commande jq<\/a> pour modifier le JSON facilement.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ cat Zelda.ser | java -jar java-serde.jar decode | jq '.&#91;0].\"@data\"&#91;0].\"@values\" = &#91;5, 69009, \"CastleScene\"]' &gt; Zelda.json\n$ cat Zelda.json | java -jar java-serde.jar encode &gt; Zelda.ser\n<\/code><\/pre>\n\n\n\n<p>Ensuite, si nous red\u00e9marrons le jeu, nous pouvons voir nos modifications.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"798\" height=\"580\" src=\"https:\/\/www.vaadata.com\/blog\/wp-content\/uploads\/2024\/02\/modifying-save-file.png\" alt=\"\" class=\"wp-image-8566\" srcset=\"https:\/\/www.vaadata.com\/blog\/wp-content\/uploads\/2024\/02\/modifying-save-file.png 798w, https:\/\/www.vaadata.com\/blog\/wp-content\/uploads\/2024\/02\/modifying-save-file-300x218.png 300w\" sizes=\"(max-width: 798px) 100vw, 798px\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading has-text-color has-link-color wp-elements-c91c4679ae5bed0e67eabc0934f27771\" style=\"color:#c0b800\">Echanges client-serveur<\/h3>\n\n\n\n<p>Lors d&rsquo;un <a href=\"https:\/\/www.vaadata.com\/fr\/pentest-web\/\" target=\"_blank\" rel=\"noopener\" title=\"\">pentest web<\/a>, nous avons test\u00e9 une application web et un client riche, tous deux \u00e9crits en Java. Pour chaque message envoy\u00e9 entre ces deux applications, un objet s\u00e9rialis\u00e9 Java \u00e9tait \u00e9galement envoy\u00e9. <\/p>\n\n\n\n<p>Au cours de nos tests, nous avons d\u00e9couvert une requ\u00eate int\u00e9ressante adress\u00e9e au serveur. Le client envoyait un chemin et le serveur r\u00e9pondait avec un jeton qui pouvait \u00eatre utilis\u00e9 pour t\u00e9l\u00e9charger le fichier au chemin donn\u00e9. <\/p>\n\n\n\n<p>En utilisant notre programme comme une extension Burp, il a \u00e9t\u00e9 possible de patcher facilement le flux dans la requ\u00eate et d&rsquo;extraire le jeton de la r\u00e9ponse.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"1024\" height=\"527\" src=\"https:\/\/www.vaadata.com\/blog\/wp-content\/uploads\/2024\/02\/using-java-serde-burp-1024x527.png\" alt=\"\" class=\"wp-image-8570\" srcset=\"https:\/\/www.vaadata.com\/blog\/wp-content\/uploads\/2024\/02\/using-java-serde-burp-1024x527.png 1024w, https:\/\/www.vaadata.com\/blog\/wp-content\/uploads\/2024\/02\/using-java-serde-burp-300x154.png 300w, https:\/\/www.vaadata.com\/blog\/wp-content\/uploads\/2024\/02\/using-java-serde-burp.png 1455w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Le d\u00e9veloppement de l&rsquo;extension nous a permis d&rsquo;identifier encore plus de vuln\u00e9rabilit\u00e9s et d&rsquo;\u00eatre plus efficaces pour les exploiter.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusion<\/h2>\n\n\n\n<p>Comme nous avons \u00e9crit le programme pour un cas d&rsquo;utilisation sp\u00e9cifique, certaines parties de la sp\u00e9cification ne sont pas impl\u00e9ment\u00e9es et pourront l&rsquo;\u00eatre \u00e0 l&rsquo;avenir si nous rencontrons ce cas. <\/p>\n\n\n\n<p>L&rsquo;extension Burp exige \u00e9galement que le flux se trouve \u00e0 un endroit sp\u00e9cifique et avec un encodage sp\u00e9cifique, vous pouvez toujours patcher le code pour extraire les donn\u00e9es du bon endroit. <\/p>\n\n\n\n<p>Par exemple, il n&rsquo;est pas possible de repr\u00e9senter la m\u00eame cha\u00eene de caract\u00e8res dans un flux avec deux handles diff\u00e9rents ; dans notre programme, nous fusionnons ces r\u00e9f\u00e9rences. Cela peut cr\u00e9er des diff\u00e9rences inattendues lors du r\u00e9encodage d&rsquo;un flux.<\/p>\n\n\n\n<p>Quoi qu&rsquo;il en soit, nous trouvons parfois des vuln\u00e9rabilit\u00e9s de base qui sont difficiles \u00e0 exploiter parce que nous ne pouvons pas manipuler les donn\u00e9es facilement, et pour qu&rsquo;elles soient corrig\u00e9es, nous devons d\u00e9montrer la vuln\u00e9rabilit\u00e9. Nous esp\u00e9rons que cette extension permettra \u00e0 d&rsquo;autres pentesters de d\u00e9montrer plus facilement les probl\u00e8mes.<\/p>\n\n\n\n<p><strong>Auteur : Arnaud PASCAL &#8211; Pentester @Vaadata<\/strong><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Souvent, lorsque nous entendons parler de la s\u00e9rialisation Java, nous trouvons des ressources ou des challenges qui parlent uniquement de g\u00e9n\u00e9rer et d&rsquo;ex\u00e9cuter des payloads ysoserial. Dans certaines situations, cela peut fonctionner. Cependant, d\u00e8s qu&rsquo;un client est conscient de cette possibilit\u00e9, plut\u00f4t que de recourir \u00e0 un format plus s\u00fbr, il pr\u00e9f\u00e8re g\u00e9n\u00e9ralement utiliser \u00e0<\/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-8557","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\/8557","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=8557"}],"version-history":[{"count":29,"href":"https:\/\/www.vaadata.com\/blog\/fr\/wp-json\/wp\/v2\/posts\/8557\/revisions"}],"predecessor-version":[{"id":9249,"href":"https:\/\/www.vaadata.com\/blog\/fr\/wp-json\/wp\/v2\/posts\/8557\/revisions\/9249"}],"wp:attachment":[{"href":"https:\/\/www.vaadata.com\/blog\/fr\/wp-json\/wp\/v2\/media?parent=8557"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.vaadata.com\/blog\/fr\/wp-json\/wp\/v2\/categories?post=8557"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.vaadata.com\/blog\/fr\/wp-json\/wp\/v2\/tags?post=8557"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}