{"id":29985,"date":"2022-09-24T12:11:27","date_gmt":"2022-09-24T12:11:27","guid":{"rendered":"https:\/\/egrowonline.com\/?p=29985"},"modified":"2022-09-24T12:11:27","modified_gmt":"2022-09-24T12:11:27","slug":"why-unsuspecting-data-leaks-are-a-key-to-rampant-blockchain-hacks","status":"publish","type":"post","link":"http:\/\/egrowonline.com\/?p=29985","title":{"rendered":"Why Unsuspecting Data Leaks Are a Key to Rampant Blockchain Hacks"},"content":{"rendered":"<p> <br \/>\n<\/p>\n<div id=\"tns-post-body-content\">\n<p>Last month, Solana blockchain faced <a target=\"_blank\" href=\"https:\/\/thenewstack.io\/solana-wallet-exploit-drains-funds-from-users\/\" class=\"local-link\" rel=\"noopener\">yet another attack<\/a> in a series of recent attacks targeting blockchains. Blockchains are the ultimate record of crypto assets and recording transactions from one wallet to another on the ledger guarantees that money gets transferred and the operation virtually remains anonymous.<\/p>\n<p>This is an absolute gem for criminals because 1) few financial and security regulations exist in this modern decentralized finance (DeFi) world as of now and;<span class=\"Apple-converted-space\">\u00a0 <\/span>2) anonymity on the blockchain guarantees a very difficult investigation trajectory and almost no way to pinpoint where the money actually went.<span class=\"Apple-converted-space\">\u00a0<\/span><\/p>\n<blockquote>\n<p>Imagine hundreds of <a target=\"_blank\" href=\"https:\/\/www.fbi.gov\/history\/famous-cases\/db-cooper-hijacking\" class=\"ext-link\" rel=\"external noopener\"><span class=\"s1\">D.B Coopers<\/span><\/a> jumping from hundreds of airplanes every day with bags full of cash \ud83d\ude00<\/p>\n<\/blockquote>\n<p class=\"p4\">The top vectors of blockchain attacks are smart contract vulnerabilities, protocol and design flaws, crypto-related bugs, rug-pull scams, etc. Out of these, wallet compromises and key leaks together accounted for <a target=\"_blank\" href=\"https:\/\/www.zdnet.com\/article\/these-are-the-flaws-that-let-hackers-attack-blockchain-and-defi-projects\/\" class=\"ext-link\" rel=\"external noopener\"><span class=\"s1\">14% of total attacks last year!<\/span><\/a><\/p>\n<h2 class=\"p5\">The Hack<\/h2>\n<p class=\"p6\">On August 3, around USD $6 million worth of SOL, BTC, ETH, USDT and other currencies on Solana as well as Ethereum blockchains were siphoned off from thousands of individual wallets and transferred to hackers\u2019 wallets and that eventually were sent to various money laundering wallets.<\/p>\n<p class=\"p6\">SlowMist was the <a target=\"_blank\" href=\"https:\/\/slowmist.medium.com\/analysis-of-large-scale-theft-of-solana-5782cc999df4\" class=\"ext-link\" rel=\"external noopener\"><span class=\"s1\">first to report<\/span><\/a> this attack and begin investigations. While a <a target=\"_blank\" href=\"https:\/\/slowmist.medium.com\/analysis-of-a-large-scale-attack-on-solana-part-2-ee105d907c12\" class=\"ext-link\" rel=\"external noopener\"><span class=\"s1\">thorough investigation <\/span><\/a>is still in progress, some undeniable facts have emerged on how the attack occurred. The key to the attack as well as the discovery of the attack is the Slope wallet app that boasts itself as \u201cRobinhood of DeFi.\u201d<\/p>\n<h2 class=\"p7\">The Steep \u2018Slope\u2019 of Trust<span class=\"Apple-converted-space\">\u00a0<\/span><\/h2>\n<p class=\"p3\">Like thousands of other apps, Slope used a log monitoring tool called Sentry to track various events in the app. This is common practice and not considered harmful in itself. However, note that technically anything that the app produces while interacting with a human can be tracked and sent to a corresponding log tracking server.<\/p>\n<p class=\"p3\">In this instance, the Slope wallet from v2.2.0+ was quietly collecting sensitive data such as mnemonics and private keys from the app and sending it to their own hosted Sentry server. While Sentry <a target=\"_blank\" href=\"https:\/\/docs.sentry.io\/platforms\/python\/guides\/logging\/data-management\/sensitive-data\/\" class=\"ext-link\" rel=\"external noopener\"><span class=\"s1\">specifically recommends<\/span><\/a> users to scrub sensitive data, it is objectively difficult to implement each and every piece of advice.<\/p>\n<p class=\"p3\">Moreover, different apps will have different definitions and requirements of what data is considered sensitive. It is impossible to really create a generic guideline on what to log and what not to log. However, in this instance, logging mnemonics are absolutely a sure-shot way to provide a stepping stone for an attacker to mount attacks on wallets.<\/p>\n<h3><em><strong>What Is a Mnemonic?<\/strong><\/em><\/h3>\n<p><em>A mnemonic is usually a collection of 12 words that a user can choose when they create a new crypto wallet. In the case a user is unable to use the password, they can use the mnemonic to recover the wallet. It provides a more user-friendly recovery system in the absence of a centralized password store and recovery system. This is so crucial that some people use <a target=\"_blank\" href=\"https:\/\/seedplate.com\/\" class=\"ext-link\" rel=\"external noopener\">metal seed plates<\/a> to store their mnemonics.<\/em><\/p>\n<p class=\"p3\">While SlowMist investigation is still not complete, there is no doubt that the decision to log mnemonics was a dangerous one. The analysis suggests that approximately 31% of known compromised victim wallets were the same ones that were found in the Sentry logs. Therefore, the mnemonic leak could merely be a correlation or could actually be the root cause. We won\u2019t be surprised either way. This is how someone who is able to access the hosted sentry server could have accessed it:<span class=\"Apple-converted-space\">\u00a0<\/span><\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-22687464\" src=\"https:\/\/cdn.thenewstack.io\/media\/2022\/09\/263bb74b-wallet-leak-mnemonic.png\" alt=\"\" width=\"620\" height=\"293\" \/><\/p>\n<p class=\"p4\">But, we know developers and we empathize with them. This is not their fault \u2014 this era\u2019s coding paradigm is complex. Modern software is built upon layers and layers of libraries and other code. Logging has gone from printing something pretty on a local console in a basement machine to monitoring billions of actions in millions of devices and machines running globally. Fine-grained data is collected on all user actions and about their details \u2014 sometimes as damning as critical wallet details. The data has now exited the confines of the app. And it is not coming back.<span class=\"Apple-converted-space\">\u00a0<\/span><\/p>\n<h2 class=\"p5\">How to Fix This?<\/h2>\n<p class=\"p6\">No amount of operational safety and privacy policies can alone help fix this. The nature of modern software prevents detailed manual scrutiny of such leaks. What we need are tools that help give us visibility into what is happening to the data across large codebases so that privacy\/security engineers or a developer themselves can identify specific points of possible leaks before they can happen. This approach of shifting left has been used in security before \u2014 it is now time to implement it for data and privacy.<span class=\"Apple-converted-space\">\u00a0<\/span><\/p>\n<h2 class=\"p7\"><b>Hunting for a Mnemonic Leak Using Privado Open Source<\/b><\/h2>\n<p class=\"p3\">While we can\u2019t really get the source of the Slope app, we can surely try to recreate the scenario with a sample app. Let\u2019s take this simple <a target=\"_blank\" href=\"https:\/\/github.com\/tuxology\/BitcoinWallet\" class=\"ext-link\" rel=\"external noopener\"><span class=\"s1\">BitcoinWallet<\/span><\/a> app that I have modified and add some Sentry logging to an imaginary endpoint:<span class=\"Apple-converted-space\">\u00a0<\/span><\/p>\n<div id=\"crayon-632ee36d1c93e142381067\" class=\"crayon-syntax crayon-theme-github-gist crayon-font-liberation-mono crayon-os-pc print-yes notranslate\" data-settings=\" minimize scroll-always\" style=\"margin-top: 12px;margin-bottom: 12px;font-size: 12px !important;line-height: 20px !important\">\n<p><textarea class=\"crayon-plain print-no\" data-settings=\"dblclick\" readonly=\"readonly\" style=\"font-size: 12px !important;line-height: 20px !important\"><br \/>\npublic static void main(String[] args) throws Exception {&#013;<br \/>\n&#013;<br \/>\n\u00a0 \u00a0 \/\/ initialize Sentry&#013;<br \/>\n&#013;<br \/>\n\u00a0 \u00a0 Sentry.init(options -&amp;gt; {&#013;<br \/>\n&#013;<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 options.setDsn(&#8220;https:\/\/examplePublicKey@o0.ingest.sentry.io\/0&#8221;);&#013;<br \/>\n&#013;<br \/>\n\u00a0 \u00a0 });&#013;<br \/>\n&#013;<br \/>\n\u00a0 \u00a0 String entropy = createEntropy();&#013;<br \/>\n&#013;<br \/>\n\u00a0 \u00a0 try {&#013;<br \/>\n&#013;<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 String mnemonic = generateMnemonic(entropy);&#013;<br \/>\n&#013;<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 System.out.println(mnemonic);&#013;<br \/>\n&#013;<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 Sentry.getContext().addTag(&#8220;mnemonic&#8221;, mnemonic);&#013;<br \/>\n&#013;<br \/>\n\u00a0 \u00a0 } catch(Exception e) {&#013;<br \/>\n&#013;<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 Sentry.capture(e);<\/textarea><\/p>\n<div class=\"crayon-main\">\n<table class=\"crayon-table\">\n<tr class=\"crayon-row\">\n<td class=\"crayon-nums \" data-settings=\"show\">\n<div class=\"crayon-nums-content\" style=\"font-size: 12px !important;line-height: 20px !important\">\n<p>1<\/p>\n<p>2<\/p>\n<p>3<\/p>\n<p>4<\/p>\n<p>5<\/p>\n<p>6<\/p>\n<p>7<\/p>\n<p>8<\/p>\n<p>9<\/p>\n<p>10<\/p>\n<p>11<\/p>\n<p>12<\/p>\n<p>13<\/p>\n<p>14<\/p>\n<p>15<\/p>\n<p>16<\/p>\n<p>17<\/p>\n<p>18<\/p>\n<p>19<\/p>\n<p>20<\/p>\n<p>21<\/p>\n<p>22<\/p>\n<p>23<\/p>\n<\/div>\n<\/td>\n<td class=\"crayon-code\">\n<div class=\"crayon-pre\" style=\"font-size: 12px !important;line-height: 20px !important\">\n<p><span class=\"crayon-e\">public <\/span><span class=\"crayon-e\">static <\/span><span class=\"crayon-e\">void <\/span><span class=\"crayon-e\">main<\/span>(<span class=\"crayon-i\">String<\/span>[]<span class=\"crayon-h\"> <\/span><span class=\"crayon-i\">args<\/span>)<span class=\"crayon-h\"> <\/span><span class=\"crayon-e\">throws<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-e\">Exception<\/span><span class=\"crayon-h\"> <\/span>{<\/p>\n<p>\u00a0<\/p>\n<p>\u00a0<span class=\"crayon-h\"> <\/span>\u00a0<span class=\"crayon-h\"> <\/span><span class=\"crayon-c\">\/\/ initialize Sentry<\/span><\/p>\n<p>\u00a0<\/p>\n<p>\u00a0<span class=\"crayon-h\"> <\/span>\u00a0<span class=\"crayon-h\"> <\/span><span class=\"crayon-i\">Sentry<\/span><span class=\"crayon-st\">.<\/span><span class=\"crayon-e\">init<\/span>(<span class=\"crayon-i\">options<\/span><span class=\"crayon-h\"> <\/span>&#8211;<span class=\"crayon-sy\">&amp;gt;<\/span><span class=\"crayon-h\"> <\/span>{<\/p>\n<p>\u00a0<\/p>\n<p>\u00a0<span class=\"crayon-h\"> <\/span>\u00a0<span class=\"crayon-h\"> <\/span>\u00a0<span class=\"crayon-h\"> <\/span>\u00a0<span class=\"crayon-h\"> <\/span><span class=\"crayon-i\">options<\/span><span class=\"crayon-st\">.<\/span><span class=\"crayon-e\">setDsn<\/span>(<span class=\"crayon-s\">&#8220;https:\/\/examplePublicKey@o0.ingest.sentry.io\/0&#8221;<\/span>);<\/p>\n<p>\u00a0<\/p>\n<p>\u00a0<span class=\"crayon-h\"> <\/span>\u00a0<span class=\"crayon-h\"> <\/span>});<\/p>\n<p>\u00a0<\/p>\n<p>\u00a0<span class=\"crayon-h\"> <\/span>\u00a0<span class=\"crayon-h\"> <\/span><span class=\"crayon-e\">String <\/span><span class=\"crayon-i\">entropy<\/span><span class=\"crayon-h\"> <\/span>=<span class=\"crayon-h\"> <\/span><span class=\"crayon-e\">createEntropy<\/span>();<\/p>\n<p>\u00a0<\/p>\n<p>\u00a0<span class=\"crayon-h\"> <\/span>\u00a0<span class=\"crayon-h\"> <\/span><span class=\"crayon-e\">try<\/span><span class=\"crayon-h\"> <\/span>{<\/p>\n<p>\u00a0<\/p>\n<p>\u00a0<span class=\"crayon-h\"> <\/span>\u00a0<span class=\"crayon-h\"> <\/span>\u00a0<span class=\"crayon-h\"> <\/span>\u00a0<span class=\"crayon-h\"> <\/span><span class=\"crayon-e\">String <\/span><span class=\"crayon-i\">mnemonic<\/span><span class=\"crayon-h\"> <\/span>=<span class=\"crayon-h\"> <\/span><span class=\"crayon-e\">generateMnemonic<\/span>(<span class=\"crayon-i\">entropy<\/span>);<\/p>\n<p>\u00a0<\/p>\n<p>\u00a0<span class=\"crayon-h\"> <\/span>\u00a0<span class=\"crayon-h\"> <\/span>\u00a0<span class=\"crayon-h\"> <\/span>\u00a0<span class=\"crayon-h\"> <\/span><span class=\"crayon-i\">System<\/span><span class=\"crayon-st\">.<\/span><span class=\"crayon-i\">out<\/span><span class=\"crayon-st\">.<\/span><span class=\"crayon-e\">println<\/span>(<span class=\"crayon-i\">mnemonic<\/span>);<\/p>\n<p>\u00a0<\/p>\n<p>\u00a0<span class=\"crayon-h\"> <\/span>\u00a0<span class=\"crayon-h\"> <\/span>\u00a0<span class=\"crayon-h\"> <\/span>\u00a0<span class=\"crayon-h\"> <\/span><span class=\"crayon-i\">Sentry<\/span><span class=\"crayon-st\">.<\/span><span class=\"crayon-e\">getContext<\/span>().<span class=\"crayon-e\">addTag<\/span>(<span class=\"crayon-s\">&#8220;mnemonic&#8221;<\/span>,<span class=\"crayon-h\"> <\/span><span class=\"crayon-i\">mnemonic<\/span>);<\/p>\n<p>\u00a0<\/p>\n<p>\u00a0<span class=\"crayon-h\"> <\/span>\u00a0<span class=\"crayon-h\"> <\/span>}<span class=\"crayon-h\"> <\/span><span class=\"crayon-e\">catch<\/span>(<span class=\"crayon-i\">Exception<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-st\">e<\/span>)<span class=\"crayon-h\"> <\/span>{<\/p>\n<p>\u00a0<\/p>\n<p>\u00a0<span class=\"crayon-h\"> <\/span>\u00a0<span class=\"crayon-h\"> <\/span>\u00a0<span class=\"crayon-h\"> <\/span>\u00a0<span class=\"crayon-h\"> <\/span><span class=\"crayon-i\">Sentry<\/span><span class=\"crayon-st\">.<\/span><span class=\"crayon-e\">capture<\/span>(<span class=\"crayon-st\">e<\/span>);<\/p>\n<\/div>\n<\/td>\n<\/tr>\n<\/table>\n<\/div>\n<\/div>\n<p class=\"\">Here we can see that the user\u2019s mnemonic could \u201caccidentally\u201d leak to Sentry service they are running. Imagine this, but deep within layers of your app. So every time a user would create a new wallet and get a 12-word mnemonic (that is essentially a key to recover the wallet), There is a risk it gets logged to their central logging infra.<\/p>\n<p class=\"\">One way to find this type of leakage now is to use the Privado open source tool. A developer can run a privacy scan and start exploring what data it discovers and visually see if something like a mnemonic is flowing to a third-party logging service as shown below:<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-22687465\" src=\"https:\/\/cdn.thenewstack.io\/media\/2022\/09\/7e04dc9b-privado-dataflow.png\" alt=\"\" width=\"620\" height=\"268\" \/><\/p>\n<p class=\"p3\">To try this out yourself on this sample BitcoinWallet app or to find data leaks in your own Java apps, head to the <a target=\"_blank\" href=\"https:\/\/github.com\/Privado-Inc\/privado\" class=\"ext-link\" rel=\"external noopener\">Privado OSS repo<\/a> and try it out.\u00a0In addition to out-of-the-box discovery, there are hundreds of custom sources and sinks that can be defined as rules in Privado. If you come across interesting data sources and data sinks you want to add, feel free to contribute to the project and submit pull requests.<\/p>\n<div id=\"crayon-632ee36d1c945348821349\" class=\"crayon-syntax crayon-theme-github-gist crayon-font-liberation-mono crayon-os-pc print-yes notranslate\" data-settings=\" minimize scroll-always\" style=\"margin-top: 12px;margin-bottom: 12px;font-size: 12px !important;line-height: 20px !important\">\n<p><textarea class=\"crayon-plain print-no\" data-settings=\"dblclick\" readonly=\"readonly\" style=\"font-size: 12px !important;line-height: 20px !important\"><br \/>\n&#8211; id: Data.Sensitive.AccountData.Mnemonic&#013;<br \/>\n&#013;<br \/>\nname: Mnemonic&#013;<br \/>\n&#013;<br \/>\ncategory: Account Data&#013;<br \/>\n&#013;<br \/>\nisSensitive: False&#013;<br \/>\n&#013;<br \/>\nsensitivity: high&#013;<br \/>\n&#013;<br \/>\npatterns:&#013;<br \/>\n&#013;<br \/>\n\u00a0 &#8211; &#8220;(?i).*(mnemonic)&#8221;&#013;<br \/>\n&#013;<br \/>\ntags:&#013;<br \/>\n&#013;<br \/>\n\u00a0 law: GDPR<\/textarea><\/p>\n<div class=\"crayon-main\">\n<table class=\"crayon-table\">\n<tr class=\"crayon-row\">\n<td class=\"crayon-nums \" data-settings=\"show\">\n<div class=\"crayon-nums-content\" style=\"font-size: 12px !important;line-height: 20px !important\">\n<p>1<\/p>\n<p>2<\/p>\n<p>3<\/p>\n<p>4<\/p>\n<p>5<\/p>\n<p>6<\/p>\n<p>7<\/p>\n<p>8<\/p>\n<p>9<\/p>\n<p>10<\/p>\n<p>11<\/p>\n<p>12<\/p>\n<p>13<\/p>\n<p>14<\/p>\n<p>15<\/p>\n<p>16<\/p>\n<p>17<\/p>\n<\/div>\n<\/td>\n<td class=\"crayon-code\">\n<div class=\"crayon-pre\" style=\"font-size: 12px !important;line-height: 20px !important\">\n<p>&#8211;<span class=\"crayon-h\"> <\/span><span class=\"crayon-i\">id<\/span>:<span class=\"crayon-h\"> <\/span><span class=\"crayon-i\">Data<\/span><span class=\"crayon-st\">.<\/span><span class=\"crayon-i\">Sensitive<\/span><span class=\"crayon-st\">.<\/span><span class=\"crayon-i\">AccountData<\/span><span class=\"crayon-st\">.<\/span><span class=\"crayon-e\">Mnemonic<\/span><\/p>\n<p>\u00a0<\/p>\n<p><span class=\"crayon-i\">name<\/span>:<span class=\"crayon-h\"> <\/span><span class=\"crayon-e\">Mnemonic<\/span><\/p>\n<p>\u00a0<\/p>\n<p><span class=\"crayon-i\">category<\/span>:<span class=\"crayon-h\"> <\/span><span class=\"crayon-e\">Account <\/span><span class=\"crayon-e\">Data<\/span><\/p>\n<p>\u00a0<\/p>\n<p><span class=\"crayon-i\">isSensitive<\/span>:<span class=\"crayon-h\"> <\/span><span class=\"crayon-e\">False<\/span><\/p>\n<p>\u00a0<\/p>\n<p><span class=\"crayon-i\">sensitivity<\/span>:<span class=\"crayon-h\"> <\/span><span class=\"crayon-e\">high<\/span><\/p>\n<p>\u00a0<\/p>\n<p><span class=\"crayon-i\">patterns<\/span>:<\/p>\n<p>\u00a0<\/p>\n<p>\u00a0<span class=\"crayon-h\"> <\/span>&#8211;<span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">&#8220;(?i).*(mnemonic)&#8221;<\/span><\/p>\n<p>\u00a0<\/p>\n<p><span class=\"crayon-i\">tags<\/span>:<\/p>\n<p>\u00a0<\/p>\n<p>\u00a0<span class=\"crayon-h\"> <\/span><span class=\"crayon-i\">law<\/span>:<span class=\"crayon-h\"> <\/span><span class=\"crayon-v\">GDPR<\/span><\/p>\n<\/div>\n<\/td>\n<\/tr>\n<\/table>\n<\/div>\n<\/div>\n<p class=\"p3\">In this example, to track a wallet mnemonic, I simply had to add the above rule in a <a target=\"_blank\" href=\"https:\/\/github.com\/Privado-Inc\/privado\/pull\/64\/files\" class=\"ext-link\" rel=\"external noopener\"><span class=\"s1\">rules YAML file<\/span><\/a> and the data tracking just worked all the way to Sentry sink!<\/p>\n<p class=\"p3\">It is now time to bring a privacy engineering tool to every developer and data security analyst so that we can collectively ensure that private data in the app remains private from day 1 of development.<span class=\"Apple-converted-space\">\u00a0<\/span><\/p>\n<div class=\"tns-logo-slug\">\n<p><title>Group<\/title><br \/>\nCreated with Sketch.<\/p><\/div>\n<\/div>\n<p><br \/>\n<br \/><a href=\"https:\/\/thenewstack.io\/why-unsuspecting-data-leaks-are-a-key-to-rampant-blockchain-hacks\/\">Source link <\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Last month, Solana blockchain faced yet another attack in a series of recent attacks targeting blockchains. Blockchains are the ultimate record of crypto assets and recording transactions from one wallet to another on the ledger guarantees that money gets transferred and the operation virtually remains anonymous. This is an absolute gem for criminals because 1) [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":29986,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","enabled":false}}},"categories":[38],"tags":[73,21,5184,103,11371,7872,11370],"class_list":["post-29985","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blockchain","tag-blockchain","tag-data","tag-hacks","tag-key","tag-leaks","tag-rampant","tag-unsuspecting"],"jetpack_publicize_connections":[],"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"http:\/\/egrowonline.com\/wp-content\/uploads\/2022\/09\/71a6d0df-pc-1018430_640.jpeg","_links":{"self":[{"href":"http:\/\/egrowonline.com\/index.php?rest_route=\/wp\/v2\/posts\/29985","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/egrowonline.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/egrowonline.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/egrowonline.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/egrowonline.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=29985"}],"version-history":[{"count":1,"href":"http:\/\/egrowonline.com\/index.php?rest_route=\/wp\/v2\/posts\/29985\/revisions"}],"predecessor-version":[{"id":29987,"href":"http:\/\/egrowonline.com\/index.php?rest_route=\/wp\/v2\/posts\/29985\/revisions\/29987"}],"wp:featuredmedia":[{"embeddable":true,"href":"http:\/\/egrowonline.com\/index.php?rest_route=\/wp\/v2\/media\/29986"}],"wp:attachment":[{"href":"http:\/\/egrowonline.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=29985"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/egrowonline.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=29985"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/egrowonline.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=29985"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}