{"id":4897,"date":"2020-12-21T11:26:44","date_gmt":"2020-12-21T14:26:44","guid":{"rendered":"https:\/\/www.dbarj.com.br\/2020\/12\/21c-gradual-database-password-rollover-brings-new-backdoor-opportunities\/"},"modified":"2020-12-21T14:07:28","modified_gmt":"2020-12-21T17:07:28","slug":"21c-gradual-database-password-rollover-brings-new-backdoor-opportunities","status":"publish","type":"post","link":"https:\/\/www.dbarj.com.br\/pt-br\/2020\/12\/21c-gradual-database-password-rollover-brings-new-backdoor-opportunities\/","title":{"rendered":"21c Gradual Database Password Rollover brings new backdoor opportunities"},"content":{"rendered":"<p>Oracle Database 21c introduced the new feature called &#8220;Gradual Database Password Rollover&#8221;. This allows the database password of the application user to be altered while allowing the older password to remain valid for the time specified by the\u00a0<code class=\"codeph\">PASSWORD_ROLLOVER_TIME<\/code> limit (PROFILE parameter).<\/p>\n<p>With this new feature, a password of an application can be changed without having to schedule a downtime, which is great. However,<strong> any new feature also brings new security opportunities for attackers<\/strong>.<\/p>\n<p>If an attacker wants to place a &#8220;second&#8221; password to later access the &#8220;SYS&#8221; or a &#8220;DBA&#8221; schema (<strong>aka backdoor<\/strong>) without raising any alert, this is now easy as 2 passwords can concurrently work for the same account.<\/p>\n<p><span style=\"color: #800000;\"><strong>Example 1:<\/strong><\/span><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"oracledb\">[oracle@lab21c ~]$ sqlplus \/nolog\r\n\r\nSQL*Plus: Release 21.0.0.0.0 - Production on Mon Dec 21 12:25:13 2020\r\nVersion 21.1.0.0.0\r\n\r\nCopyright (c) 1982, 2020, Oracle.  All rights reserved.\r\n\r\nSQL&gt; conn \/ as sysdba\r\nConnected.\r\nSQL&gt; create user C##DBA identified by \"welcome1\";\r\n\r\nUser created.\r\n\r\nSQL&gt; grant create session to C##DBA;\r\n\r\nGrant succeeded.\r\n\r\nSQL&gt; conn C##DBA\/welcome1\r\nConnected.\r\nSQL&gt; conn C##DBA\/mysecretpass\r\nConnected.\r\nSQL&gt; alter user C##DBA identified by \"welcome2\";\r\n\r\nUser altered.\r\n\r\nSQL&gt; conn C##DBA\/welcome2\r\nConnected.\r\nSQL&gt; conn C##DBA\/mysecretpass\r\nConnected.\r\n<\/pre>\n<p><span style=\"color: #800000;\"><strong>Example 2:<\/strong><\/span><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"oracledb\">SQL&gt; conn \/ as sysdba\r\nConnected.\r\nSQL&gt; alter user system identified by \"welcome1\";\r\n\r\nUser altered.\r\n\r\nSQL&gt; alter user system expire password rollover period;\r\n\r\nUser altered.\r\n\r\nSQL&gt; alter user system identified by \"welcome1\";\r\n\r\nUser altered.\r\n\r\nSQL&gt; conn system\/mysecretpass\r\nConnected.\r\nSQL&gt;\r\n<\/pre>\n<p>How someone could do something nasty like this and <span style=\"text-decoration: underline;\"><strong>how we protect against this possible backdoor implementation<\/strong><\/span> is what you are going to see in this post.<\/p>\n<p>PS: <a href=\"https:\/\/www.dbarj.com.br\/pt-br\/2020\/12\/understanding-internally-how-21c-gradual-database-password-rollover-works\/\" target=\"_blank\" rel=\"noopener\">In my previous post<\/a>, I explained how the new hashes we have in SPARE4 column of USER$ works during the rollover period. I recommend reading it before moving forward.<\/p>\n<h4>Getting started<\/h4>\n<p>So first of all, to allow a second password to work, an attacker would need to create a new password HASH on SPARE4 column on the USER$ table. Oracle did a great improvement and now<span style=\"text-decoration: underline;\"><strong> it&#8217;s impossible to run any UPDATE against USER$ table<\/strong><\/span> unless you open the database in migration mode. So this is not an option.<\/p>\n<p>Another way to add another password HASH\u00a0 would be intercepting the &#8220;ALTER USER &#8230; IDENTIFIED BY &#8230;&#8221; or the &#8220;CREATE USER &#8230; IDENTIFIED BY &#8230;&#8221;\u00a0 DDL calls.<\/p>\n<p>First thing that came into my mind was using a &#8220;before DDL trigger&#8221;. However, Oracle did another great implementation and it&#8217;s not possible to get the current used password on those triggers (via <strong>ora_sql_txt<\/strong> variable). So if the attacker used this method, the password would not least more than 7 days (max value for <strong>PASSWORD_ROLLOVER_TIME<\/strong>) as he can&#8217;t keep setting it.<\/p>\n<p>Going straight to the point, the final idea he could have would be intercepting this calls using profile functions, the only place where we do know the user password. When a CREATE or ALTER user password is called, the profile function would create <span style=\"text-decoration: underline;\">a job<\/span> to:<\/p>\n<ol>\n<li>Change the PASSWORD_ROLLOVER_TIME used by this account profile to 7 days (max allowed), if not already.<\/li>\n<li>Temporarily disable PASSWORD_REUSE_TIME, PASSWORD_REUSE_MAX (to avoid reuse errors).<\/li>\n<li>Temporarily disable PASSWORD_VERIFY_FUNCTION (to avoid a loop in the code).<\/li>\n<li>Set the password to a desired value (backdoor password).<\/li>\n<li>Expire the password rollover so the backdoor password will be the only one valid.<\/li>\n<li>Set the password to the user specified value.<\/li>\n<li>Restore back the disabled profile resources.<\/li>\n<\/ol>\n<p>This job will execute every 6 days so the attacker will ensure that the &#8220;second&#8221; password will always be valid (as the expiration is 7 days).<\/p>\n<p>So what is required:<\/p>\n<ul>\n<li>Create a procedure &#8220;proc1&#8221; that will set the new user password and the backdoor user password.<\/li>\n<li>Create a scheduler program that will use this procedure.<\/li>\n<li>Create a procedure &#8220;proc2&#8221; that will create the job using the program and the procedure &#8220;proc1&#8221; above whenever a user CREATE or ALTER is triggered.<\/li>\n<li>Change the current password functions to call this procedure &#8220;proc2&#8221;.<\/li>\n<\/ul>\n<p>The sample code to keep the second password always valid is available here: <a href=\"https:\/\/github.com\/dbarj\/sql-scripts\/blob\/main\/gradual_rollover_permanent_2ndpass.sql\" target=\"_blank\" rel=\"noopener\">https:\/\/github.com\/dbarj\/sql-scripts\/blob\/main\/gradual_rollover_permanent_2ndpass.sql<\/a><\/p>\n<h4>How to protect<\/h4>\n<p>To protect against this kind of opportunity (that can be used for the good and for the bad), you must:<\/p>\n<ol>\n<li>First and the most obvious: <strong>protect your systems that no user can connect (or escalate) to SYS<\/strong> . For a attacker to implement this backdoor, he must first be SYS. I know this sounds irrelevant, but most of the DB systems I&#8217;ve worked for are so badly security designed that is very easy for a normal user to perform this.<\/li>\n<li><strong>Enable Oracle Database Vault<\/strong> (if you have license to do it), which will make this much much harder (not to say impossible) to be implemented.<\/li>\n<li><strong>Use <a href=\"https:\/\/github.com\/dbarj\/orachksum\" target=\"_blank\" rel=\"noopener\">orachksum tool<\/a>\u00a0to scan your database periodically<\/strong> for internal code changes. The tool would point out the objects created under SYS schema that does not come with the default DB installation\/creation.<\/li>\n<\/ol>\n<h4>Conclusion<\/h4>\n<p>The best way to be always ahead and protect our DB systems is putting ourselves in the mind of an attacker and think how he could use any new feature to possibly deploy a malware in our databases. <strong>#thisistheway<\/strong><\/p>\n<p>And always remember:<\/p>\n<p><strong><span style=\"font-size: 14pt;\">With great features comes great responsibility.<br \/>\n<\/span><\/strong><span style=\"font-size: 12pt;\"><em>(Rodrigo Jorge &#8211; 2020-Dec, copied and adapt from Spider Man =]).<\/em><\/span><\/p>\n<b>Have you enjoyed? Please leave a comment or give a \ud83d\udc4d!<\/b>\n<div class='watch-action'><div class='watch-position align-left'><div class='action-like'><a class='lbg-style2 like-4897 jlk' href='javascript:void(0)' data-task='like' data-post_id='4897' data-nonce='de4404f630' rel='nofollow'><img class='wti-pixel' src='https:\/\/www.dbarj.com.br\/wp-content\/plugins\/wti-like-post\/images\/pixel.gif' title='Like' \/><span class='lc-4897 lc'>0<\/span><\/a><\/div><\/div> <div class='status-4897 status align-left'><\/div><\/div><div class='wti-clear'><\/div>","protected":false},"excerpt":{"rendered":"<p>Oracle Database 21c introduced the new feature called &#8220;Gradual Database Password Rollover&#8221;. This allows the database password of the application user to be altered while allowing the older password to remain valid for the time specified by the\u00a0PASSWORD_ROLLOVER_TIME limit (PROFILE parameter). With this new feature, a password of an application can be changed without having &hellip; <\/p>\n<p><a class=\"more-link btn\" href=\"https:\/\/www.dbarj.com.br\/pt-br\/2020\/12\/21c-gradual-database-password-rollover-brings-new-backdoor-opportunities\/\">Continue lendo<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[19,2],"tags":[],"class_list":["post-4897","post","type-post","status-publish","format-standard","hentry","category-security","category-database","item-wrap"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>21c Gradual Database Password Rollover brings new backdoor opportunities - DBA - Rodrigo Jorge - Oracle Tips and Guides<\/title>\n<meta name=\"description\" content=\"This post will describe how someone could implement a backdoor password using the Gradual Database Password Rollover feature.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.dbarj.com.br\/pt-br\/2020\/12\/21c-gradual-database-password-rollover-brings-new-backdoor-opportunities\/\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"DBA RJ\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. tempo de leitura\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.dbarj.com.br\\\/pt-br\\\/2020\\\/12\\\/21c-gradual-database-password-rollover-brings-new-backdoor-opportunities\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.dbarj.com.br\\\/pt-br\\\/2020\\\/12\\\/21c-gradual-database-password-rollover-brings-new-backdoor-opportunities\\\/\"},\"author\":{\"name\":\"DBA RJ\",\"@id\":\"https:\\\/\\\/www.dbarj.com.br\\\/pt-br\\\/#\\\/schema\\\/person\\\/28a44ca3a6633fe4156ad1ea209d40a9\"},\"headline\":\"21c Gradual Database Password Rollover brings new backdoor opportunities\",\"datePublished\":\"2020-12-21T14:26:44+00:00\",\"dateModified\":\"2020-12-21T17:07:28+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.dbarj.com.br\\\/pt-br\\\/2020\\\/12\\\/21c-gradual-database-password-rollover-brings-new-backdoor-opportunities\\\/\"},\"wordCount\":769,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.dbarj.com.br\\\/pt-br\\\/#\\\/schema\\\/person\\\/28a44ca3a6633fe4156ad1ea209d40a9\"},\"articleSection\":[\"Database Security\",\"Oracle Database General\"],\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.dbarj.com.br\\\/pt-br\\\/2020\\\/12\\\/21c-gradual-database-password-rollover-brings-new-backdoor-opportunities\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.dbarj.com.br\\\/pt-br\\\/2020\\\/12\\\/21c-gradual-database-password-rollover-brings-new-backdoor-opportunities\\\/\",\"url\":\"https:\\\/\\\/www.dbarj.com.br\\\/pt-br\\\/2020\\\/12\\\/21c-gradual-database-password-rollover-brings-new-backdoor-opportunities\\\/\",\"name\":\"21c Gradual Database Password Rollover brings new backdoor opportunities - DBA - Rodrigo Jorge - Oracle Tips and Guides\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.dbarj.com.br\\\/pt-br\\\/#website\"},\"datePublished\":\"2020-12-21T14:26:44+00:00\",\"dateModified\":\"2020-12-21T17:07:28+00:00\",\"description\":\"This post will describe how someone could implement a backdoor password using the Gradual Database Password Rollover feature.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.dbarj.com.br\\\/pt-br\\\/2020\\\/12\\\/21c-gradual-database-password-rollover-brings-new-backdoor-opportunities\\\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.dbarj.com.br\\\/pt-br\\\/2020\\\/12\\\/21c-gradual-database-password-rollover-brings-new-backdoor-opportunities\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.dbarj.com.br\\\/pt-br\\\/2020\\\/12\\\/21c-gradual-database-password-rollover-brings-new-backdoor-opportunities\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.dbarj.com.br\\\/pt-br\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"21c Gradual Database Password Rollover brings new backdoor opportunities\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.dbarj.com.br\\\/pt-br\\\/#website\",\"url\":\"https:\\\/\\\/www.dbarj.com.br\\\/pt-br\\\/\",\"name\":\"DBA - Rodrigo Jorge - Oracle Tips and Guides\",\"description\":\"Blog about Databases, Security and High Availability\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.dbarj.com.br\\\/pt-br\\\/#\\\/schema\\\/person\\\/28a44ca3a6633fe4156ad1ea209d40a9\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.dbarj.com.br\\\/pt-br\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-BR\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/www.dbarj.com.br\\\/pt-br\\\/#\\\/schema\\\/person\\\/28a44ca3a6633fe4156ad1ea209d40a9\",\"name\":\"DBA RJ\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/www.dbarj.com.br\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/RodrigoJorgePOUG19.png\",\"url\":\"https:\\\/\\\/www.dbarj.com.br\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/RodrigoJorgePOUG19.png\",\"contentUrl\":\"https:\\\/\\\/www.dbarj.com.br\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/RodrigoJorgePOUG19.png\",\"width\":712,\"height\":712,\"caption\":\"DBA RJ\"},\"logo\":{\"@id\":\"https:\\\/\\\/www.dbarj.com.br\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/RodrigoJorgePOUG19.png\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"21c Gradual Database Password Rollover brings new backdoor opportunities - DBA - Rodrigo Jorge - Oracle Tips and Guides","description":"This post will describe how someone could implement a backdoor password using the Gradual Database Password Rollover feature.","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:\/\/www.dbarj.com.br\/pt-br\/2020\/12\/21c-gradual-database-password-rollover-brings-new-backdoor-opportunities\/","twitter_misc":{"Escrito por":"DBA RJ","Est. tempo de leitura":"4 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.dbarj.com.br\/pt-br\/2020\/12\/21c-gradual-database-password-rollover-brings-new-backdoor-opportunities\/#article","isPartOf":{"@id":"https:\/\/www.dbarj.com.br\/pt-br\/2020\/12\/21c-gradual-database-password-rollover-brings-new-backdoor-opportunities\/"},"author":{"name":"DBA RJ","@id":"https:\/\/www.dbarj.com.br\/pt-br\/#\/schema\/person\/28a44ca3a6633fe4156ad1ea209d40a9"},"headline":"21c Gradual Database Password Rollover brings new backdoor opportunities","datePublished":"2020-12-21T14:26:44+00:00","dateModified":"2020-12-21T17:07:28+00:00","mainEntityOfPage":{"@id":"https:\/\/www.dbarj.com.br\/pt-br\/2020\/12\/21c-gradual-database-password-rollover-brings-new-backdoor-opportunities\/"},"wordCount":769,"commentCount":0,"publisher":{"@id":"https:\/\/www.dbarj.com.br\/pt-br\/#\/schema\/person\/28a44ca3a6633fe4156ad1ea209d40a9"},"articleSection":["Database Security","Oracle Database General"],"inLanguage":"pt-BR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.dbarj.com.br\/pt-br\/2020\/12\/21c-gradual-database-password-rollover-brings-new-backdoor-opportunities\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.dbarj.com.br\/pt-br\/2020\/12\/21c-gradual-database-password-rollover-brings-new-backdoor-opportunities\/","url":"https:\/\/www.dbarj.com.br\/pt-br\/2020\/12\/21c-gradual-database-password-rollover-brings-new-backdoor-opportunities\/","name":"21c Gradual Database Password Rollover brings new backdoor opportunities - DBA - Rodrigo Jorge - Oracle Tips and Guides","isPartOf":{"@id":"https:\/\/www.dbarj.com.br\/pt-br\/#website"},"datePublished":"2020-12-21T14:26:44+00:00","dateModified":"2020-12-21T17:07:28+00:00","description":"This post will describe how someone could implement a backdoor password using the Gradual Database Password Rollover feature.","breadcrumb":{"@id":"https:\/\/www.dbarj.com.br\/pt-br\/2020\/12\/21c-gradual-database-password-rollover-brings-new-backdoor-opportunities\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.dbarj.com.br\/pt-br\/2020\/12\/21c-gradual-database-password-rollover-brings-new-backdoor-opportunities\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.dbarj.com.br\/pt-br\/2020\/12\/21c-gradual-database-password-rollover-brings-new-backdoor-opportunities\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.dbarj.com.br\/pt-br\/"},{"@type":"ListItem","position":2,"name":"21c Gradual Database Password Rollover brings new backdoor opportunities"}]},{"@type":"WebSite","@id":"https:\/\/www.dbarj.com.br\/pt-br\/#website","url":"https:\/\/www.dbarj.com.br\/pt-br\/","name":"DBA - Rodrigo Jorge - Oracle Tips and Guides","description":"Blog about Databases, Security and High Availability","publisher":{"@id":"https:\/\/www.dbarj.com.br\/pt-br\/#\/schema\/person\/28a44ca3a6633fe4156ad1ea209d40a9"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.dbarj.com.br\/pt-br\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-BR"},{"@type":["Person","Organization"],"@id":"https:\/\/www.dbarj.com.br\/pt-br\/#\/schema\/person\/28a44ca3a6633fe4156ad1ea209d40a9","name":"DBA RJ","image":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.dbarj.com.br\/wp-content\/uploads\/2019\/09\/RodrigoJorgePOUG19.png","url":"https:\/\/www.dbarj.com.br\/wp-content\/uploads\/2019\/09\/RodrigoJorgePOUG19.png","contentUrl":"https:\/\/www.dbarj.com.br\/wp-content\/uploads\/2019\/09\/RodrigoJorgePOUG19.png","width":712,"height":712,"caption":"DBA RJ"},"logo":{"@id":"https:\/\/www.dbarj.com.br\/wp-content\/uploads\/2019\/09\/RodrigoJorgePOUG19.png"}}]}},"_links":{"self":[{"href":"https:\/\/www.dbarj.com.br\/pt-br\/wp-json\/wp\/v2\/posts\/4897","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dbarj.com.br\/pt-br\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dbarj.com.br\/pt-br\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dbarj.com.br\/pt-br\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dbarj.com.br\/pt-br\/wp-json\/wp\/v2\/comments?post=4897"}],"version-history":[{"count":3,"href":"https:\/\/www.dbarj.com.br\/pt-br\/wp-json\/wp\/v2\/posts\/4897\/revisions"}],"predecessor-version":[{"id":4904,"href":"https:\/\/www.dbarj.com.br\/pt-br\/wp-json\/wp\/v2\/posts\/4897\/revisions\/4904"}],"wp:attachment":[{"href":"https:\/\/www.dbarj.com.br\/pt-br\/wp-json\/wp\/v2\/media?parent=4897"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dbarj.com.br\/pt-br\/wp-json\/wp\/v2\/categories?post=4897"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dbarj.com.br\/pt-br\/wp-json\/wp\/v2\/tags?post=4897"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}