一键导入
generate-poc
Reproduce a true-positive finding against the running application. Use when a finding needs dynamic confirmation
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Reproduce a true-positive finding against the running application. Use when a finding needs dynamic confirmation
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Model a library method's taint propagation as a passThrough approximation config. Use for a dropped external method whose propagation is simple copying
Author and verify an OpenTaint detection rule for a vulnerability class on JVM code. Use whenever a rule needs to be created for an uncovered vulnerability, or an existing rule needs a false-positive or false-negative fix
Create an OpenTaint test project with annotated positive/negative samples for verifying a rule or approximation. Use when a rule or approximation needs a test project to check against
Debug a rule or approximation that behaves unexpectedly by tracing where taint is dropped. Use when its samples won't pass after repeated attempts, or it passes tests but is wrong on a real scan
Write an OpenTaint engine-issue report from a confirmed diagnosis, optionally opening a GitHub issue. Use when engine-side issue got confirmed and requires report
Mark which of a project's dependency libraries could introduce taint sources or sinks. Use to start attack-surface discovery
| name | generate-poc |
| description | Reproduce a true-positive finding against the running application. Use when a finding needs dynamic confirmation |
| license | Apache-2.0 |
| metadata | {"author":"opentaint","version":"0.2"} |
Try to make the vulnerability actually fire on a running instance via a Python script, and record the outcome — confirmed or failed
From the caller; if omitted, fall back to the default. Ask only when a required input is missing and has no sensible default
<finding> — the TP finding file. Default: .opentaint/tracking/findings/<name>.yaml (name is required)<project-root> — sources to build and run. Default: current directory<base-url> (optional) — base URL if the app is already running<poc-dir> — where the PoC script is saved. Default: .opentaint/pocsReuse <base-url> if given. Otherwise build and start the app the way the project expects (spring-boot:run, java -jar, docker compose, …), wait until it's listening, and note the base URL. The PoC must hit a live instance
When the app needs backing services (DB, broker, cache, …), bring them all up with one docker compose on a shared network rather than starting each by hand, and register it as a single compose entry
Bind to 127.0.0.1 (--server.address=127.0.0.1, docker run -p 127.0.0.1:8080:8080, a compose override on the port mapping) — never 0.0.0.0 or a public interface: a live exploit must not be reachable off-host. A specific non-local IP is fine when the test genuinely needs one, but never the public wildcard
Once it's listening, record it in the registry (see § Tracking) so the orchestrator can reap it later
From the finding's source location find the entry point — the route and method, and the param / header / body field that carries the tainted input — and a payload that drives it to the sink. Common shapes:
?id=1' OR '1'='1?cmd=;cat /etc/passwd?path=../../../etc/passwd?q=<script>alert(1)</script>?url=http://169.254.169.254/latest/meta-data/<!ENTITY xxe SYSTEM "file:///etc/passwd">Write a self-contained Python script to <poc-dir>/<finding_name>.py that does any setup (auth, seed state), sends the request, and asserts the observable evidence — so it's re-runnable and self-checking.
Run it. Confirmation needs observable proof — rows returned, file contents, command output, a time delay, an out-of-band callback, an injection-revealing error and so on
poc: confirmed, record poc_script, and in notes describe the working sequence (setup → request(s) → observed evidence), not just the final requestpoc: failed, save the script, and in notes record the variants you tried and why each didn't fire<poc-dir>/<finding_name>.pypoc set to confirmed or failed, poc_script recorded, evidence/reason in notes.opentaint/tracking/poc-servers.yaml and leave it running so the next PoC can reuse it; report the <base-url>. You do not stop it — the orchestrator tears down every registered instance at the end of the PoC phase.opentaint/vulnerabilities.md — main assembles that from the confirmed findingsIf you started an instance, append it to .opentaint/tracking/poc-servers.yaml (PoCs run one at a time, so the append never races) — the orchestrator reads this to tear instances down (kind + ref give it the stop command):
servers:
- kind: process # process | container | compose
port: 8080
ref: "12345" # pid | container id/name | compose file path
In <finding>, set poc and poc_script and append the result to notes:
poc: confirmed # confirmed | failed
poc_script: .opentaint/pocs/brave-hopper.py
notes: >
<existing notes>
poc: logged in as a seeded user (POST /login), then GET /api/orders?orderBy=id);SELECT pg_sleep(5)--
— the injected ORDER BY delayed the response ~5s while a benign orderBy=id returned instantly → time-based SQLi confirmed
Failed instead — narrate the attempts, not a single request:
poc: failed
poc_script: .opentaint/pocs/brave-hopper.py
notes: >
<existing notes>
poc: tried ' OR 1=1--, a UNION SELECT, and time-based pg_sleep on /api/orders and /api/orders/search;
every variant returned 400 — orderBy is whitelisted to column names server-side → could not reproduce
failed and DO NOT flip verdict here0.0.0.0 or a public interface — a running exploit must stay off-host (localhost, or a specific IP the test needs)poc-servers.yaml