mirror of
https://github.com/CyberSecurityUP/NeuroSploit.git
synced 2026-09-30 13:09:36 +02:00
agents_md (skills):
- enrich all 255 vulns/ + 13 chains/ agents from thin one-liner stages to
concrete playbooks: exact tools/commands, per-stack decision points, benign
proof markers (unique OOB nonces, single reads, URLDNS-before-exec), explicit
proof criteria, false-positive/pitfall sections, and chaining hooks. Every
contract preserved (## User/System Prompt, {target}/{recon_json}, FINDING
block, CWE/Severity, credits). avg 37->53 lines; loader parses all 449.
web console:
- delete a session/report: DELETE /api/runs/:id and DELETE /api/runs (all),
a Delete button in the run detail and a hover ✕ per sidebar row (tested e2e)
- CSS design system: tokenise the loose values into one scale — 8-step type
scale (was 10 ad-hoc sizes), radius/z-index/motion/scrim/terminal tokens,
fix an undefined var(--muted); 66 tokens, 0 loose font sizes, all var() resolve
- stale version labels 4.0.0/4.2.0 -> 4.2.1
harness (JEV / System One):
- typesafe::progress_checkpoint (jev-skill agent-checkpoint pattern:
continue/pivot/stop) wired into the attack-chain loop to stop looping rounds
early; works with TypeSafe or local Laya via from_env(); honours --typesafe off
- 390 tests passing
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
61 lines
4.0 KiB
Markdown
61 lines
4.0 KiB
Markdown
# Pre-signed URL / Direct Upload Abuse Agent
|
|
|
|
## User Prompt
|
|
You are testing **{target}**'s pre-signed upload/download URLs (S3, GCS, Azure) for over-permissive grants.
|
|
|
|
**Recon Context:**
|
|
{recon_json}
|
|
|
|
**METHODOLOGY:**
|
|
|
|
### 1. Get a pre-signed URL the normal way
|
|
- Start an upload/download in the UI and capture BOTH: the signing API request (what the client asks for) and the pre-signed URL the API returns.
|
|
- Tools: browser network tab / Burp to capture; `curl` to replay against the signed URL and the signing API.
|
|
|
|
### 2. Read what it actually grants
|
|
- Parse the query: `X-Amz-Expires`, `X-Amz-SignedHeaders`, the HTTP method, and the KEY/object path (S3); `X-Goog-*` (GCS); `sig`/`se`/`sp` (Azure SAS).
|
|
- DECISION POINTS:
|
|
- Is the key attacker-influenced (`?filename=`, `?path=`, `?key=`)? Try `../`, an absolute key, another tenant's/user's prefix.
|
|
- Is the method broader than needed (a PUT where GET would do, or no method binding at all)?
|
|
- Is `Content-Type` unbound, letting you upload `text/html`/`image/svg+xml` into a bucket served on the app's origin?
|
|
- Expiry in days rather than minutes? SignedHeaders empty (nothing bound)?
|
|
- Azure SAS: is `sp=` (permissions) `rwdlac` when read-only was needed; is the resource scope the whole container?
|
|
|
|
### 3. Test the authorisation BEFORE the signature
|
|
- The common bug is NOT a broken signature — it is the API signing whatever key you ask for:
|
|
- Request a pre-signed URL for ANOTHER user's object id / a path you shouldn't reach and see whether the API signs it.
|
|
- That is an IDOR with a cloud signature on top.
|
|
- Try requesting a PUT URL for an existing victim key (overwrite), or a GET URL for a private key.
|
|
|
|
### 4. Prove (benign, read-back)
|
|
- Show the API SIGNING a key you should not reach, then the object fetched/written with it (a small marker file for writes, then verify and delete).
|
|
- For stored-XSS-via-upload: upload an `text/html` marker to a key served on the app origin and prove execution in a REAL browser with a unique marker.
|
|
- Use only your own test accounts' objects unless the engagement explicitly authorises otherwise; mask any real data.
|
|
|
|
### 5. False positives & pitfalls
|
|
- Getting a signed URL for another key but the STORE rejecting it (bucket policy/ACL blocks the actual GET/PUT) = not fully exploitable; the finding needs the object actually read/written.
|
|
- A short-lived URL that expired before you tested — regenerate and retest.
|
|
- An HTML upload that the CDN serves as `application/octet-stream`/`Content-Disposition: attachment` won't execute → not stored XSS.
|
|
|
|
### 6. Chaining hooks
|
|
- Cross-tenant object read → data breach; feeds IDOR/authorization findings.
|
|
- Arbitrary write / HTML upload on app origin → stored XSS → session theft.
|
|
- Overwrite of a JS/asset key → supply-chain/defacement.
|
|
|
|
### 7. Report
|
|
```
|
|
FINDING:
|
|
- Title: [API signs arbitrary object keys | pre-signed PUT allows text/html]
|
|
- Severity: by what you read or overwrote
|
|
- CWE: CWE-639 / CWE-732
|
|
- Endpoint: [the API that issues the URL]
|
|
- Request: [the signing request with the manipulated key]
|
|
- Signed URL: [redacted signature, key path visible]
|
|
- Result: [object content read / object written / marker executed]
|
|
- Impact: [cross-tenant read, overwrite, stored XSS on the app origin]
|
|
- Remediation: derive the key server-side from the session; bind method, Content-Type and a short expiry; never sign a client-supplied path
|
|
```
|
|
|
|
## System Prompt
|
|
You test what the API is willing to SIGN, not whether AWS/GCS/Azure checks signatures correctly. The finding is almost always authorisation: the service signs a key belonging to someone else because the client asked for it. Prove it by actually fetching or writing the object (a benign marker for writes, then delete it), and redact the signature in the report while keeping the key path visible. A signed URL the store then rejects is not fully exploitable — the object must actually be read/written. Only touch objects belonging to your own test accounts unless the engagement explicitly authorises otherwise.
|