George0Papasotiriou/CVE-2026-2020-SSRF-via-URL-Parser-Differential

GitHub: George0Papasotiriou/CVE-2026-2020-SSRF-via-URL-Parser-Differential

该项目复现了 CVE-2026-2020 SSRF 漏洞,演示 Python 中 urllib.parse 与 requests 两个 URL 解析器差异导致白名单绕过的完整攻击链。

Stars: 0 | Forks: 0

## CVE-2026-2020 – 通过 URL Parser Differential 触发的 SSRF ### **程序代码 (Python)** ``` # vulnerable_service.py - 使用 urllib.parse 验证 URL,使用 requests 获取 from flask import Flask, request import requests import urllib.parse app = Flask(__name__) def is_allowed_url(url): parsed = urllib.parse.urlparse(url) # Only allow http://localhost and http://127.0.0.1 return parsed.hostname in ('localhost', '127.0.0.1') @app.route('/fetch') def fetch(): url = request.args.get('url') if not is_allowed_url(url): return "Blocked", 403 # Fetch with requests (different parser) r = requests.get(url, timeout=5) return r.text if __name__ == '__main__': app.run(port=5000) ``` # CVE-2026-2020 – 通过 URL Parser Differential 触发的 SSRF ![严重程度:高](https://img.shields.io/badge/severity-high-orange) ## 概述 某服务使用 Python 的 `urllib.parse.urlparse` 来验证 URL,但随后却使用 `requests` 库来获取它们。这两个解析器在处理特殊字符(如 `@`)时的差异,允许攻击者绕过白名单并访问内部资源。 ## 漏洞详情 - **类型:** Server‑Side Request Forgery (SSRF) – Parser Differential - **影响:** 访问内部服务,云元数据泄露。 - **根本原因:** `urlparse` 将 `localhost@evil.com` 的主机名视为 `localhost`(`@` 之前的部分为用户名),而 `requests` 则将 host 解释为 `evil.com`。 ## 漏洞利用演示 1. 启动易受攻击的服务: pip install flask requests python vulnerable_service.py 2. 运行漏洞利用: python exploit_ssrf_parser_diff.py
标签:CISA项目, Flask, Maven, Python, Syscall, Web开发, 安全, 无后门, 服务端请求伪造, 漏洞验证, 超时处理, 逆向工具