{"id":418,"date":"2013-05-10T17:12:57","date_gmt":"2013-05-10T17:12:57","guid":{"rendered":"http:\/\/www.gironsec.com\/blog\/?p=418"},"modified":"2013-05-10T17:25:52","modified_gmt":"2013-05-10T17:25:52","slug":"exploit-in-skyrim","status":"publish","type":"post","link":"https:\/\/www.gironsec.com\/blog\/2013\/05\/exploit-in-skyrim\/","title":{"rendered":"Exploit In Skyrim"},"content":{"rendered":"<p>Welcome loyal readers!<\/p>\n<p>It&#8217;s been a dogs age. I&#8217;ve been split on projects and time, playing lots of video games and writing lots of code. Recently I found a format string vulnerability in a video game. A popular one at that. Further research into this video game revealed this vulnerability is not new. I found the same vulnerability in the same series of games dating all the way back to 2001. 12 years is a long time for a vulnerability to stick around.<\/p>\n<p>Ok, I&#8217;m done beating around the bush. I found a format string vulnerability in Morrowind, Oblivion, Fallout 3, Fallout New Vegas, and the latest game Skyrim. Further proof that I have too much time on my hands and my 2 hobbies are starting to blend together. Sort of like having a love for running and target shooting then combining the 2 into extreme paintball. <\/p>\n<p>Here&#8217;s how it works:<\/p>\n<p>By pressing the tilde key you bring up the console window. Most games have this as a sort of &#8216;debug&#8217; menu or for administration of game servers such as with Counterstrike or Battlefield. Anywho, in The Elder Scrolls games \/ Fallout, you can change character attributes and spawn items with this menu. This is where the format string vulnerability exists.<\/p>\n<p>Do you recall what a format string vulnerability is? Functions like printf() and its variants allow us to view and manipulate the program&#8217;s running stack frame by specifying certain format string characters. By passing %08x.%08x.%08x.%08x.%08x, we get 5 parameters from the stack and display them in an 8-digit padded hex format. The format string specifier &#8216;%s&#8217; displays memory from an address that is supplied on the stack. Then there&#8217;s the %n format string specifier &#8211; the one that crashes applications because it writes addresses to the stack. Powerful stuff.<\/p>\n<p>And its also not just The Elder Scrolls games that are affected. Since Bethesda produced The Elder scrolls games, its worth mentioning that other games produced by this company are vulnerable to this same attack. I&#8217;m of course talking about Fallout 3 and its counterpart, Fallout &#8211; New Vegas.<\/p>\n<p>I&#8217;m sure you&#8217;re all calling BS right now, so I&#8217;ve provided some screen shot proof. Have a look see.<\/p>\n<p>The first game is Skyrim.<br \/>\n<a href=\"http:\/\/www.gironsec.com\/blog\/wp-content\/uploads\/2013\/05\/vuln_vidya1.png\"><img decoding=\"async\" loading=\"lazy\" src=\"http:\/\/www.gironsec.com\/blog\/wp-content\/uploads\/2013\/05\/vuln_vidya1-300x174.png\" alt=\"vuln_vidya1\" width=\"300\" height=\"174\" class=\"alignnone size-medium wp-image-432\" srcset=\"https:\/\/www.gironsec.com\/blog\/wp-content\/uploads\/2013\/05\/vuln_vidya1-300x174.png 300w, https:\/\/www.gironsec.com\/blog\/wp-content\/uploads\/2013\/05\/vuln_vidya1-1024x595.png 1024w, https:\/\/www.gironsec.com\/blog\/wp-content\/uploads\/2013\/05\/vuln_vidya1.png 1452w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a><br \/>\nIn this example, I am just printing 3 values from the stack in hexadecimal format.<\/p>\n<p><a href=\"http:\/\/www.gironsec.com\/blog\/wp-content\/uploads\/2013\/05\/vuln_vidya2.png\"><img decoding=\"async\" loading=\"lazy\" src=\"http:\/\/www.gironsec.com\/blog\/wp-content\/uploads\/2013\/05\/vuln_vidya2-300x174.png\" alt=\"vuln_vidya2\" width=\"300\" height=\"174\" class=\"alignnone size-medium wp-image-429\" srcset=\"https:\/\/www.gironsec.com\/blog\/wp-content\/uploads\/2013\/05\/vuln_vidya2-300x174.png 300w, https:\/\/www.gironsec.com\/blog\/wp-content\/uploads\/2013\/05\/vuln_vidya2-1024x596.png 1024w, https:\/\/www.gironsec.com\/blog\/wp-content\/uploads\/2013\/05\/vuln_vidya2.png 1456w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a><br \/>\nAnd now I&#8217;m writing the value of whatever was stored in the previous buffer to the stack which is in turn crashing the program.<\/p>\n<p><a href=\"http:\/\/www.gironsec.com\/blog\/wp-content\/uploads\/2013\/05\/vuln_vidya3.png\"><img decoding=\"async\" loading=\"lazy\" src=\"http:\/\/www.gironsec.com\/blog\/wp-content\/uploads\/2013\/05\/vuln_vidya3-300x174.png\" alt=\"vuln_vidya3\" width=\"300\" height=\"174\" class=\"alignnone size-medium wp-image-428\" srcset=\"https:\/\/www.gironsec.com\/blog\/wp-content\/uploads\/2013\/05\/vuln_vidya3-300x174.png 300w, https:\/\/www.gironsec.com\/blog\/wp-content\/uploads\/2013\/05\/vuln_vidya3-1024x595.png 1024w, https:\/\/www.gironsec.com\/blog\/wp-content\/uploads\/2013\/05\/vuln_vidya3.png 1456w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a><br \/>\nHere&#8217;s Fallout inside the &#8216;Great Khan&#8217;s longhouse&#8217; testing with &#8216;%x&#8217; again.<\/p>\n<p><a href=\"http:\/\/www.gironsec.com\/blog\/wp-content\/uploads\/2013\/05\/vuln_vidya4.png\"><img decoding=\"async\" loading=\"lazy\" src=\"http:\/\/www.gironsec.com\/blog\/wp-content\/uploads\/2013\/05\/vuln_vidya4-300x174.png\" alt=\"vuln_vidya4\" width=\"300\" height=\"174\" class=\"alignnone size-medium wp-image-427\" srcset=\"https:\/\/www.gironsec.com\/blog\/wp-content\/uploads\/2013\/05\/vuln_vidya4-300x174.png 300w, https:\/\/www.gironsec.com\/blog\/wp-content\/uploads\/2013\/05\/vuln_vidya4-1024x596.png 1024w, https:\/\/www.gironsec.com\/blog\/wp-content\/uploads\/2013\/05\/vuln_vidya4.png 1455w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a><br \/>\nAnd another crash after writing BS contents to the stack frame.<\/p>\n<p><a href=\"http:\/\/www.gironsec.com\/blog\/wp-content\/uploads\/2013\/05\/vuln_vidya5.png\"><img decoding=\"async\" loading=\"lazy\" src=\"http:\/\/www.gironsec.com\/blog\/wp-content\/uploads\/2013\/05\/vuln_vidya5-300x230.png\" alt=\"vuln_vidya5\" width=\"300\" height=\"230\" class=\"alignnone size-medium wp-image-426\" srcset=\"https:\/\/www.gironsec.com\/blog\/wp-content\/uploads\/2013\/05\/vuln_vidya5-300x230.png 300w, https:\/\/www.gironsec.com\/blog\/wp-content\/uploads\/2013\/05\/vuln_vidya5-1024x786.png 1024w, https:\/\/www.gironsec.com\/blog\/wp-content\/uploads\/2013\/05\/vuln_vidya5.png 1289w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a><br \/>\nThis is from Morrowind, released in 2001, the same vulnerability is found involving the scripting module.<\/p>\n<p><a href=\"http:\/\/www.gironsec.com\/blog\/wp-content\/uploads\/2013\/05\/vuln_vidya6.png\"><img decoding=\"async\" loading=\"lazy\" src=\"http:\/\/www.gironsec.com\/blog\/wp-content\/uploads\/2013\/05\/vuln_vidya6-300x230.png\" alt=\"vuln_vidya6\" width=\"300\" height=\"230\" class=\"alignnone size-medium wp-image-425\" srcset=\"https:\/\/www.gironsec.com\/blog\/wp-content\/uploads\/2013\/05\/vuln_vidya6-300x230.png 300w, https:\/\/www.gironsec.com\/blog\/wp-content\/uploads\/2013\/05\/vuln_vidya6-1024x787.png 1024w, https:\/\/www.gironsec.com\/blog\/wp-content\/uploads\/2013\/05\/vuln_vidya6.png 1297w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a><br \/>\nAnd once again, crashed for writing BS to the stack.<\/p>\n<p>I&#8217;m certain the same vulnerability lies in Fallout 3 and Oblivion however I was too lazy to install to show you all, but you get the idea. Same vulnerable scripting module.<br \/>\nWhy stop at screen shots? I&#8217;m sure you&#8217;re all dying to see some static binary analysis and the root cause. <\/p>\n<p>After some digging around inside Morrowind, I found out where the call was being made for the syntax error handler since this is where the format string vulnerability lies:<\/p>\n<pre style='color:#000000;background:#ffffff;'>\r\n<span style='color:#696969; '>; at offset 004FCD10<\/span>\r\n<span style='color:#800000; font-weight:bold; '>mov<\/span> <span style='color:#000080; '>eax<\/span><span style='color:#808030; '>,<\/span> <span style='color:#808030; '>[<\/span><span style='color:#000080; '>ebp<\/span><span style='color:#808030; '>+<\/span><span style='color:#008000; '>64h<\/span><span style='color:#808030; '>]<\/span>\r\n<span style='color:#800000; font-weight:bold; '>mov<\/span> <span style='color:#000080; '>edx<\/span><span style='color:#808030; '>,<\/span> <span style='color:#808030; '>[<\/span><span style='color:#000080; '>ebp<\/span><span style='color:#808030; '>+<\/span><span style='color:#008000; '>50h<\/span><span style='color:#808030; '>]<\/span>\r\n<span style='color:#800000; font-weight:bold; '>lea<\/span> <span style='color:#000080; '>ecx<\/span><span style='color:#808030; '>,<\/span> <span style='color:#808030; '>[<\/span><span style='color:#000080; '>eax<\/span><span style='color:#808030; '>+<\/span><span style='color:#000080; '>ebp<\/span><span style='color:#808030; '>+<\/span><span style='color:#008000; '>6Ch<\/span><span style='color:#808030; '>]<\/span>\r\n<span style='color:#800000; font-weight:bold; '>push<\/span> <span style='color:#000080; '>ecx<\/span>\r\n<span style='color:#800000; font-weight:bold; '>push<\/span> <span style='color:#000080; '>edx<\/span>\r\n<span style='color:#800000; font-weight:bold; '>lea<\/span> <span style='color:#000080; '>eax<\/span><span style='color:#808030; '>,<\/span> <span style='color:#808030; '>[<\/span><span style='color:#000080; '>ebp<\/span><span style='color:#808030; '>+<\/span><span style='color:#008000; '>0Ch<\/span><span style='color:#808030; '>]<\/span>\r\n<span style='color:#800000; font-weight:bold; '>push<\/span> <span style='color:#000080; '>eax<\/span> <span style='color:#696969; '>; Args<\/span>\r\n<span style='color:#800000; font-weight:bold; '>push<\/span> <span style='color:#800000; font-weight:bold; '>offset<\/span> aScriptSSynta_<span style='color:#008c00; '>4<\/span> <span style='color:#696969; '>; \u201cScript %s\\nSyntax Error Line %d.\\r\\n%s\\r\\nCould not parse this line.\u2019\u201d<\/span>\r\n<span style='color:#800000; font-weight:bold; '>push<\/span> <span style='color:#000080; '>ebp<\/span> <span style='color:#696969; '>; int<\/span>\r\n<span style='color:#800000; font-weight:bold; '>call<\/span> <span style='color:#e34adc; '>sub_4F72E0<\/span>\r\n<span style='color:#800000; font-weight:bold; '>add<\/span> <span style='color:#000080; '>esp<\/span><span style='color:#808030; '>,<\/span> <span style='color:#008000; '>14h<\/span>\r\n<span style='color:#800000; font-weight:bold; '>pop<\/span> <span style='color:#000080; '>edi<\/span>\r\n<span style='color:#800000; font-weight:bold; '>pop<\/span> <span style='color:#000080; '>esi<\/span>\r\n<span style='color:#800000; font-weight:bold; '>pop<\/span> <span style='color:#000080; '>ebp<\/span>\r\n<span style='color:#800000; font-weight:bold; '>mov<\/span> <span style='color:#000080; '>eax<\/span><span style='color:#808030; '>,<\/span> <span style='color:#008000; '>0FFFFh<\/span>\r\n<span style='color:#800000; font-weight:bold; '>pop<\/span> <span style='color:#000080; '>ebx<\/span>\r\n<span style='color:#800000; font-weight:bold; '>add<\/span> <span style='color:#000080; '>esp<\/span><span style='color:#808030; '>,<\/span> <span style='color:#008c00; '>8<\/span>\r\n<span style='color:#800000; font-weight:bold; '>retn<\/span>\r\n<\/pre>\n<p>Since this is a &#8216;fastcall&#8217; style function, the arguments are placed into registers prior to the function call  to &#8216;sub_4F72E0&#8217;. Inside this sub routine lies our problem.<\/p>\n<pre style='color:#000000;background:#ffffff;'>\r\n<span style='color:#696969; '>;.text:004F72E0 ; int __cdecl sub_4F72E0(int, char *Format, char Args)<\/span>\r\n<span style='color:#800000; font-weight:bold; '>mov<\/span>     <span style='color:#000080; '>ecx<\/span><span style='color:#808030; '>,<\/span> <span style='color:#808030; '>[<\/span><span style='color:#000080; '>esp<\/span><span style='color:#808030; '>+<\/span>Format<span style='color:#808030; '>]<\/span>\r\n<span style='color:#800000; font-weight:bold; '>sub<\/span>     <span style='color:#000080; '>esp<\/span><span style='color:#808030; '>,<\/span> <span style='color:#008000; '>104h<\/span>\r\n<span style='color:#800000; font-weight:bold; '>lea<\/span>     <span style='color:#000080; '>eax<\/span><span style='color:#808030; '>,<\/span> <span style='color:#808030; '>[<\/span><span style='color:#000080; '>esp<\/span><span style='color:#808030; '>+<\/span><span style='color:#008000; '>104h<\/span><span style='color:#808030; '>+<\/span>Args<span style='color:#808030; '>]<\/span>\r\n<span style='color:#800000; font-weight:bold; '>push<\/span>    <span style='color:#000080; '>eax<\/span>             <span style='color:#696969; '>; Args<\/span>\r\n<span style='color:#800000; font-weight:bold; '>push<\/span>    <span style='color:#000080; '>ecx<\/span>             <span style='color:#696969; '>; Format<\/span>\r\n<span style='color:#800000; font-weight:bold; '>lea<\/span>     <span style='color:#000080; '>edx<\/span><span style='color:#808030; '>,<\/span> <span style='color:#808030; '>[<\/span><span style='color:#000080; '>esp<\/span><span style='color:#808030; '>+<\/span><span style='color:#008000; '>10Ch<\/span><span style='color:#808030; '>+<\/span>Dest<span style='color:#808030; '>]<\/span>\r\n<span style='color:#800000; font-weight:bold; '>push<\/span>    <span style='color:#000080; '>edx<\/span>             <span style='color:#696969; '>; Dest<\/span>\r\n<span style='color:#800000; font-weight:bold; '>call<\/span>    <span style='color:#e34adc; '>ds<\/span><span style='color:#808030; '>:<\/span>vsprintf\r\n<span style='color:#800000; font-weight:bold; '>mov<\/span>     <span style='color:#000080; '>eax<\/span><span style='color:#808030; '>,<\/span> dword_7CEC0C\r\n<span style='color:#800000; font-weight:bold; '>add<\/span>     <span style='color:#000080; '>esp<\/span><span style='color:#808030; '>,<\/span> <span style='color:#008000; '>0Ch<\/span>\r\n<span style='color:#800000; font-weight:bold; '>cmp<\/span>     <span style='color:#000080; '>eax<\/span><span style='color:#808030; '>,<\/span> <span style='color:#008c00; '>1<\/span>\r\n<span style='color:#800000; font-weight:bold; '>jnz<\/span><span style='color:#800000; font-weight:bold; '>     short<\/span> <span style='color:#e34adc; '>loc_4F732D<\/span>\r\n<span style='color:#800000; font-weight:bold; '>mov<\/span>     <span style='color:#000080; '>ecx<\/span><span style='color:#808030; '>,<\/span> dword_7C67DC\r\n<span style='color:#800000; font-weight:bold; '>lea<\/span>     <span style='color:#000080; '>eax<\/span><span style='color:#808030; '>,<\/span> <span style='color:#808030; '>[<\/span><span style='color:#000080; '>esp<\/span><span style='color:#808030; '>+<\/span><span style='color:#008000; '>104h<\/span><span style='color:#808030; '>+<\/span>Dest<span style='color:#808030; '>]<\/span>\r\n<span style='color:#800000; font-weight:bold; '>push<\/span>    <span style='color:#000080; '>eax<\/span>             <span style='color:#696969; '>; Format<\/span>\r\n<span style='color:#800000; font-weight:bold; '>push<\/span>    <span style='color:#000080; '>ecx<\/span>             <span style='color:#696969; '>; int<\/span>\r\n<span style='color:#800000; font-weight:bold; '>call<\/span>    <span style='color:#e34adc; '>sub_40F970<\/span>\r\n<span style='color:#800000; font-weight:bold; '>add<\/span>     <span style='color:#000080; '>esp<\/span><span style='color:#808030; '>,<\/span> <span style='color:#008c00; '>8<\/span>\r\n<span style='color:#800000; font-weight:bold; '>mov<\/span>     byte_7CEC1<span style='color:#008c00; '>0<\/span><span style='color:#808030; '>,<\/span> <span style='color:#008c00; '>1<\/span>\r\n<span style='color:#800000; font-weight:bold; '>add<\/span>     <span style='color:#000080; '>esp<\/span><span style='color:#808030; '>,<\/span> <span style='color:#008000; '>104h<\/span>\r\n<span style='color:#800000; font-weight:bold; '>retn<\/span>\r\n<span style='color:#696969; '>;^<\/span>\r\n<span style='color:#696969; '>;|<\/span>\r\n<span style='color:#696969; '>;v<\/span>\r\n<span style='color:#e34adc; '>loc_4F732D:<\/span>                             <span style='color:#696969; '>; CODE XREF: sub_4F72E0+29\u0018j<\/span>\r\n<span style='color:#800000; font-weight:bold; '>lea<\/span>     <span style='color:#000080; '>edx<\/span><span style='color:#808030; '>,<\/span> <span style='color:#808030; '>[<\/span><span style='color:#000080; '>esp<\/span><span style='color:#808030; '>+<\/span><span style='color:#008000; '>104h<\/span><span style='color:#808030; '>+<\/span>Dest<span style='color:#808030; '>]<\/span>\r\n<span style='color:#800000; font-weight:bold; '>push<\/span>    <span style='color:#000080; '>edx<\/span>             <span style='color:#696969; '>; Format<\/span>\r\n<span style='color:#800000; font-weight:bold; '>call<\/span>    <span style='color:#e34adc; '>sub_477400<\/span>\r\n<span style='color:#800000; font-weight:bold; '>add<\/span>     <span style='color:#000080; '>esp<\/span><span style='color:#808030; '>,<\/span> <span style='color:#008c00; '>4<\/span>\r\n<span style='color:#800000; font-weight:bold; '>mov<\/span>     byte_7CEC1<span style='color:#008c00; '>0<\/span><span style='color:#808030; '>,<\/span> <span style='color:#008c00; '>1<\/span>\r\n<span style='color:#800000; font-weight:bold; '>add<\/span>     <span style='color:#000080; '>esp<\/span><span style='color:#808030; '>,<\/span> <span style='color:#008000; '>104h<\/span>\r\n<span style='color:#800000; font-weight:bold; '>retn<\/span>\r\n<span style='color:#004a43; '>endp<\/span>\r\n<\/pre>\n<p>As As I&#8217;ve said before, printf() style functions are the cause of format string vulnerabilities and in this case, its vsprintf(). One of the function arguments is being passed to vsprintf() without proper checking. <\/p>\n<p>Here&#8217;s the function again in IDA if you want fancy highlighting:<br \/>\n<a href=\"http:\/\/www.gironsec.com\/blog\/wp-content\/uploads\/2013\/05\/vuln_vidya7.png\"><img decoding=\"async\" loading=\"lazy\" src=\"http:\/\/www.gironsec.com\/blog\/wp-content\/uploads\/2013\/05\/vuln_vidya7-300x168.png\" alt=\"vuln_vidya7\" width=\"300\" height=\"168\" class=\"alignnone size-medium wp-image-430\" srcset=\"https:\/\/www.gironsec.com\/blog\/wp-content\/uploads\/2013\/05\/vuln_vidya7-300x168.png 300w, https:\/\/www.gironsec.com\/blog\/wp-content\/uploads\/2013\/05\/vuln_vidya7-1024x576.png 1024w, https:\/\/www.gironsec.com\/blog\/wp-content\/uploads\/2013\/05\/vuln_vidya7.png 1920w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>So far, the only feasible way to exploit the game I&#8217;ve come up with is by some sort of hand crafted mod or plugin for the game as that would have access to the scripting console on which the vulnerabilities lie. That said, it would be difficult to exploit in the wild also do in part to the video games having no network capability.<\/p>\n<p>One thing I am looking forward to is the newest Elder Scrolls game by Bethesda &#8211; The Elder Scrolls Online. This online capability might just make remote exploitation of my 0day feasible. Why? If the same vulnerability is present in Morrowind released in 2002 is still present in Skyrim (released 2012), the odds are in my favor that the same vulnerability will be in the latest game release. <\/p>\n<p>Since its pretty hard to exploit these vulnerabilities given the game has to be running, I&#8217;m not going to bother with posting on bugtraq or emailing devs who will send me angry threatening emails. So for now, they&#8217;re 0days to be picked apart by people better than me. <\/p>\n<p>For more info on format string exploits, check this paper out: <a href=\"http:\/\/julianor.tripod.com\/bc\/formatstring-1.2.pdf\">Format Strings<\/a><\/p>\n<p>Happy hacking!<br \/>\n<a href=\"http:\/\/www.gironsec.com\/blog\/wp-content\/uploads\/2013\/05\/1329968336101.jpg\"><img decoding=\"async\" loading=\"lazy\" src=\"http:\/\/www.gironsec.com\/blog\/wp-content\/uploads\/2013\/05\/1329968336101.jpg\" alt=\"1329968336101\" width=\"400\" height=\"370\" class=\"alignnone size-full wp-image-433\" srcset=\"https:\/\/www.gironsec.com\/blog\/wp-content\/uploads\/2013\/05\/1329968336101.jpg 400w, https:\/\/www.gironsec.com\/blog\/wp-content\/uploads\/2013\/05\/1329968336101-300x277.jpg 300w\" sizes=\"(max-width: 400px) 100vw, 400px\" \/><\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Welcome loyal readers! It&#8217;s been a dogs age. I&#8217;ve been split on projects and time, playing lots of video games and writing lots of code. Recently I found a format string vulnerability in a video game. A popular one at that. Further research into this video game revealed this vulnerability is not new. I found [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[4,6],"tags":[22,105,59,9,60,58],"_links":{"self":[{"href":"https:\/\/www.gironsec.com\/blog\/wp-json\/wp\/v2\/posts\/418"}],"collection":[{"href":"https:\/\/www.gironsec.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.gironsec.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.gironsec.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.gironsec.com\/blog\/wp-json\/wp\/v2\/comments?post=418"}],"version-history":[{"count":13,"href":"https:\/\/www.gironsec.com\/blog\/wp-json\/wp\/v2\/posts\/418\/revisions"}],"predecessor-version":[{"id":435,"href":"https:\/\/www.gironsec.com\/blog\/wp-json\/wp\/v2\/posts\/418\/revisions\/435"}],"wp:attachment":[{"href":"https:\/\/www.gironsec.com\/blog\/wp-json\/wp\/v2\/media?parent=418"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gironsec.com\/blog\/wp-json\/wp\/v2\/categories?post=418"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gironsec.com\/blog\/wp-json\/wp\/v2\/tags?post=418"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}